RTSDK: add product projects, change folder structure.
authorjooyoul <jy.exe.lee@samsung.com>
Fri, 17 Feb 2017 06:39:20 +0000 (15:39 +0900)
committerHyeongseok Heo <harry.heo@samsung.com>
Fri, 17 Feb 2017 07:10:49 +0000 (16:10 +0900)
- add projects for product.
- add tm terminal sources.

Change-Id: Iea1c6c9ee1f80cb7ef50ad860f116da18abd5572
Signed-off-by: jooyoul <jy.exe.lee@samsung.com>
4511 files changed:
resources/samples/local/.project [moved from RtSample/local/.project with 100% similarity]
resources/samples/local/README.txt [moved from RtSample/local/README.txt with 100% similarity]
resources/samples/local/apps/.gitignore [moved from RtSample/local/apps/.gitignore with 100% similarity]
resources/samples/local/apps/COPYING [moved from RtSample/local/apps/COPYING with 100% similarity]
resources/samples/local/apps/Kconfig [moved from RtSample/local/apps/Kconfig with 100% similarity]
resources/samples/local/apps/Make.defs [moved from RtSample/local/apps/Make.defs with 100% similarity]
resources/samples/local/apps/Makefile [moved from RtSample/local/apps/Makefile with 100% similarity]
resources/samples/local/apps/README.txt [moved from RtSample/local/apps/README.txt with 100% similarity]
resources/samples/local/apps/examples/Kconfig [moved from RtSample/local/apps/examples/Kconfig with 100% similarity]
resources/samples/local/apps/examples/Make.defs [moved from RtSample/local/apps/examples/Make.defs with 100% similarity]
resources/samples/local/apps/examples/Makefile [moved from RtSample/local/apps/examples/Makefile with 100% similarity]
resources/samples/local/apps/examples/README.txt [moved from RtSample/local/apps/examples/README.txt with 100% similarity]
resources/samples/local/apps/examples/artik_demo/Kconfig [moved from RtSample/local/apps/examples/artik_demo/Kconfig with 100% similarity]
resources/samples/local/apps/examples/artik_demo/Kconfig_ENTRY [moved from RtSample/local/apps/examples/artik_demo/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/artik_demo/Makefile [moved from RtSample/local/apps/examples/artik_demo/Makefile with 100% similarity]
resources/samples/local/apps/examples/artik_demo/artik_demo.c [moved from RtSample/local/apps/examples/artik_demo/artik_demo.c with 100% similarity]
resources/samples/local/apps/examples/dtls_client/Kconfig [moved from RtSample/local/apps/examples/dtls_client/Kconfig with 100% similarity]
resources/samples/local/apps/examples/dtls_client/Kconfig_ENTRY [moved from RtSample/local/apps/examples/dtls_client/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/dtls_client/Makefile [moved from RtSample/local/apps/examples/dtls_client/Makefile with 100% similarity]
resources/samples/local/apps/examples/dtls_client/dtls_client_main.c [moved from RtSample/local/apps/examples/dtls_client/dtls_client_main.c with 100% similarity]
resources/samples/local/apps/examples/dtls_server/Kconfig [moved from RtSample/local/apps/examples/dtls_server/Kconfig with 100% similarity]
resources/samples/local/apps/examples/dtls_server/Kconfig_ENTRY [moved from RtSample/local/apps/examples/dtls_server/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/dtls_server/Makefile [moved from RtSample/local/apps/examples/dtls_server/Makefile with 100% similarity]
resources/samples/local/apps/examples/dtls_server/dtls_server_main.c [moved from RtSample/local/apps/examples/dtls_server/dtls_server_main.c with 100% similarity]
resources/samples/local/apps/examples/fota_sample/Kconfig [moved from RtSample/local/apps/examples/fota_sample/Kconfig with 100% similarity]
resources/samples/local/apps/examples/fota_sample/Kconfig_ENTRY [moved from RtSample/local/apps/examples/fota_sample/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/fota_sample/Makefile [moved from RtSample/local/apps/examples/fota_sample/Makefile with 100% similarity]
resources/samples/local/apps/examples/fota_sample/fota_sample.c [moved from RtSample/local/apps/examples/fota_sample/fota_sample.c with 100% similarity]
resources/samples/local/apps/examples/hello/.gitignore [moved from RtSample/local/apps/system/mdio/.gitignore with 100% similarity]
resources/samples/local/apps/examples/hello/Kconfig [moved from RtSample/local/apps/examples/hello/Kconfig with 100% similarity]
resources/samples/local/apps/examples/hello/Kconfig_ENTRY [moved from RtSample/local/apps/examples/hello/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/hello/Makefile [moved from RtSample/local/apps/examples/hello/Makefile with 100% similarity]
resources/samples/local/apps/examples/hello/hello_main.c [moved from RtSample/local/apps/examples/hello/hello_main.c with 100% similarity]
resources/samples/local/apps/examples/hello_tash/.gitignore [moved from RtSample/local/apps/system/cu/.gitignore with 100% similarity]
resources/samples/local/apps/examples/hello_tash/Kconfig [moved from RtSample/local/apps/examples/hello_tash/Kconfig with 100% similarity]
resources/samples/local/apps/examples/hello_tash/Kconfig_ENTRY [moved from RtSample/local/apps/examples/hello_tash/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/hello_tash/Makefile [moved from RtSample/local/apps/examples/hello_tash/Makefile with 100% similarity]
resources/samples/local/apps/examples/hello_tash/hello_tash_main.c [moved from RtSample/local/apps/examples/hello_tash/hello_tash_main.c with 100% similarity]
resources/samples/local/apps/examples/helloxx/.gitignore [moved from RtSample/local/apps/examples/workqueue/.gitignore with 100% similarity]
resources/samples/local/apps/examples/helloxx/Kconfig [moved from RtSample/local/apps/examples/helloxx/Kconfig with 100% similarity]
resources/samples/local/apps/examples/helloxx/Kconfig_ENTRY [moved from RtSample/local/apps/examples/helloxx/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/helloxx/Makefile [moved from RtSample/local/apps/examples/helloxx/Makefile with 100% similarity]
resources/samples/local/apps/examples/helloxx/helloxx_main.cxx [moved from RtSample/local/apps/examples/helloxx/helloxx_main.cxx with 100% similarity]
resources/samples/local/apps/examples/iotivity/Kconfig [moved from RtSample/local/apps/examples/iotivity/Kconfig with 100% similarity]
resources/samples/local/apps/examples/iotivity/Kconfig_ENTRY [moved from RtSample/local/apps/examples/iotivity/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/iotivity/Makefile [moved from RtSample/local/apps/examples/iotivity/Makefile with 100% similarity]
resources/samples/local/apps/examples/iotivity/ca_main.c [moved from RtSample/local/apps/examples/iotivity/ca_main.c with 100% similarity]
resources/samples/local/apps/examples/iotivity/data/data.dat [moved from RtSample/local/apps/examples/iotivity/data/data.dat with 100% similarity]
resources/samples/local/apps/examples/iotivity/data/oic_svr_db_server.dat [moved from RtSample/local/apps/examples/iotivity/data/oic_svr_db_server.dat with 100% similarity]
resources/samples/local/apps/examples/iotivity/iotivity_cloud_main.c [moved from RtSample/local/apps/examples/iotivity/iotivity_cloud_main.c with 100% similarity]
resources/samples/local/apps/examples/iotivity/iotivity_main.c [moved from RtSample/local/apps/examples/iotivity/iotivity_main.c with 100% similarity]
resources/samples/local/apps/examples/iotivity/iotivity_sec_main.c [moved from RtSample/local/apps/examples/iotivity/iotivity_sec_main.c with 100% similarity]
resources/samples/local/apps/examples/iotivity/iotivityopts.h [moved from RtSample/local/apps/examples/iotivity/iotivityopts.h with 100% similarity]
resources/samples/local/apps/examples/iotivity/mkfsdata.pl [moved from RtSample/local/apps/examples/iotivity/mkfsdata.pl with 100% similarity]
resources/samples/local/apps/examples/iotivity/ocsecurity.c [moved from RtSample/local/apps/examples/iotivity/ocsecurity.c with 100% similarity]
resources/samples/local/apps/examples/iotivity/ocserver.h [moved from RtSample/local/apps/examples/iotivity/ocserver.h with 100% similarity]
resources/samples/local/apps/examples/iotivity/port_tinyara.c [moved from RtSample/local/apps/examples/iotivity/port_tinyara.c with 100% similarity]
resources/samples/local/apps/examples/iotivity/uuid/uuid.h [moved from RtSample/local/apps/examples/iotivity/uuid/uuid.h with 100% similarity]
resources/samples/local/apps/examples/iperf/.gitignore [moved from RtSample/local/apps/examples/testcase/le_tc/filesystem/.gitignore with 100% similarity]
resources/samples/local/apps/examples/iperf/Kconfig [moved from RtSample/local/apps/examples/iperf/Kconfig with 100% similarity]
resources/samples/local/apps/examples/iperf/Kconfig_ENTRY [moved from RtSample/local/apps/examples/iperf/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/iperf/Makefile [moved from RtSample/local/apps/examples/iperf/Makefile with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf.h [moved from RtSample/local/apps/examples/iperf/iperf.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_api.c [moved from RtSample/local/apps/examples/iperf/iperf_api.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_api.h [moved from RtSample/local/apps/examples/iperf/iperf_api.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_cjson.h [moved from RtSample/local/apps/examples/iperf/iperf_cjson.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_client_api.c [moved from RtSample/local/apps/examples/iperf/iperf_client_api.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_config.h [moved from RtSample/local/apps/examples/iperf/iperf_config.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_error.c [moved from RtSample/local/apps/examples/iperf/iperf_error.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_flowlabel.h [moved from RtSample/local/apps/examples/iperf/iperf_flowlabel.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_locale.c [moved from RtSample/local/apps/examples/iperf/iperf_locale.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_locale.h [moved from RtSample/local/apps/examples/iperf/iperf_locale.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_main.c [moved from RtSample/local/apps/examples/iperf/iperf_main.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_net.c [moved from RtSample/local/apps/examples/iperf/iperf_net.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_net.h [moved from RtSample/local/apps/examples/iperf/iperf_net.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_portable_endian.h [moved from RtSample/local/apps/examples/iperf/iperf_portable_endian.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_queue.h [moved from RtSample/local/apps/examples/iperf/iperf_queue.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_sctp.c [moved from RtSample/local/apps/examples/iperf/iperf_sctp.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_sctp.h [moved from RtSample/local/apps/examples/iperf/iperf_sctp.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_server_api.c [moved from RtSample/local/apps/examples/iperf/iperf_server_api.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_t_timer.c [moved from RtSample/local/apps/examples/iperf/iperf_t_timer.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_t_units.c [moved from RtSample/local/apps/examples/iperf/iperf_t_units.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_t_uuid.c [moved from RtSample/local/apps/examples/iperf/iperf_t_uuid.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_tcp.c [moved from RtSample/local/apps/examples/iperf/iperf_tcp.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_tcp.h [moved from RtSample/local/apps/examples/iperf/iperf_tcp.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_tcp_info.c [moved from RtSample/local/apps/examples/iperf/iperf_tcp_info.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_tcp_window_size.c [moved from RtSample/local/apps/examples/iperf/iperf_tcp_window_size.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_tcp_window_size.h [moved from RtSample/local/apps/examples/iperf/iperf_tcp_window_size.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_timer.c [moved from RtSample/local/apps/examples/iperf/iperf_timer.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_timer.h [moved from RtSample/local/apps/examples/iperf/iperf_timer.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_udp.c [moved from RtSample/local/apps/examples/iperf/iperf_udp.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_udp.h [moved from RtSample/local/apps/examples/iperf/iperf_udp.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_units.c [moved from RtSample/local/apps/examples/iperf/iperf_units.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_units.h [moved from RtSample/local/apps/examples/iperf/iperf_units.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_util.c [moved from RtSample/local/apps/examples/iperf/iperf_util.c with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_util.h [moved from RtSample/local/apps/examples/iperf/iperf_util.h with 100% similarity]
resources/samples/local/apps/examples/iperf/iperf_version.h [moved from RtSample/local/apps/examples/iperf/iperf_version.h with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/.gitignore [moved from RtSample/local/apps/examples/kernel_sample/.gitignore with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/Kconfig [moved from RtSample/local/apps/examples/kernel_sample/Kconfig with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/Kconfig_ENTRY [moved from RtSample/local/apps/examples/kernel_sample/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/Makefile [moved from RtSample/local/apps/examples/kernel_sample/Makefile with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/aio.c [moved from RtSample/local/apps/examples/kernel_sample/aio.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/barrier.c [moved from RtSample/local/apps/examples/kernel_sample/barrier.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/cancel.c [moved from RtSample/local/apps/examples/kernel_sample/cancel.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/cond.c [moved from RtSample/local/apps/examples/kernel_sample/cond.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/dev_null.c [moved from RtSample/local/apps/examples/kernel_sample/dev_null.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/kernel_sample.h [moved from RtSample/local/apps/examples/kernel_sample/kernel_sample.h with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/kernel_sample_main.c [moved from RtSample/local/apps/examples/kernel_sample/kernel_sample_main.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/mqueue.c [moved from RtSample/local/apps/examples/kernel_sample/mqueue.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/mutex.c [moved from RtSample/local/apps/examples/kernel_sample/mutex.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/nsem.c [moved from RtSample/local/apps/examples/kernel_sample/nsem.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/posixtimer.c [moved from RtSample/local/apps/examples/kernel_sample/posixtimer.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/prioinherit.c [moved from RtSample/local/apps/examples/kernel_sample/prioinherit.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/restart.c [moved from RtSample/local/apps/examples/kernel_sample/restart.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/rmutex.c [moved from RtSample/local/apps/examples/kernel_sample/rmutex.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/roundrobin.c [moved from RtSample/local/apps/examples/kernel_sample/roundrobin.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/sem.c [moved from RtSample/local/apps/examples/kernel_sample/sem.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/semtimed.c [moved from RtSample/local/apps/examples/kernel_sample/semtimed.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/sighand.c [moved from RtSample/local/apps/examples/kernel_sample/sighand.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/timedmqueue.c [moved from RtSample/local/apps/examples/kernel_sample/timedmqueue.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/timedwait.c [moved from RtSample/local/apps/examples/kernel_sample/timedwait.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/vfork.c [moved from RtSample/local/apps/examples/kernel_sample/vfork.c with 100% similarity]
resources/samples/local/apps/examples/kernel_sample/waitpid.c [moved from RtSample/local/apps/examples/kernel_sample/waitpid.c with 100% similarity]
resources/samples/local/apps/examples/mdns_test/Kconfig [moved from RtSample/local/apps/examples/mdns_test/Kconfig with 100% similarity]
resources/samples/local/apps/examples/mdns_test/Kconfig_ENTRY [moved from RtSample/local/apps/examples/mdns_test/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/mdns_test/Makefile [moved from RtSample/local/apps/examples/mdns_test/Makefile with 100% similarity]
resources/samples/local/apps/examples/mdns_test/mdns_main.c [moved from RtSample/local/apps/examples/mdns_test/mdns_main.c with 100% similarity]
resources/samples/local/apps/examples/mpu/Kconfig [moved from RtSample/local/apps/examples/mpu/Kconfig with 100% similarity]
resources/samples/local/apps/examples/mpu/Kconfig_ENTRY [moved from RtSample/local/apps/examples/mpu/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/mpu/Makefile [moved from RtSample/local/apps/examples/mpu/Makefile with 100% similarity]
resources/samples/local/apps/examples/mpu/mpu_tc_main.c [moved from RtSample/local/apps/examples/mpu/mpu_tc_main.c with 100% similarity]
resources/samples/local/apps/examples/mpu/tc_read.c [moved from RtSample/local/apps/examples/mpu/tc_read.c with 100% similarity]
resources/samples/local/apps/examples/mpu/tc_write.c [moved from RtSample/local/apps/examples/mpu/tc_write.c with 100% similarity]
resources/samples/local/apps/examples/nettest/Kconfig [moved from RtSample/local/apps/examples/nettest/Kconfig with 100% similarity]
resources/samples/local/apps/examples/nettest/Kconfig_ENTRY [moved from RtSample/local/apps/examples/nettest/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/nettest/Makefile [moved from RtSample/local/apps/examples/nettest/Makefile with 100% similarity]
resources/samples/local/apps/examples/nettest/nettest.c [moved from RtSample/local/apps/examples/nettest/nettest.c with 100% similarity]
resources/samples/local/apps/examples/ntpclient_test/Kconfig [moved from RtSample/local/apps/examples/ntpclient_test/Kconfig with 100% similarity]
resources/samples/local/apps/examples/ntpclient_test/Kconfig_ENTRY [moved from RtSample/local/apps/examples/ntpclient_test/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/ntpclient_test/Makefile [moved from RtSample/local/apps/examples/ntpclient_test/Makefile with 100% similarity]
resources/samples/local/apps/examples/ntpclient_test/ntpclient_main.c [moved from RtSample/local/apps/examples/ntpclient_test/ntpclient_main.c with 100% similarity]
resources/samples/local/apps/examples/proc_test/Kconfig [moved from RtSample/local/apps/examples/proc_test/Kconfig with 100% similarity]
resources/samples/local/apps/examples/proc_test/Kconfig_ENTRY [moved from RtSample/local/apps/examples/proc_test/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/proc_test/Makefile [moved from RtSample/local/apps/examples/proc_test/Makefile with 100% similarity]
resources/samples/local/apps/examples/proc_test/proc_test_main.c [moved from RtSample/local/apps/examples/proc_test/proc_test_main.c with 100% similarity]
resources/samples/local/apps/examples/select_test/Kconfig [moved from RtSample/local/apps/examples/select_test/Kconfig with 100% similarity]
resources/samples/local/apps/examples/select_test/Kconfig_ENTRY [moved from RtSample/local/apps/examples/select_test/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/select_test/Makefile [moved from RtSample/local/apps/examples/select_test/Makefile with 100% similarity]
resources/samples/local/apps/examples/select_test/select_test_main.c [moved from RtSample/local/apps/examples/select_test/select_test_main.c with 100% similarity]
resources/samples/local/apps/examples/sysio_test/Kconfig [moved from RtSample/local/apps/examples/sysio_test/Kconfig with 100% similarity]
resources/samples/local/apps/examples/sysio_test/Kconfig_ENTRY [moved from RtSample/local/apps/examples/sysio_test/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/sysio_test/Makefile [moved from RtSample/local/apps/examples/sysio_test/Makefile with 100% similarity]
resources/samples/local/apps/examples/sysio_test/sysio_main.c [moved from RtSample/local/apps/examples/sysio_test/sysio_main.c with 100% similarity]
resources/samples/local/apps/examples/telnetd/Kconfig [moved from RtSample/local/apps/examples/telnetd/Kconfig with 100% similarity]
resources/samples/local/apps/examples/telnetd/Kconfig_ENTRY [moved from RtSample/local/apps/examples/telnetd/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/telnetd/Makefile [moved from RtSample/local/apps/examples/telnetd/Makefile with 100% similarity]
resources/samples/local/apps/examples/telnetd/README.txt [moved from RtSample/local/apps/examples/telnetd/README.txt with 100% similarity]
resources/samples/local/apps/examples/telnetd/telnetd.c [moved from RtSample/local/apps/examples/telnetd/telnetd.c with 100% similarity]
resources/samples/local/apps/examples/telnetd/telnetd.h [moved from RtSample/local/apps/examples/telnetd/telnetd.h with 100% similarity]
resources/samples/local/apps/examples/testcase/Kconfig [moved from RtSample/local/apps/examples/testcase/Kconfig with 100% similarity]
resources/samples/local/apps/examples/testcase/Kconfig_ENTRY [moved from RtSample/local/apps/examples/testcase/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/testcase/Makefile [moved from RtSample/local/apps/examples/testcase/Makefile with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/Kconfig [moved from RtSample/local/apps/examples/testcase/io_tc/network/Kconfig with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/Make.defs [moved from RtSample/local/apps/examples/testcase/io_tc/network/Make.defs with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/network_tc_main.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/network_tc_main.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_internal.h [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_internal.h with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_accept.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_accept.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_bind.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_bind.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_close.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_close.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_connect.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_connect.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_dhcpc.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_dhcpc.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_dhcps.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_dhcps.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_fcntl.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_fcntl.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_getpeername.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_getpeername.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_getsockname.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_getsockname.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_getsockopt.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_getsockopt.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_ioctl.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_ioctl.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_listen.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_listen.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_recv.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_recv.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_recvfrom.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_recvfrom.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_send.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_send.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_sendto.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_sendto.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_setsockopt.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_setsockopt.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_shutdown.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_shutdown.c with 100% similarity]
resources/samples/local/apps/examples/testcase/io_tc/network/tc_net_socket.c [moved from RtSample/local/apps/examples/testcase/io_tc/network/tc_net_socket.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/filesystem/.gitignore [moved from RtSample/local/apps/examples/iperf/.gitignore with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/filesystem/Kconfig [moved from RtSample/local/apps/examples/testcase/le_tc/filesystem/Kconfig with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/filesystem/Make.defs [moved from RtSample/local/apps/examples/testcase/le_tc/filesystem/Make.defs with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/filesystem/ReadMe.txt [moved from RtSample/local/apps/examples/testcase/le_tc/filesystem/ReadMe.txt with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/filesystem/fs_main.c [moved from RtSample/local/apps/examples/testcase/le_tc/filesystem/fs_main.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/Kconfig [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/Kconfig with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/Make.defs [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/Make.defs with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/kernel_tc_main.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/kernel_tc_main.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_clock.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_clock.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_environ.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_environ.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_errno.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_errno.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_group.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_group.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_internal.h [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_internal.h with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_libgen.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_libgen.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_math.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_math.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_misc.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_misc.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_pthread.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_pthread.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_queue.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_queue.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_sched.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_sched.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_semaphore.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_semaphore.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_signal.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_signal.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_spawn.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_spawn.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_stdio.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_stdio.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_stdlib.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_stdlib.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_string.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_string.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_syslog.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_syslog.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_timer.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_timer.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_libc_unistd.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_libc_unistd.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_mqueue.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_mqueue.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_pthread.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_pthread.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_roundrobin.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_roundrobin.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_sched.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_sched.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_semaphore.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_semaphore.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_signal.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_signal.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_tash_heapinfo.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_tash_heapinfo.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_tash_stackmonitor.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_tash_stackmonitor.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_task.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_task.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_termios.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_termios.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_timer.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_timer.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/kernel/tc_umm_heap.c [moved from RtSample/local/apps/examples/testcase/le_tc/kernel/tc_umm_heap.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/Kconfig [moved from RtSample/local/apps/examples/testcase/le_tc/network/Kconfig with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/Make.defs [moved from RtSample/local/apps/examples/testcase/le_tc/network/Make.defs with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/network_tc_main.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/network_tc_main.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_internal.h [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_internal.h with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_accept.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_accept.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_bind.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_bind.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_close.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_close.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_connect.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_connect.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_dhcpc.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_dhcpc.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_dhcps.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_dhcps.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_ether.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_ether.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_fcntl.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_fcntl.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_getpeername.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_getpeername.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_getsockname.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_getsockname.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_getsockopt.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_getsockopt.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_inet.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_inet.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_ioctl.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_ioctl.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_listen.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_listen.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_netdb.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_netdb.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_recv.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_recv.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_recvfrom.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_recvfrom.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_send.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_send.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_sendto.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_sendto.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_setsockopt.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_setsockopt.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_shutdown.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_shutdown.c with 100% similarity]
resources/samples/local/apps/examples/testcase/le_tc/network/tc_net_socket.c [moved from RtSample/local/apps/examples/testcase/le_tc/network/tc_net_socket.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/arastorage/itc/Kconfig [moved from RtSample/local/apps/examples/testcase/ta_tc/arastorage/itc/Kconfig with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/arastorage/itc/Make.defs [moved from RtSample/local/apps/examples/testcase/ta_tc/arastorage/itc/Make.defs with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/arastorage/itc/itc_arastorage_main.c [moved from RtSample/local/apps/examples/testcase/ta_tc/arastorage/itc/itc_arastorage_main.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/arastorage/utc/Kconfig [moved from RtSample/local/apps/examples/testcase/ta_tc/arastorage/utc/Kconfig with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/arastorage/utc/Make.defs [moved from RtSample/local/apps/examples/testcase/ta_tc/arastorage/utc/Make.defs with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/arastorage/utc/utc_arastorage_main.c [moved from RtSample/local/apps/examples/testcase/ta_tc/arastorage/utc/utc_arastorage_main.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/device_management/itc/Kconfig [moved from RtSample/local/apps/examples/testcase/ta_tc/device_management/itc/Kconfig with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/device_management/itc/Make.defs [moved from RtSample/local/apps/examples/testcase/ta_tc/device_management/itc/Make.defs with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/device_management/itc/itc_dm_conn.c [moved from RtSample/local/apps/examples/testcase/ta_tc/device_management/itc/itc_dm_conn.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/device_management/itc/itc_dm_lwm2m.c [moved from RtSample/local/apps/examples/testcase/ta_tc/device_management/itc/itc_dm_lwm2m.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/device_management/itc/itc_dm_main.c [moved from RtSample/local/apps/examples/testcase/ta_tc/device_management/itc/itc_dm_main.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/device_management/itc/itc_internal.h [moved from RtSample/local/apps/examples/testcase/ta_tc/device_management/itc/itc_internal.h with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/device_management/utc/Kconfig [moved from RtSample/local/apps/examples/testcase/ta_tc/device_management/utc/Kconfig with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/device_management/utc/Make.defs [moved from RtSample/local/apps/examples/testcase/ta_tc/device_management/utc/Make.defs with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/device_management/utc/utc_dm_conn.c [moved from RtSample/local/apps/examples/testcase/ta_tc/device_management/utc/utc_dm_conn.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/device_management/utc/utc_dm_lwm2m.c [moved from RtSample/local/apps/examples/testcase/ta_tc/device_management/utc/utc_dm_lwm2m.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/device_management/utc/utc_dm_main.c [moved from RtSample/local/apps/examples/testcase/ta_tc/device_management/utc/utc_dm_main.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/device_management/utc/utc_internal.h [moved from RtSample/local/apps/examples/testcase/ta_tc/device_management/utc/utc_internal.h with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/itc/Kconfig [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/itc/Kconfig with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/itc/Make.defs [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/itc/Make.defs with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/itc/itc_gpio.c [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/itc/itc_gpio.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/itc/itc_i2c.c [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/itc/itc_i2c.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/itc/itc_internal.h [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/itc/itc_internal.h with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/itc/itc_pwm.c [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/itc/itc_pwm.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/itc/itc_spi.c [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/itc/itc_spi.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/itc/itc_sysio_main.c [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/itc/itc_sysio_main.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/itc/itc_uart.c [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/itc/itc_uart.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/itc/tc_internal.h [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/itc/tc_internal.h with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/utc/Kconfig [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/utc/Kconfig with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/utc/Make.defs [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/utc/Make.defs with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/utc/utc_gpio.c [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/utc/utc_gpio.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/utc/utc_i2c.c [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/utc/utc_i2c.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/utc/utc_internal.h [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/utc/utc_internal.h with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/utc/utc_pwm.c [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/utc/utc_pwm.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/utc/utc_spi.c [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/utc/utc_spi.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/utc/utc_sysio_main.c [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/utc/utc_sysio_main.c with 100% similarity]
resources/samples/local/apps/examples/testcase/ta_tc/systemio/utc/utc_uart.c [moved from RtSample/local/apps/examples/testcase/ta_tc/systemio/utc/utc_uart.c with 100% similarity]
resources/samples/local/apps/examples/testcase/tc_common.h [moved from RtSample/local/apps/examples/testcase/tc_common.h with 100% similarity]
resources/samples/local/apps/examples/testcase/tc_main.c [moved from RtSample/local/apps/examples/testcase/tc_main.c with 100% similarity]
resources/samples/local/apps/examples/tls_client/Kconfig [moved from RtSample/local/apps/examples/tls_client/Kconfig with 100% similarity]
resources/samples/local/apps/examples/tls_client/Kconfig_ENTRY [moved from RtSample/local/apps/examples/tls_client/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/tls_client/Makefile [moved from RtSample/local/apps/examples/tls_client/Makefile with 100% similarity]
resources/samples/local/apps/examples/tls_client/tls_client_main.c [moved from RtSample/local/apps/examples/tls_client/tls_client_main.c with 100% similarity]
resources/samples/local/apps/examples/tls_selftest/Kconfig [moved from RtSample/local/apps/examples/tls_selftest/Kconfig with 100% similarity]
resources/samples/local/apps/examples/tls_selftest/Kconfig_ENTRY [moved from RtSample/local/apps/examples/tls_selftest/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/tls_selftest/Makefile [moved from RtSample/local/apps/examples/tls_selftest/Makefile with 100% similarity]
resources/samples/local/apps/examples/tls_selftest/tls_selftest_main.c [moved from RtSample/local/apps/examples/tls_selftest/tls_selftest_main.c with 100% similarity]
resources/samples/local/apps/examples/tls_server/Kconfig [moved from RtSample/local/apps/examples/tls_server/Kconfig with 100% similarity]
resources/samples/local/apps/examples/tls_server/Kconfig_ENTRY [moved from RtSample/local/apps/examples/tls_server/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/tls_server/Makefile [moved from RtSample/local/apps/examples/tls_server/Makefile with 100% similarity]
resources/samples/local/apps/examples/tls_server/tls_server_main.c [moved from RtSample/local/apps/examples/tls_server/tls_server_main.c with 100% similarity]
resources/samples/local/apps/examples/wakaama_client/Kconfig [moved from RtSample/local/apps/examples/wakaama_client/Kconfig with 100% similarity]
resources/samples/local/apps/examples/wakaama_client/Kconfig_ENTRY [moved from RtSample/local/apps/examples/wakaama_client/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/wakaama_client/Makefile [moved from RtSample/local/apps/examples/wakaama_client/Makefile with 100% similarity]
resources/samples/local/apps/examples/wakaama_client/wakaama_client.c [moved from RtSample/local/apps/examples/wakaama_client/wakaama_client.c with 100% similarity]
resources/samples/local/apps/examples/webclient/Kconfig [moved from RtSample/local/apps/examples/webclient/Kconfig with 100% similarity]
resources/samples/local/apps/examples/webclient/Kconfig_ENTRY [moved from RtSample/local/apps/examples/webclient/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/webclient/Makefile [moved from RtSample/local/apps/examples/webclient/Makefile with 100% similarity]
resources/samples/local/apps/examples/webclient/webclient_main.c [moved from RtSample/local/apps/examples/webclient/webclient_main.c with 100% similarity]
resources/samples/local/apps/examples/webserver/Kconfig [moved from RtSample/local/apps/examples/webserver/Kconfig with 100% similarity]
resources/samples/local/apps/examples/webserver/Kconfig_ENTRY [moved from RtSample/local/apps/examples/webserver/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/webserver/Makefile [moved from RtSample/local/apps/examples/webserver/Makefile with 100% similarity]
resources/samples/local/apps/examples/webserver/tls_client.html [moved from RtSample/local/apps/examples/webserver/tls_client.html with 100% similarity]
resources/samples/local/apps/examples/webserver/webserver_main.c [moved from RtSample/local/apps/examples/webserver/webserver_main.c with 100% similarity]
resources/samples/local/apps/examples/websocket/Kconfig [moved from RtSample/local/apps/examples/websocket/Kconfig with 100% similarity]
resources/samples/local/apps/examples/websocket/Kconfig_ENTRY [moved from RtSample/local/apps/examples/websocket/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/websocket/Makefile [moved from RtSample/local/apps/examples/websocket/Makefile with 100% similarity]
resources/samples/local/apps/examples/websocket/websocket_main.c [moved from RtSample/local/apps/examples/websocket/websocket_main.c with 100% similarity]
resources/samples/local/apps/examples/workqueue/.gitignore [moved from RtSample/local/apps/examples/helloxx/.gitignore with 100% similarity]
resources/samples/local/apps/examples/workqueue/Kconfig [moved from RtSample/local/apps/examples/workqueue/Kconfig with 100% similarity]
resources/samples/local/apps/examples/workqueue/Kconfig_ENTRY [moved from RtSample/local/apps/examples/workqueue/Kconfig_ENTRY with 100% similarity]
resources/samples/local/apps/examples/workqueue/Makefile [moved from RtSample/local/apps/examples/workqueue/Makefile with 100% similarity]
resources/samples/local/apps/examples/workqueue/workqueue_main.c [moved from RtSample/local/apps/examples/workqueue/workqueue_main.c with 100% similarity]
resources/samples/local/apps/import/.gitignore [moved from RtSample/local/apps/import/.gitignore with 100% similarity]
resources/samples/local/apps/import/Make.defs [moved from RtSample/local/apps/import/Make.defs with 100% similarity]
resources/samples/local/apps/import/Makefile [moved from RtSample/local/apps/import/Makefile with 100% similarity]
resources/samples/local/apps/import/scripts/gnu-elf.ld [moved from RtSample/local/apps/import/scripts/gnu-elf.ld with 100% similarity]
resources/samples/local/apps/include/.gitignore [moved from RtSample/local/apps/include/.gitignore with 100% similarity]
resources/samples/local/apps/include/cle.h [moved from RtSample/local/apps/include/cle.h with 100% similarity]
resources/samples/local/apps/include/ftpc.h [moved from RtSample/local/apps/include/ftpc.h with 100% similarity]
resources/samples/local/apps/include/hex2bin.h [moved from RtSample/local/apps/include/hex2bin.h with 100% similarity]
resources/samples/local/apps/include/inifile.h [moved from RtSample/local/apps/include/inifile.h with 100% similarity]
resources/samples/local/apps/include/netutils/base64.h [moved from RtSample/local/apps/include/netutils/base64.h with 100% similarity]
resources/samples/local/apps/include/netutils/cJSON.h [moved from RtSample/local/apps/include/netutils/cJSON.h with 100% similarity]
resources/samples/local/apps/include/netutils/commandline.h [moved from RtSample/local/apps/include/netutils/commandline.h with 100% similarity]
resources/samples/local/apps/include/netutils/connection.h [moved from RtSample/local/apps/include/netutils/connection.h with 100% similarity]
resources/samples/local/apps/include/netutils/dhcpc.h [moved from RtSample/local/apps/include/netutils/dhcpc.h with 100% similarity]
resources/samples/local/apps/include/netutils/dhcpd.h [moved from RtSample/local/apps/include/netutils/dhcpd.h with 100% similarity]
resources/samples/local/apps/include/netutils/discover.h [moved from RtSample/local/apps/include/netutils/discover.h with 100% similarity]
resources/samples/local/apps/include/netutils/ftpd.h [moved from RtSample/local/apps/include/netutils/ftpd.h with 100% similarity]
resources/samples/local/apps/include/netutils/httpd.h [moved from RtSample/local/apps/include/netutils/httpd.h with 100% similarity]
resources/samples/local/apps/include/netutils/ipmsfilter.h [moved from RtSample/local/apps/include/netutils/ipmsfilter.h with 100% similarity]
resources/samples/local/apps/include/netutils/liblwm2m.h [moved from RtSample/local/apps/include/netutils/liblwm2m.h with 100% similarity]
resources/samples/local/apps/include/netutils/md5.h [moved from RtSample/local/apps/include/netutils/md5.h with 100% similarity]
resources/samples/local/apps/include/netutils/mdnsd.h [moved from RtSample/local/apps/include/netutils/mdnsd.h with 100% similarity]
resources/samples/local/apps/include/netutils/netlib.h [moved from RtSample/local/apps/include/netutils/netlib.h with 100% similarity]
resources/samples/local/apps/include/netutils/ntpclient.h [moved from RtSample/local/apps/include/netutils/ntpclient.h with 100% similarity]
resources/samples/local/apps/include/netutils/smtp.h [moved from RtSample/local/apps/include/netutils/smtp.h with 100% similarity]
resources/samples/local/apps/include/netutils/telnetd.h [moved from RtSample/local/apps/include/netutils/telnetd.h with 100% similarity]
resources/samples/local/apps/include/netutils/tftp.h [moved from RtSample/local/apps/include/netutils/tftp.h with 100% similarity]
resources/samples/local/apps/include/netutils/thttpd.h [moved from RtSample/local/apps/include/netutils/thttpd.h with 100% similarity]
resources/samples/local/apps/include/netutils/urldecode.h [moved from RtSample/local/apps/include/netutils/urldecode.h with 100% similarity]
resources/samples/local/apps/include/netutils/webclient.h [moved from RtSample/local/apps/include/netutils/webclient.h with 100% similarity]
resources/samples/local/apps/include/netutils/webserver/http_err.h [moved from RtSample/local/apps/include/netutils/webserver/http_err.h with 100% similarity]
resources/samples/local/apps/include/netutils/webserver/http_keyvalue_list.h [moved from RtSample/local/apps/include/netutils/webserver/http_keyvalue_list.h with 100% similarity]
resources/samples/local/apps/include/netutils/webserver/http_server.h [moved from RtSample/local/apps/include/netutils/webserver/http_server.h with 100% similarity]
resources/samples/local/apps/include/netutils/websocket.h [moved from RtSample/local/apps/include/netutils/websocket.h with 100% similarity]
resources/samples/local/apps/include/netutils/wslay/wslay.h [moved from RtSample/local/apps/include/netutils/wslay/wslay.h with 100% similarity]
resources/samples/local/apps/include/netutils/xmlrpc.h [moved from RtSample/local/apps/include/netutils/xmlrpc.h with 100% similarity]
resources/samples/local/apps/include/platform/configdata.h [moved from RtSample/local/apps/include/platform/configdata.h with 100% similarity]
resources/samples/local/apps/include/prun.h [moved from RtSample/local/apps/include/prun.h with 100% similarity]
resources/samples/local/apps/include/readline.h [moved from RtSample/local/apps/include/readline.h with 100% similarity]
resources/samples/local/apps/include/shell/tash.h [moved from RtSample/local/apps/include/shell/tash.h with 100% similarity]
resources/samples/local/apps/include/system/fota_hal.h [moved from RtSample/local/apps/include/system/fota_hal.h with 100% similarity]
resources/samples/local/apps/include/system/sysinfo.h [moved from RtSample/local/apps/include/system/sysinfo.h with 100% similarity]
resources/samples/local/apps/include/system/utils.h [moved from RtSample/local/apps/include/system/utils.h with 100% similarity]
resources/samples/local/apps/include/usbmonitor.h [moved from RtSample/local/apps/include/usbmonitor.h with 100% similarity]
resources/samples/local/apps/netutils/.gitignore [moved from RtSample/local/apps/netutils/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/Kconfig [moved from RtSample/local/apps/netutils/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/Make.defs [moved from RtSample/local/apps/netutils/Make.defs with 100% similarity]
resources/samples/local/apps/netutils/Makefile [moved from RtSample/local/apps/netutils/Makefile with 100% similarity]
resources/samples/local/apps/netutils/README.txt [moved from RtSample/local/apps/netutils/README.txt with 100% similarity]
resources/samples/local/apps/netutils/codecs/.gitignore [moved from RtSample/local/apps/netutils/codecs/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/codecs/Kconfig [moved from RtSample/local/apps/netutils/codecs/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/codecs/Makefile [moved from RtSample/local/apps/netutils/codecs/Makefile with 100% similarity]
resources/samples/local/apps/netutils/codecs/base64.c [moved from RtSample/local/apps/netutils/codecs/base64.c with 100% similarity]
resources/samples/local/apps/netutils/codecs/md5.c [moved from RtSample/local/apps/netutils/codecs/md5.c with 100% similarity]
resources/samples/local/apps/netutils/codecs/urldecode.c [moved from RtSample/local/apps/netutils/codecs/urldecode.c with 100% similarity]
resources/samples/local/apps/netutils/dhcpc/.gitignore [moved from RtSample/local/apps/netutils/xmlrpc/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/dhcpc/Kconfig [moved from RtSample/local/apps/netutils/dhcpc/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/dhcpc/Makefile [moved from RtSample/local/apps/netutils/dhcpc/Makefile with 100% similarity]
resources/samples/local/apps/netutils/dhcpc/dhcpc.c [moved from RtSample/local/apps/netutils/dhcpc/dhcpc.c with 100% similarity]
resources/samples/local/apps/netutils/dhcpd/.gitignore [moved from RtSample/local/apps/netutils/webclient/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/dhcpd/Kconfig [moved from RtSample/local/apps/netutils/dhcpd/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/dhcpd/Makefile [moved from RtSample/local/apps/netutils/dhcpd/Makefile with 100% similarity]
resources/samples/local/apps/netutils/dhcpd/dhcpd.c [moved from RtSample/local/apps/netutils/dhcpd/dhcpd.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/.gitignore [moved from RtSample/local/apps/netutils/tftpc/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/ftpc/Kconfig [moved from RtSample/local/apps/netutils/ftpc/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/ftpc/Makefile [moved from RtSample/local/apps/netutils/ftpc/Makefile with 100% similarity]
resources/samples/local/apps/netutils/ftpc/README.txt [moved from RtSample/local/apps/netutils/ftpc/README.txt with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_cdup.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_cdup.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_chdir.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_chdir.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_chmod.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_chmod.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_cmd.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_cmd.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_config.h [moved from RtSample/local/apps/netutils/ftpc/ftpc_config.h with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_connect.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_connect.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_disconnect.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_disconnect.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_filesize.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_filesize.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_filetime.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_filetime.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_getfile.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_getfile.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_getreply.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_getreply.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_help.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_help.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_idle.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_idle.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_internal.h [moved from RtSample/local/apps/netutils/ftpc/ftpc_internal.h with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_listdir.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_listdir.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_login.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_login.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_mkdir.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_mkdir.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_noop.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_noop.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_putfile.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_putfile.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_quit.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_quit.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_rename.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_rename.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_response.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_response.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_rmdir.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_rmdir.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_rpwd.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_rpwd.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_socket.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_socket.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_transfer.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_transfer.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_unlink.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_unlink.c with 100% similarity]
resources/samples/local/apps/netutils/ftpc/ftpc_utils.c [moved from RtSample/local/apps/netutils/ftpc/ftpc_utils.c with 100% similarity]
resources/samples/local/apps/netutils/ftpd/.gitignore [moved from RtSample/local/apps/netutils/telnetd/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/ftpd/Kconfig [moved from RtSample/local/apps/netutils/ftpd/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/ftpd/Makefile [moved from RtSample/local/apps/netutils/ftpd/Makefile with 100% similarity]
resources/samples/local/apps/netutils/ftpd/ftpd.c [moved from RtSample/local/apps/netutils/ftpd/ftpd.c with 100% similarity]
resources/samples/local/apps/netutils/ftpd/ftpd.h [moved from RtSample/local/apps/netutils/ftpd/ftpd.h with 100% similarity]
resources/samples/local/apps/netutils/json/.gitignore [moved from RtSample/local/apps/netutils/json/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/json/Kconfig [moved from RtSample/local/apps/netutils/json/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/json/Makefile [moved from RtSample/local/apps/netutils/json/Makefile with 100% similarity]
resources/samples/local/apps/netutils/json/README [moved from RtSample/local/apps/netutils/json/README with 100% similarity]
resources/samples/local/apps/netutils/json/cJSON.c [moved from RtSample/local/apps/netutils/json/cJSON.c with 100% similarity]
resources/samples/local/apps/netutils/mdns/Kconfig [moved from RtSample/local/apps/netutils/mdns/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/mdns/Makefile [moved from RtSample/local/apps/netutils/mdns/Makefile with 100% similarity]
resources/samples/local/apps/netutils/mdns/mdns.c [moved from RtSample/local/apps/netutils/mdns/mdns.c with 100% similarity]
resources/samples/local/apps/netutils/mdns/mdns.h [moved from RtSample/local/apps/netutils/mdns/mdns.h with 100% similarity]
resources/samples/local/apps/netutils/mdns/mdnsd.c [moved from RtSample/local/apps/netutils/mdns/mdnsd.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/.gitignore [moved from RtSample/local/apps/netutils/smtp/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/netlib/Kconfig [moved from RtSample/local/apps/netutils/netlib/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/netlib/Makefile [moved from RtSample/local/apps/netutils/netlib/Makefile with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib.c [moved from RtSample/local/apps/netutils/netlib/netlib.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_autoconfig.c [moved from RtSample/local/apps/netutils/netlib/netlib_autoconfig.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_getdripv4addr.c [moved from RtSample/local/apps/netutils/netlib/netlib_getdripv4addr.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_getdripv6addr.c [moved from RtSample/local/apps/netutils/netlib/netlib_getdripv6addr.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_getifstatus.c [moved from RtSample/local/apps/netutils/netlib/netlib_getifstatus.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_getipv4addr.c [moved from RtSample/local/apps/netutils/netlib/netlib_getipv4addr.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_getipv6addr.c [moved from RtSample/local/apps/netutils/netlib/netlib_getipv6addr.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_getmacaddr.c [moved from RtSample/local/apps/netutils/netlib/netlib_getmacaddr.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_ipmsfilter.c [moved from RtSample/local/apps/netutils/netlib/netlib_ipmsfilter.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_ipv6netmask2prefix.c [moved from RtSample/local/apps/netutils/netlib/netlib_ipv6netmask2prefix.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_listenon.c [moved from RtSample/local/apps/netutils/netlib/netlib_listenon.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_parsehttpurl.c [moved from RtSample/local/apps/netutils/netlib/netlib_parsehttpurl.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_prefix2ipv6netmask.c [moved from RtSample/local/apps/netutils/netlib/netlib_prefix2ipv6netmask.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_server.c [moved from RtSample/local/apps/netutils/netlib/netlib_server.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_setdripv4addr.c [moved from RtSample/local/apps/netutils/netlib/netlib_setdripv4addr.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_setdripv6addr.c [moved from RtSample/local/apps/netutils/netlib/netlib_setdripv6addr.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_setifstatus.c [moved from RtSample/local/apps/netutils/netlib/netlib_setifstatus.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_setipv4addr.c [moved from RtSample/local/apps/netutils/netlib/netlib_setipv4addr.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_setipv4netmask.c [moved from RtSample/local/apps/netutils/netlib/netlib_setipv4netmask.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_setipv6addr.c [moved from RtSample/local/apps/netutils/netlib/netlib_setipv6addr.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_setipv6netmask.c [moved from RtSample/local/apps/netutils/netlib/netlib_setipv6netmask.c with 100% similarity]
resources/samples/local/apps/netutils/netlib/netlib_setmacaddr.c [moved from RtSample/local/apps/netutils/netlib/netlib_setmacaddr.c with 100% similarity]
resources/samples/local/apps/netutils/ntpclient/.gitignore [moved from RtSample/local/apps/netutils/ntpclient/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/ntpclient/Kconfig [moved from RtSample/local/apps/netutils/ntpclient/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/ntpclient/Makefile [moved from RtSample/local/apps/netutils/ntpclient/Makefile with 100% similarity]
resources/samples/local/apps/netutils/ntpclient/ntpclient.c [moved from RtSample/local/apps/netutils/ntpclient/ntpclient.c with 100% similarity]
resources/samples/local/apps/netutils/ntpclient/ntpv3.h [moved from RtSample/local/apps/netutils/ntpclient/ntpv3.h with 100% similarity]
resources/samples/local/apps/netutils/smtp/.gitignore [moved from RtSample/local/apps/netutils/netlib/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/smtp/Kconfig [moved from RtSample/local/apps/netutils/smtp/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/smtp/Makefile [moved from RtSample/local/apps/netutils/smtp/Makefile with 100% similarity]
resources/samples/local/apps/netutils/smtp/smtp.c [moved from RtSample/local/apps/netutils/smtp/smtp.c with 100% similarity]
resources/samples/local/apps/netutils/telnetd/.gitignore [moved from RtSample/local/apps/netutils/ftpd/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/telnetd/Kconfig [moved from RtSample/local/apps/netutils/telnetd/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/telnetd/Makefile [moved from RtSample/local/apps/netutils/telnetd/Makefile with 100% similarity]
resources/samples/local/apps/netutils/telnetd/README.txt [moved from RtSample/local/apps/netutils/telnetd/README.txt with 100% similarity]
resources/samples/local/apps/netutils/telnetd/telnetd_daemon.c [moved from RtSample/local/apps/netutils/telnetd/telnetd_daemon.c with 100% similarity]
resources/samples/local/apps/netutils/tftpc/.gitignore [moved from RtSample/local/apps/netutils/ftpc/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/tftpc/Kconfig [moved from RtSample/local/apps/netutils/tftpc/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/tftpc/Makefile [moved from RtSample/local/apps/netutils/tftpc/Makefile with 100% similarity]
resources/samples/local/apps/netutils/tftpc/tftpc_get.c [moved from RtSample/local/apps/netutils/tftpc/tftpc_get.c with 100% similarity]
resources/samples/local/apps/netutils/tftpc/tftpc_internal.h [moved from RtSample/local/apps/netutils/tftpc/tftpc_internal.h with 100% similarity]
resources/samples/local/apps/netutils/tftpc/tftpc_packets.c [moved from RtSample/local/apps/netutils/tftpc/tftpc_packets.c with 100% similarity]
resources/samples/local/apps/netutils/tftpc/tftpc_put.c [moved from RtSample/local/apps/netutils/tftpc/tftpc_put.c with 100% similarity]
resources/samples/local/apps/netutils/webclient/.gitignore [moved from RtSample/local/apps/netutils/dhcpd/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/webclient/Kconfig [moved from RtSample/local/apps/netutils/webclient/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/webclient/Makefile [moved from RtSample/local/apps/netutils/webclient/Makefile with 100% similarity]
resources/samples/local/apps/netutils/webclient/webclient.c [moved from RtSample/local/apps/netutils/webclient/webclient.c with 100% similarity]
resources/samples/local/apps/netutils/webserver/Kconfig [moved from RtSample/local/apps/netutils/webserver/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/webserver/Makefile [moved from RtSample/local/apps/netutils/webserver/Makefile with 100% similarity]
resources/samples/local/apps/netutils/webserver/http.c [moved from RtSample/local/apps/netutils/webserver/http.c with 100% similarity]
resources/samples/local/apps/netutils/webserver/http.h [moved from RtSample/local/apps/netutils/webserver/http.h with 100% similarity]
resources/samples/local/apps/netutils/webserver/http_arch.h [moved from RtSample/local/apps/netutils/webserver/http_arch.h with 100% similarity]
resources/samples/local/apps/netutils/webserver/http_client.c [moved from RtSample/local/apps/netutils/webserver/http_client.c with 100% similarity]
resources/samples/local/apps/netutils/webserver/http_client.h [moved from RtSample/local/apps/netutils/webserver/http_client.h with 100% similarity]
resources/samples/local/apps/netutils/webserver/http_client_tls.c [moved from RtSample/local/apps/netutils/webserver/http_client_tls.c with 100% similarity]
resources/samples/local/apps/netutils/webserver/http_keyvalue_list.c [moved from RtSample/local/apps/netutils/webserver/http_keyvalue_list.c with 100% similarity]
resources/samples/local/apps/netutils/webserver/http_log.h [moved from RtSample/local/apps/netutils/webserver/http_log.h with 100% similarity]
resources/samples/local/apps/netutils/webserver/http_query.c [moved from RtSample/local/apps/netutils/webserver/http_query.c with 100% similarity]
resources/samples/local/apps/netutils/webserver/http_query.h [moved from RtSample/local/apps/netutils/webserver/http_query.h with 100% similarity]
resources/samples/local/apps/netutils/webserver/http_server.c [moved from RtSample/local/apps/netutils/webserver/http_server.c with 100% similarity]
resources/samples/local/apps/netutils/webserver/http_server_tls.c [moved from RtSample/local/apps/netutils/webserver/http_server_tls.c with 100% similarity]
resources/samples/local/apps/netutils/webserver/http_string_util.c [moved from RtSample/local/apps/netutils/webserver/http_string_util.c with 100% similarity]
resources/samples/local/apps/netutils/webserver/http_string_util.h [moved from RtSample/local/apps/netutils/webserver/http_string_util.h with 100% similarity]
resources/samples/local/apps/netutils/websocket/Kconfig [moved from RtSample/local/apps/netutils/websocket/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/websocket/Makefile [moved from RtSample/local/apps/netutils/websocket/Makefile with 100% similarity]
resources/samples/local/apps/netutils/websocket/websocket.c [moved from RtSample/local/apps/netutils/websocket/websocket.c with 100% similarity]
resources/samples/local/apps/netutils/websocket/wslay/wslay_event.c [moved from RtSample/local/apps/netutils/websocket/wslay/wslay_event.c with 100% similarity]
resources/samples/local/apps/netutils/websocket/wslay/wslay_event.h [moved from RtSample/local/apps/netutils/websocket/wslay/wslay_event.h with 100% similarity]
resources/samples/local/apps/netutils/websocket/wslay/wslay_frame.c [moved from RtSample/local/apps/netutils/websocket/wslay/wslay_frame.c with 100% similarity]
resources/samples/local/apps/netutils/websocket/wslay/wslay_frame.h [moved from RtSample/local/apps/netutils/websocket/wslay/wslay_frame.h with 100% similarity]
resources/samples/local/apps/netutils/websocket/wslay/wslay_net.c [moved from RtSample/local/apps/netutils/websocket/wslay/wslay_net.c with 100% similarity]
resources/samples/local/apps/netutils/websocket/wslay/wslay_net.h [moved from RtSample/local/apps/netutils/websocket/wslay/wslay_net.h with 100% similarity]
resources/samples/local/apps/netutils/websocket/wslay/wslay_queue.c [moved from RtSample/local/apps/netutils/websocket/wslay/wslay_queue.c with 100% similarity]
resources/samples/local/apps/netutils/websocket/wslay/wslay_queue.h [moved from RtSample/local/apps/netutils/websocket/wslay/wslay_queue.h with 100% similarity]
resources/samples/local/apps/netutils/websocket/wslay/wslay_stack.c [moved from RtSample/local/apps/netutils/websocket/wslay/wslay_stack.c with 100% similarity]
resources/samples/local/apps/netutils/websocket/wslay/wslay_stack.h [moved from RtSample/local/apps/netutils/websocket/wslay/wslay_stack.h with 100% similarity]
resources/samples/local/apps/netutils/xmlrpc/.gitignore [moved from RtSample/local/apps/netutils/dhcpc/.gitignore with 100% similarity]
resources/samples/local/apps/netutils/xmlrpc/Kconfig [moved from RtSample/local/apps/netutils/xmlrpc/Kconfig with 100% similarity]
resources/samples/local/apps/netutils/xmlrpc/Makefile [moved from RtSample/local/apps/netutils/xmlrpc/Makefile with 100% similarity]
resources/samples/local/apps/netutils/xmlrpc/response.c [moved from RtSample/local/apps/netutils/xmlrpc/response.c with 100% similarity]
resources/samples/local/apps/netutils/xmlrpc/xmlparser.c [moved from RtSample/local/apps/netutils/xmlrpc/xmlparser.c with 100% similarity]
resources/samples/local/apps/platform/.gitignore [moved from RtSample/local/apps/platform/.gitignore with 100% similarity]
resources/samples/local/apps/platform/Kconfig [moved from RtSample/local/apps/platform/Kconfig with 100% similarity]
resources/samples/local/apps/platform/Make.defs [moved from RtSample/local/apps/platform/Make.defs with 100% similarity]
resources/samples/local/apps/platform/Makefile [moved from RtSample/local/apps/platform/Makefile with 100% similarity]
resources/samples/local/apps/platform/bin/.gitignore [moved from RtSample/local/apps/platform/bin/.gitignore with 100% similarity]
resources/samples/local/apps/platform/bin/Makefile [moved from RtSample/local/lib/libc/bin/Makefile with 100% similarity]
resources/samples/local/apps/platform/dummy/Kconfig [moved from RtSample/local/os/drivers/sercomm/Kconfig with 100% similarity]
resources/samples/local/apps/platform/dummy/Make.defs [moved from RtSample/local/apps/platform/dummy/Make.defs with 100% similarity]
resources/samples/local/apps/shell/Kconfig [moved from RtSample/local/apps/shell/Kconfig with 100% similarity]
resources/samples/local/apps/shell/Make.defs [moved from RtSample/local/apps/shell/Make.defs with 100% similarity]
resources/samples/local/apps/shell/Makefile [moved from RtSample/local/apps/shell/Makefile with 100% similarity]
resources/samples/local/apps/shell/tash_command.c [moved from RtSample/local/apps/shell/tash_command.c with 100% similarity]
resources/samples/local/apps/shell/tash_init.c [moved from RtSample/local/apps/shell/tash_init.c with 100% similarity]
resources/samples/local/apps/shell/tash_internal.h [moved from RtSample/local/apps/shell/tash_internal.h with 100% similarity]
resources/samples/local/apps/shell/tash_main.c [moved from RtSample/local/apps/shell/tash_main.c with 100% similarity]
resources/samples/local/apps/shell/tash_script.c [moved from RtSample/local/apps/shell/tash_script.c with 100% similarity]
resources/samples/local/apps/shell/tash_sleep.c [moved from RtSample/local/apps/shell/tash_sleep.c with 100% similarity]
resources/samples/local/apps/system/Kconfig [moved from RtSample/local/apps/system/Kconfig with 100% similarity]
resources/samples/local/apps/system/Make.defs [moved from RtSample/local/apps/system/Make.defs with 100% similarity]
resources/samples/local/apps/system/Makefile [moved from RtSample/local/apps/system/Makefile with 100% similarity]
resources/samples/local/apps/system/cle/.gitignore [moved from RtSample/local/apps/system/vi/.gitignore with 100% similarity]
resources/samples/local/apps/system/cle/Kconfig [moved from RtSample/local/apps/system/cle/Kconfig with 100% similarity]
resources/samples/local/apps/system/cle/Makefile [moved from RtSample/local/apps/system/cle/Makefile with 100% similarity]
resources/samples/local/apps/system/cle/cle.c [moved from RtSample/local/apps/system/cle/cle.c with 100% similarity]
resources/samples/local/apps/system/cu/.gitignore [moved from RtSample/local/apps/examples/hello_tash/.gitignore with 100% similarity]
resources/samples/local/apps/system/cu/Kconfig [moved from RtSample/local/apps/system/cu/Kconfig with 100% similarity]
resources/samples/local/apps/system/cu/Makefile [moved from RtSample/local/apps/system/cu/Makefile with 100% similarity]
resources/samples/local/apps/system/cu/cu.h [moved from RtSample/local/apps/system/cu/cu.h with 100% similarity]
resources/samples/local/apps/system/cu/cu_main.c [moved from RtSample/local/apps/system/cu/cu_main.c with 100% similarity]
resources/samples/local/apps/system/flash_eraseall/.gitignore [moved from RtSample/local/apps/system/sysinfo/.gitignore with 100% similarity]
resources/samples/local/apps/system/flash_eraseall/Kconfig [moved from RtSample/local/apps/system/flash_eraseall/Kconfig with 100% similarity]
resources/samples/local/apps/system/flash_eraseall/Makefile [moved from RtSample/local/apps/system/flash_eraseall/Makefile with 100% similarity]
resources/samples/local/apps/system/flash_eraseall/README.txt [moved from RtSample/local/apps/system/flash_eraseall/README.txt with 100% similarity]
resources/samples/local/apps/system/flash_eraseall/flash_eraseall.c [moved from RtSample/local/apps/system/flash_eraseall/flash_eraseall.c with 100% similarity]
resources/samples/local/apps/system/fota_hal/Kconfig [moved from RtSample/local/apps/system/fota_hal/Kconfig with 100% similarity]
resources/samples/local/apps/system/fota_hal/Makefile [moved from RtSample/local/apps/system/fota_hal/Makefile with 100% similarity]
resources/samples/local/apps/system/fota_hal/fota_hal.c [moved from RtSample/local/apps/system/fota_hal/fota_hal.c with 100% similarity]
resources/samples/local/apps/system/i2c/.gitignore [moved from RtSample/local/apps/system/readline/.gitignore with 100% similarity]
resources/samples/local/apps/system/i2c/Kconfig [moved from RtSample/local/apps/system/i2c/Kconfig with 100% similarity]
resources/samples/local/apps/system/i2c/Makefile [moved from RtSample/local/apps/system/i2c/Makefile with 100% similarity]
resources/samples/local/apps/system/i2c/README.txt [moved from RtSample/local/apps/system/i2c/README.txt with 100% similarity]
resources/samples/local/apps/system/i2c/i2c_bus.c [moved from RtSample/local/apps/system/i2c/i2c_bus.c with 100% similarity]
resources/samples/local/apps/system/i2c/i2c_common.c [moved from RtSample/local/apps/system/i2c/i2c_common.c with 100% similarity]
resources/samples/local/apps/system/i2c/i2c_dev.c [moved from RtSample/local/apps/system/i2c/i2c_dev.c with 100% similarity]
resources/samples/local/apps/system/i2c/i2c_get.c [moved from RtSample/local/apps/system/i2c/i2c_get.c with 100% similarity]
resources/samples/local/apps/system/i2c/i2c_main.c [moved from RtSample/local/apps/system/i2c/i2c_main.c with 100% similarity]
resources/samples/local/apps/system/i2c/i2c_set.c [moved from RtSample/local/apps/system/i2c/i2c_set.c with 100% similarity]
resources/samples/local/apps/system/i2c/i2c_verf.c [moved from RtSample/local/apps/system/i2c/i2c_verf.c with 100% similarity]
resources/samples/local/apps/system/i2c/i2ctool.h [moved from RtSample/local/apps/system/i2c/i2ctool.h with 100% similarity]
resources/samples/local/apps/system/inifile/.gitignore [moved from RtSample/local/apps/system/ramtron/.gitignore with 100% similarity]
resources/samples/local/apps/system/inifile/Kconfig [moved from RtSample/local/apps/system/inifile/Kconfig with 100% similarity]
resources/samples/local/apps/system/inifile/Makefile [moved from RtSample/local/apps/system/inifile/Makefile with 100% similarity]
resources/samples/local/apps/system/inifile/README.txt [moved from RtSample/local/apps/system/inifile/README.txt with 100% similarity]
resources/samples/local/apps/system/inifile/inifile.c [moved from RtSample/local/apps/system/inifile/inifile.c with 100% similarity]
resources/samples/local/apps/system/init/.gitignore [moved from RtSample/local/apps/system/ramtest/.gitignore with 100% similarity]
resources/samples/local/apps/system/init/Makefile [moved from RtSample/local/apps/system/init/Makefile with 100% similarity]
resources/samples/local/apps/system/init/init.c [moved from RtSample/local/apps/system/init/init.c with 100% similarity]
resources/samples/local/apps/system/install/.gitignore [moved from RtSample/local/apps/system/poweroff/.gitignore with 100% similarity]
resources/samples/local/apps/system/install/Kconfig [moved from RtSample/local/apps/system/install/Kconfig with 100% similarity]
resources/samples/local/apps/system/install/Makefile [moved from RtSample/local/apps/system/install/Makefile with 100% similarity]
resources/samples/local/apps/system/install/README.txt [moved from RtSample/local/apps/system/install/README.txt with 100% similarity]
resources/samples/local/apps/system/install/install.c [moved from RtSample/local/apps/system/install/install.c with 100% similarity]
resources/samples/local/apps/system/mdio/.gitignore [moved from RtSample/local/apps/examples/hello/.gitignore with 100% similarity]
resources/samples/local/apps/system/mdio/Kconfig [moved from RtSample/local/apps/system/mdio/Kconfig with 100% similarity]
resources/samples/local/apps/system/mdio/Makefile [moved from RtSample/local/apps/system/mdio/Makefile with 100% similarity]
resources/samples/local/apps/system/mdio/mdio_main.c [moved from RtSample/local/apps/system/mdio/mdio_main.c with 100% similarity]
resources/samples/local/apps/system/netdb/Kconfig [moved from RtSample/local/apps/system/netdb/Kconfig with 100% similarity]
resources/samples/local/apps/system/netdb/Makefile [moved from RtSample/local/apps/system/netdb/Makefile with 100% similarity]
resources/samples/local/apps/system/netdb/netdb_main.c [moved from RtSample/local/apps/system/netdb/netdb_main.c with 100% similarity]
resources/samples/local/apps/system/poweroff/.gitignore [moved from RtSample/local/apps/system/install/.gitignore with 100% similarity]
resources/samples/local/apps/system/poweroff/Kconfig [moved from RtSample/local/apps/system/poweroff/Kconfig with 100% similarity]
resources/samples/local/apps/system/poweroff/Makefile [moved from RtSample/local/apps/system/poweroff/Makefile with 100% similarity]
resources/samples/local/apps/system/poweroff/poweroff.c [moved from RtSample/local/apps/system/poweroff/poweroff.c with 100% similarity]
resources/samples/local/apps/system/prun/.gitignore [moved from RtSample/local/apps/system/prun/.gitignore with 100% similarity]
resources/samples/local/apps/system/prun/Kconfig [moved from RtSample/local/apps/system/prun/Kconfig with 100% similarity]
resources/samples/local/apps/system/prun/Makefile [moved from RtSample/local/apps/system/prun/Makefile with 100% similarity]
resources/samples/local/apps/system/prun/README.txt [moved from RtSample/local/apps/system/prun/README.txt with 100% similarity]
resources/samples/local/apps/system/prun/pexec_main.c [moved from RtSample/local/apps/system/prun/pexec_main.c with 100% similarity]
resources/samples/local/apps/system/prun/prun.c [moved from RtSample/local/apps/system/prun/prun.c with 100% similarity]
resources/samples/local/apps/system/prun/prun.h [moved from RtSample/local/apps/system/prun/prun.h with 100% similarity]
resources/samples/local/apps/system/ramtest/.gitignore [moved from RtSample/local/apps/system/init/.gitignore with 100% similarity]
resources/samples/local/apps/system/ramtest/Kconfig [moved from RtSample/local/apps/system/ramtest/Kconfig with 100% similarity]
resources/samples/local/apps/system/ramtest/Makefile [moved from RtSample/local/apps/system/ramtest/Makefile with 100% similarity]
resources/samples/local/apps/system/ramtest/ramtest.c [moved from RtSample/local/apps/system/ramtest/ramtest.c with 100% similarity]
resources/samples/local/apps/system/ramtron/.gitignore [moved from RtSample/local/apps/system/inifile/.gitignore with 100% similarity]
resources/samples/local/apps/system/ramtron/Kconfig [moved from RtSample/local/apps/system/ramtron/Kconfig with 100% similarity]
resources/samples/local/apps/system/ramtron/Makefile [moved from RtSample/local/apps/system/ramtron/Makefile with 100% similarity]
resources/samples/local/apps/system/ramtron/ramtron.c [moved from RtSample/local/apps/system/ramtron/ramtron.c with 100% similarity]
resources/samples/local/apps/system/readline/.gitignore [moved from RtSample/local/apps/system/i2c/.gitignore with 100% similarity]
resources/samples/local/apps/system/readline/Kconfig [moved from RtSample/local/apps/system/readline/Kconfig with 100% similarity]
resources/samples/local/apps/system/readline/Makefile [moved from RtSample/local/apps/system/readline/Makefile with 100% similarity]
resources/samples/local/apps/system/readline/readline.c [moved from RtSample/local/apps/system/readline/readline.c with 100% similarity]
resources/samples/local/apps/system/readline/readline.h [moved from RtSample/local/apps/system/readline/readline.h with 100% similarity]
resources/samples/local/apps/system/readline/readline_common.c [moved from RtSample/local/apps/system/readline/readline_common.c with 100% similarity]
resources/samples/local/apps/system/readline/std_readline.c [moved from RtSample/local/apps/system/readline/std_readline.c with 100% similarity]
resources/samples/local/apps/system/sysinfo/.gitignore [moved from RtSample/local/apps/system/flash_eraseall/.gitignore with 100% similarity]
resources/samples/local/apps/system/sysinfo/Kconfig [moved from RtSample/local/apps/system/sysinfo/Kconfig with 100% similarity]
resources/samples/local/apps/system/sysinfo/Makefile [moved from RtSample/local/apps/system/sysinfo/Makefile with 100% similarity]
resources/samples/local/apps/system/sysinfo/sysinfo.c [moved from RtSample/local/apps/system/sysinfo/sysinfo.c with 100% similarity]
resources/samples/local/apps/system/utils/Kconfig [moved from RtSample/local/apps/system/utils/Kconfig with 100% similarity]
resources/samples/local/apps/system/utils/Makefile [moved from RtSample/local/apps/system/utils/Makefile with 100% similarity]
resources/samples/local/apps/system/utils/fs_getpath.c [moved from RtSample/local/apps/system/utils/fs_getpath.c with 100% similarity]
resources/samples/local/apps/system/utils/fscmd.c [moved from RtSample/local/apps/system/utils/fscmd.c with 100% similarity]
resources/samples/local/apps/system/utils/kdbg_commands.h [moved from RtSample/local/apps/system/utils/kdbg_commands.h with 100% similarity]
resources/samples/local/apps/system/utils/kdbg_date.c [moved from RtSample/local/apps/system/utils/kdbg_date.c with 100% similarity]
resources/samples/local/apps/system/utils/kdbg_dmesg.c [moved from RtSample/local/apps/system/utils/kdbg_dmesg.c with 100% similarity]
resources/samples/local/apps/system/utils/kdbg_env.c [moved from RtSample/local/apps/system/utils/kdbg_env.c with 100% similarity]
resources/samples/local/apps/system/utils/kdbg_free.c [moved from RtSample/local/apps/system/utils/kdbg_free.c with 100% similarity]
resources/samples/local/apps/system/utils/kdbg_heapinfo.c [moved from RtSample/local/apps/system/utils/kdbg_heapinfo.c with 100% similarity]
resources/samples/local/apps/system/utils/kdbg_kill.c [moved from RtSample/local/apps/system/utils/kdbg_kill.c with 100% similarity]
resources/samples/local/apps/system/utils/kdbg_ps.c [moved from RtSample/local/apps/system/utils/kdbg_ps.c with 100% similarity]
resources/samples/local/apps/system/utils/kdbg_stackmonitor.c [moved from RtSample/local/apps/system/utils/kdbg_stackmonitor.c with 100% similarity]
resources/samples/local/apps/system/utils/kernelcmd.c [moved from RtSample/local/apps/system/utils/kernelcmd.c with 100% similarity]
resources/samples/local/apps/system/utils/netcmd.c [moved from RtSample/local/apps/system/utils/netcmd.c with 100% similarity]
resources/samples/local/apps/system/utils/netcmd.h [moved from RtSample/local/apps/system/utils/netcmd.h with 100% similarity]
resources/samples/local/apps/system/utils/netcmd_ping.c [moved from RtSample/local/apps/system/utils/netcmd_ping.c with 100% similarity]
resources/samples/local/apps/system/utils/netcmd_ping.h [moved from RtSample/local/apps/system/utils/netcmd_ping.h with 100% similarity]
resources/samples/local/apps/system/vi/.gitignore [moved from RtSample/local/apps/system/cle/.gitignore with 100% similarity]
resources/samples/local/apps/system/vi/Kconfig [moved from RtSample/local/apps/system/vi/Kconfig with 100% similarity]
resources/samples/local/apps/system/vi/Makefile [moved from RtSample/local/apps/system/vi/Makefile with 100% similarity]
resources/samples/local/apps/system/vi/vi.c [moved from RtSample/local/apps/system/vi/vi.c with 100% similarity]
resources/samples/local/apps/tools/mkimport.sh [moved from RtSample/local/apps/tools/mkimport.sh with 100% similarity]
resources/samples/local/apps/tools/mkromfsimg.sh [moved from RtSample/local/apps/tools/mkromfsimg.sh with 100% similarity]
resources/samples/local/build/configs/Kconfig [moved from RtSample/local/build/configs/Kconfig with 100% similarity]
resources/samples/local/build/configs/README.txt [moved from RtSample/local/build/configs/README.txt with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/Kconfig [moved from RtSample/local/build/configs/sidk_s5jt200/Kconfig with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/boot_bin/t20.binary.map [moved from RtSample/local/build/configs/sidk_s5jt200/boot_bin/t20.binary.map with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/boot_bin/t20.bl2.head.bin [moved from RtSample/local/build/configs/sidk_s5jt200/boot_bin/t20.bl2.head.bin with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/boot_bin/t20.makeimage.sh [moved from RtSample/local/build/configs/sidk_s5jt200/boot_bin/t20.makeimage.sh with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/boot_bin/t20.nbl1.bin [moved from RtSample/local/build/configs/sidk_s5jt200/boot_bin/t20.nbl1.bin with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/boot_bin/t20.sss.fw.bin [moved from RtSample/local/build/configs/sidk_s5jt200/boot_bin/t20.sss.fw.bin with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/boot_bin/t20.wlan.bin [moved from RtSample/local/build/configs/sidk_s5jt200/boot_bin/t20.wlan.bin with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/boot_bin/t20_custom_bl_fota.bin [moved from RtSample/local/build/configs/sidk_s5jt200/boot_bin/t20_custom_bl_fota.bin with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/cmm/Attach.cmm [moved from RtSample/local/build/configs/sidk_s5jt200/cmm/Attach.cmm with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/cmm/load_tinyara.cmm [moved from RtSample/local/build/configs/sidk_s5jt200/cmm/load_tinyara.cmm with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/cmm/reference_bd.cmm [moved from RtSample/local/build/configs/sidk_s5jt200/cmm/reference_bd.cmm with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_cmu_init.cmm [moved from RtSample/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_cmu_init.cmm with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_flash_boot_tinyara.cmm [moved from RtSample/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_flash_boot_tinyara.cmm with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_flash_erase_boot.cmm [moved from RtSample/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_flash_erase_boot.cmm with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_flash_erase_chip.cmm [moved from RtSample/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_flash_erase_chip.cmm with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_fusing_flash_all.cmm [moved from RtSample/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_fusing_flash_all.cmm with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_ledblk_sysup.cmm [moved from RtSample/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_ledblk_sysup.cmm with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_sram_boot_tinyara.cmm [moved from RtSample/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_sram_boot_tinyara.cmm with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_wlan_sysup.cmm [moved from RtSample/local/build/configs/sidk_s5jt200/cmm/s5jt200_silicon_evt0_wlan_sysup.cmm with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/hello_with_tash/Make.defs [moved from RtSample/local/build/configs/sidk_s5jt200/hello_with_tash/Make.defs with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/hello_with_tash/defconfig [moved from RtSample/local/build/configs/sidk_s5jt200/hello_with_tash/defconfig with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/kernel_sample/Make.defs [moved from RtSample/local/build/configs/sidk_s5jt200/kernel_sample/Make.defs with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/kernel_sample/defconfig [moved from RtSample/local/build/configs/sidk_s5jt200/kernel_sample/defconfig with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/flash_all.bat [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/flash_all.bat with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/flash_all_multi.bat [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/flash_all_multi.bat with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/ftd2xx.dll [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/ftd2xx.dll with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/libusb0.dll [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/libusb0.dll with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/openocd.exe [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/openocd.exe with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/openocd_0.10_linux64_t20 [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/openocd_0.10_linux64_t20 with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/openocd_linux32 [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/openocd_linux32 with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/openocd_linux64 [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/openocd_linux64 with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_attach_cr4.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_attach_cr4.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_attach_cr4_debug.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_attach_cr4_debug.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_evt0_flash_all_fota.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_evt0_flash_all_fota.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_evt0_flash_romfs.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_evt0_flash_romfs.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_evt0_flash_tinyara_ota0.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_evt0_flash_tinyara_ota0.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_evt0_flash_tinyara_ota1.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_evt0_flash_tinyara_ota1.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_flash_boot_tinyara.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_flash_boot_tinyara.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_flash_erase_all.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_flash_erase_all.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_flash_erase_boot.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_flash_erase_boot.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_flash_erase_tinyara.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_flash_erase_tinyara.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_fusing_flash_all.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_fusing_flash_all.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_fusing_flash_boot.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_fusing_flash_boot.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_fusing_flash_tinyara.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_fusing_flash_tinyara.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_sram_boot_tinyara.cfg [moved from RtSample/local/build/configs/sidk_s5jt200/openocd/s5jt200_silicon_evt0_sram_boot_tinyara.cfg with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/scripts/ld_s5jt200.script [moved from RtSample/local/build/configs/sidk_s5jt200/scripts/ld_s5jt200.script with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/scripts/ld_s5jt200_flash.script [moved from RtSample/local/build/configs/sidk_s5jt200/scripts/ld_s5jt200_flash.script with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/scripts/ld_s5jt200_flash_ota1.script [moved from RtSample/local/build/configs/sidk_s5jt200/scripts/ld_s5jt200_flash_ota1.script with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/sidk_s5jt200_download.sh [moved from RtSample/local/build/configs/sidk_s5jt200/sidk_s5jt200_download.sh with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/tc/Make.defs [moved from RtSample/local/build/configs/sidk_s5jt200/tc/Make.defs with 100% similarity]
resources/samples/local/build/configs/sidk_s5jt200/tc/defconfig [moved from RtSample/local/build/configs/sidk_s5jt200/tc/defconfig with 100% similarity]
resources/samples/local/build/output/libraries/.gitignore [moved from RtSample/local/build/output/libraries/.gitignore with 100% similarity]
resources/samples/local/build/output/libraries/Makefile [moved from RtSample/local/build/output/libraries/Makefile with 100% similarity]
resources/samples/local/build/output/libraries/README.txt [moved from RtSample/local/build/output/libraries/README.txt with 100% similarity]
resources/samples/local/external/.gitignore [moved from RtSample/local/external/.gitignore with 100% similarity]
resources/samples/local/external/Kconfig [moved from RtSample/local/external/Kconfig with 100% similarity]
resources/samples/local/external/Makefile [moved from RtSample/local/external/Makefile with 100% similarity]
resources/samples/local/external/contents/README.txt [moved from RtSample/local/external/contents/README.txt with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/cloud/.gitignore [moved from RtSample/local/external/iotivity/iotivity_1.1.0/cloud/.gitignore with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/cloud/README [moved from RtSample/local/external/iotivity/iotivity_1.1.0/cloud/README with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/cloud/samples/client/README [moved from RtSample/local/external/iotivity/iotivity_1.1.0/cloud/samples/client/README with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/cloud/samples/client/cloud_connector.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/cloud/samples/client/cloud_connector.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/cloud/samples/client/cloud_connector.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/cloud/samples/client/cloud_connector.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/cjson/cJSON.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/cjson/cJSON.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/cjson/cJSON.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/cjson/cJSON.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/timer/SConscript [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/timer/SConscript with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/timer/timer.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/timer/timer.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/timer/timer.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/timer/timer.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/SConscript [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/SConscript with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/assert_p.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/assert_p.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cbor.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cbor.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborconstants_p.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborconstants_p.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborencoder.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborencoder.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborencoder_close_container_checked.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborencoder_close_container_checked.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborerrorstrings.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborerrorstrings.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborjson.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborjson.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborparser.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborparser.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborpretty.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cborpretty.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cbortojson.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/cbortojson.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/compilersupport_p.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/compilersupport_p.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/extract_number_p.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/extract_number_p.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/open_memstream.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinycbor/tinycbor/src/open_memstream.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Add-TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA_256-cipher-su.patch [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Add-TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA_256-cipher-su.patch with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Added-anonymous-ecdh-cipher-suite-into-tinydtls.patch [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Added-anonymous-ecdh-cipher-suite-into-tinydtls.patch with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Added-support-in-tinyDTLS-to-support-rehandshake.patch [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Added-support-in-tinyDTLS-to-support-rehandshake.patch with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Adding-autoconf-generated-files-in-tinydtls-repo.patch [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Adding-autoconf-generated-files-in-tinydtls-repo.patch with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Bug-Fix-in-earlier-rehandhsake-implementation.patch [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Bug-Fix-in-earlier-rehandhsake-implementation.patch with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Fix-the-wrong-implementation-about-the-anonymous-cip.patch [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Fix-the-wrong-implementation-about-the-anonymous-cip.patch with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Fixed-issue-to-pass-PSK-identity-hint-to-application.patch [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Fixed-issue-to-pass-PSK-identity-hint-to-application.patch with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Updated-tinyDTLS-test-apps-to-use-identity-hint.patch [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-Updated-tinyDTLS-test-apps-to-use-identity-hint.patch with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-add-support-of-X.509-into-tinyDTLS-external-library.patch [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/0001-add-support-of-X.509-into-tinyDTLS-external-library.patch with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/Android.mk [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/Android.mk with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/LICENSE [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/LICENSE with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/Makefile.in [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/Makefile.in with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/Makefile.tinydtls [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/Makefile.tinydtls with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/README [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/README with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/README_Iotivity [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/README_Iotivity with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/SConscript [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/SConscript with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/aes/Makefile.in [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/aes/Makefile.in with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/aes/rijndael.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/aes/rijndael.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/aes/rijndael.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/aes/rijndael.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/alert.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/alert.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ccm.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ccm.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ccm.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ccm.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/configure.in [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/configure.in with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/crypto.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/crypto.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/crypto.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/crypto.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/debug.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/debug.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/doc/Doxyfile.in [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/Doxyfile.in with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/doc/DoxygenLayout.xml [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/doc/DoxygenLayout.xml with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/doc/Makefile.in [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/Makefile.in with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls_config.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls_config.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls_config.h.in [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls_config.h.in with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls_hal.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls_hal.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls_time.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls_time.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls_time.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/dtls_time.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/LICENSE.txt [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/LICENSE.txt with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/Makefile.contiki [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/ecc/Makefile.contiki with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/Makefile.ecc [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/Makefile.ecc with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/Makefile.in [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/Makefile.in with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/README.md [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/README.md with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/asm_arm.inc [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/asm_arm.inc with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/asm_avr.inc [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/asm_avr.inc with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/ecc.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/ecc.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/ecc.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/ecc.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/test/ecc_test/ecc_test.ino [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/test/ecc_test/ecc_test.ino with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/test/emk_rules.py [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/test/emk_rules.py with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/test/test_ecdh.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/test/test_ecdh.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/test/test_ecdsa.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/test/test_ecdsa.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/examples/contiki/Makefile.in [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/examples/contiki/Makefile.in with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/examples/contiki/dtls-client.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/examples/contiki/dtls-client.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/examples/contiki/dtls-server.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/examples/contiki/dtls-server.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/global.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/global.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/hmac.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/hmac.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/hmac.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/hmac.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/netq.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/netq.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/netq.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/netq.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/numeric.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/numeric.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/peer.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/peer.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/peer.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/peer.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/platform-specific/Makefile.in [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/platform-specific/Makefile.in with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/platform-specific/config-cc2538dk.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/platform-specific/config-cc2538dk.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/platform-specific/config-econotag.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/platform-specific/config-econotag.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/platform-specific/config-minimal-net.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/platform-specific/config-minimal-net.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/platform-specific/config-sky.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/platform-specific/config-sky.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/platform-specific/config-wismote.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/platform-specific/config-wismote.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/prng.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/prng.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/session.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/session.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/session.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/session.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/Makefile.in [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/Makefile.in with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/README [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/README with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/sha2.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/sha2.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/sha2.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/sha2.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/sha2prog.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/sha2prog.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/sha2speed.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/sha2speed.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/sha2test.pl [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/sha2test.pl with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector001.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector001.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector001.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector001.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector002.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector002.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector002.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector002.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector003.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector003.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector003.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector003.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector004.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector004.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector004.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector004.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector005.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector005.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector005.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector005.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector006.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector006.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector006.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector006.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector007.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector007.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector007.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector007.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector008.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector008.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector008.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector008.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector009.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector009.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector009.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector009.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector010.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector010.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector010.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector010.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector011.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector011.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector011.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector011.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector012.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector012.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector012.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector012.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector013.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector013.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector013.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector013.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector014.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector014.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector014.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector014.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector015.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector015.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector015.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector015.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector016.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector016.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector016.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector016.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector017.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector017.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector017.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector017.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector018.dat [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector018.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector018.info [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector018.info with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/state.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/state.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/t_list.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/t_list.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/Makefile.in [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/Makefile.in with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/cbc_aes128-test.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/cbc_aes128-test.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/cbc_aes128-testdata.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/cbc_aes128-testdata.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/ccm-test.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/ccm-test.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/ccm-testdata.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/ccm-testdata.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/dsrv-test.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/dsrv-test.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/dtls-client.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/dtls-client.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/dtls-server.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/dtls-server.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/netq-test.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/netq-test.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/pcap.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/pcap.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/prf-test.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/prf-test.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/secure-server.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tests/secure-server.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tinydtls.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tinydtls.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tinydtls.h.in [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tinydtls.h.in with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tinydtls_debug.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/tinydtls_debug.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/uthash.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/uthash.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/utlist.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/utlist.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/c_common/ocrandom/include/ocrandom.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/c_common/ocrandom/include/ocrandom.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/c_common/ocrandom/src/ocrandom.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/c_common/ocrandom/src/ocrandom.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/c_common/oic_malloc/include/oic_malloc.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/c_common/oic_malloc/include/oic_malloc.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/c_common/oic_malloc/src/oic_malloc.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/c_common/oic_malloc/src/oic_malloc.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/c_common/oic_string/include/oic_string.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/c_common/oic_string/include/oic_string.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/c_common/oic_string/src/oic_string.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/c_common/oic_string/src/oic_string.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/c_common/oic_time/include/oic_time.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/c_common/oic_time/include/oic_time.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/c_common/oic_time/src/oic_time.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/c_common/oic_time/src/oic_time.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/c_common/platform_features.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/c_common/platform_features.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/api/cacommon.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/api/cacommon.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/api/cainterface.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/api/cainterface.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/api/casecurityinterface.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/api/casecurityinterface.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/api/cautilinterface.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/api/cautilinterface.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/cacommonutil.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/cacommonutil.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/camutex.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/camutex.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/caremotehandler.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/caremotehandler.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/cathreadpool.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/cathreadpool.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/uarraylist.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/uarraylist.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/ulinklist.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/ulinklist.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/uqueue.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/inc/uqueue.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/camutex_noop.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/camutex_noop.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/camutex_pthreads.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/camutex_pthreads.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/caremotehandler.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/caremotehandler.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/cathreadpool_pthreads.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/cathreadpool_pthreads.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/uarraylist.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/uarraylist.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/ulinklist.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/ulinklist.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/uqueue.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/common/src/uqueue.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caadapterinterface.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caadapterinterface.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caadapternetdtls.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caadapternetdtls.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caadapterutils.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caadapterutils.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/cablockwisetransfer.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/cablockwisetransfer.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caedradapter.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caedradapter.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caedradapter_singlethread.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caedradapter_singlethread.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caedrinterface.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caedrinterface.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/cagattservice.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/cagattservice.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/cainterfacecontroller.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/cainterfacecontroller.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/cainterfacecontroller_singlethread.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/cainterfacecontroller_singlethread.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caipadapter.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caipadapter.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caipinterface.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caipinterface.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caleadapter.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caleadapter.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caleinterface.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caleinterface.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/camessagehandler.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/camessagehandler.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/canetworkconfigurator.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/canetworkconfigurator.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/canfcadapter.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/canfcadapter.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/canfcinterface.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/canfcinterface.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caprotocolmessage.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caprotocolmessage.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caqueueingthread.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caqueueingthread.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caraadapter.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caraadapter.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caretransmission.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/caretransmission.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/catcpadapter.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/catcpadapter.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/catcpinterface.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/catcpinterface.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/byte_array.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/byte_array.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/cert.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/cert.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/crl.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/crl.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/crypto_adapter.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/crypto_adapter.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/der_dec.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/der_dec.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/pki.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/pki.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/pki_errors.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/pki_errors.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/sn_store.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/inc/pkix/sn_store.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/address.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/address.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/async.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/async.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/async.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/async.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/bits.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/bits.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/block.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/block.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/block.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/block.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/coap.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/coap.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/coap_list.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/coap_list.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/coap_list.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/coap_list.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/coap_time.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/coap_time.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/config.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/config.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/debug.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/debug.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/debug.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/debug.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/encode.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/encode.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/encode.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/encode.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/hashkey.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/hashkey.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/hashkey.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/hashkey.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/mem.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/mem.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/net.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/net.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/net.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/net.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/option.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/option.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/option.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/option.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/pdu.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/pdu.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/pdu.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/pdu.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/prng.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/prng.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/resource.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/resource.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/resource.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/resource.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/str.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/str.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/str.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/str.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/subscribe.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/subscribe.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/subscribe.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/subscribe.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/t_list.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/t_list.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/uri.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/uri.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/uri.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/uri.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/uthash.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/uthash.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/utlist.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/lib/libcoap-4.1.1/utlist.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/caadapternetdtls.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/caadapternetdtls.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/caadapterutils.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/caadapterutils.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/pkix/cert.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/pkix/cert.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/pkix/crl.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/pkix/crl.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/pkix/der_const.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/pkix/der_const.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/pkix/der_dec.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/pkix/der_dec.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/pkix/pki.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/pkix/pki.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/pkix/sn_store.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/adapter_util/pkix/sn_store.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/cablockwisetransfer.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/cablockwisetransfer.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/caconnectivitymanager.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/caconnectivitymanager.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/cainterfacecontroller.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/cainterfacecontroller.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/camessagehandler.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/camessagehandler.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/canetworkconfigurator.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/canetworkconfigurator.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/caprotocolmessage.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/caprotocolmessage.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/caqueueingthread.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/caqueueingthread.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/caretransmission.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/caretransmission.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/ip_adapter/caipadapter.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/ip_adapter/caipadapter.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/ip_adapter/caipserver.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/ip_adapter/caipserver.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/ip_adapter/linux/caipnwmonitor.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/ip_adapter/linux/caipnwmonitor.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/tcp_adapter/SConscript [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/tcp_adapter/SConscript with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/tcp_adapter/catcpadapter.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/tcp_adapter/catcpadapter.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/tcp_adapter/catcpserver.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/connectivity/src/tcp_adapter/catcpserver.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/logger/README [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/logger/README with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/logger/SConscript [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/logger/SConscript with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/logger/include/logger.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/logger/include/logger.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/logger/include/logger_types.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/logger/include/logger_types.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/logger/src/logger.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/logger/src/logger.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/routing/include/routingmanager.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/routing/include/routingmanager.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/routing/include/routingutility.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/routing/include/routingutility.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/routing/src/routingutility.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/routing/src/routingutility.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/base64.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/base64.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/aclresource.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/aclresource.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/amaclresource.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/amaclresource.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/amsmgr.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/amsmgr.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/credresource.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/credresource.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/crlresource.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/crlresource.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/directpairing.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/directpairing.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/doxmresource.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/doxmresource.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/dpairingresource.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/dpairingresource.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/pconfresource.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/pconfresource.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/policyengine.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/policyengine.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/psinterface.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/psinterface.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/pstatresource.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/pstatresource.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/resourcemanager.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/resourcemanager.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/secureresourcemanager.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/secureresourcemanager.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/security_internals.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/security_internals.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/srmresourcestrings.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/srmresourcestrings.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/svcresource.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/svcresource.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/verresource.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/internal/verresource.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/iotvticalendar.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/iotvticalendar.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/pbkdf2.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/pbkdf2.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/pinoxmcommon.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/pinoxmcommon.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/securevirtualresourcetypes.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/securevirtualresourcetypes.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/srmutility.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/include/srmutility.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/aclresource.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/aclresource.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/amaclresource.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/amaclresource.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/amsmgr.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/amsmgr.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/credresource.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/credresource.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/crlresource.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/crlresource.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/directpairing.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/directpairing.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/doxmresource.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/doxmresource.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/dpairingresource.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/dpairingresource.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/iotivitybase64.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/iotivitybase64.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/iotvticalendar.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/iotvticalendar.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/oxmpincommon.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/oxmpincommon.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/pbkdf2.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/pbkdf2.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/pconfresource.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/pconfresource.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/policyengine.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/policyengine.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/psinterface.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/psinterface.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/pstatresource.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/pstatresource.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/resourcemanager.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/resourcemanager.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/secureresourcemanager.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/secureresourcemanager.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/srmresourcestrings.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/srmresourcestrings.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/srmutility.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/srmutility.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/svcresource.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/svcresource.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/verresource.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/security/src/verresource.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/occlientcb.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/occlientcb.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/occollection.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/occollection.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/ocobserve.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/ocobserve.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/ocpayloadcbor.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/ocpayloadcbor.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/ocresource.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/ocresource.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/ocresourcehandler.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/ocresourcehandler.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/ocserverrequest.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/ocserverrequest.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/ocstackinternal.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/ocstackinternal.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/oicgroup.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/oicgroup.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/oickeepalive.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/internal/oickeepalive.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/ocpayload.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/ocpayload.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/ocpresence.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/ocpresence.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/ocstack.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/ocstack.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/ocstackconfig.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/ocstackconfig.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/octypes.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/octypes.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/payload_logging.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/payload_logging.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/rdpayload.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/include/rdpayload.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/Makefile [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/Makefile with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/Make.defs [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/Make.defs with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/SConscript [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/SConscript with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/common.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/common.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlient.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlient.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlient.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlient.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlientbasicops.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlientbasicops.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlientbasicops.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlientbasicops.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlientcoll.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlientcoll.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlientslow.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlientslow.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlientslow.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/occlientslow.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocremoteaccessclient.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocremoteaccessclient.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocremoteaccessclient.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocremoteaccessclient.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocrouting.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocrouting.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocserverbasicops.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocserverbasicops.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocserverbasicops.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocserverbasicops.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocservercoll.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocservercoll.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocserverslow.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocserverslow.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocserverslow.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/SimpleClientServer/ocserverslow.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/Make.defs [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/Make.defs with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/README [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/README with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/SConscript [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/SConscript with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/common.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/common.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/common.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/common.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/ocamsservice.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/ocamsservice.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/occlientbasicops.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/occlientbasicops.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/occlientbasicops.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/occlientbasicops.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/occlientdirectpairing.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/occlientdirectpairing.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/ocserverbasicops.cpp [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/ocserverbasicops.cpp with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/ocserverbasicops.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/ocserverbasicops.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_amss_db.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_amss_db.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_amss_db.json [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_amss_db.json with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_client.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_client.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_client.json [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_client.json with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_client_directpairing.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_client_directpairing.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_client_directpairing.json [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_client_directpairing.json with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_server.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_server.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_server.json [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_server.json with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_server_justworks.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/samples/linux/secure/oic_svr_db_server_justworks.dat with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/occlientcb.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/occlientcb.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/occollection.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/occollection.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocobserve.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocobserve.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocpayload.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocpayload.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocpayloadconvert.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocpayloadconvert.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocpayloadparse.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocpayloadparse.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocresource.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocresource.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocserverrequest.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocserverrequest.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocstack.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/ocstack.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/oicgroup.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/oicgroup.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/oickeepalive.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/oickeepalive.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/rdpayload.c [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/csdk/stack/src/rdpayload.c with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/oc_logger/include/oc_console_logger.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/oc_logger/include/oc_console_logger.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/oc_logger/include/oc_logger.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/oc_logger/include/oc_logger.h with 100% similarity]
resources/samples/local/external/iotivity/iotivity_1.1.0/resource/oc_logger/include/oc_logger_types.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/resource/oc_logger/include/oc_logger_types.h with 100% similarity]
resources/samples/local/external/iotivity/patches/1.2.0-RC2/0001-tinyara-iotivity-1.2.0-RC2.patch [moved from RtSample/local/external/iotivity/patches/1.2.0-RC2/0001-tinyara-iotivity-1.2.0-RC2.patch with 100% similarity]
resources/samples/local/external/iotivity/patches/1.2.0-RC2/0002-tinyara-iotivity-1.2.0-RC2.patch [moved from RtSample/local/external/iotivity/patches/1.2.0-RC2/0002-tinyara-iotivity-1.2.0-RC2.patch with 100% similarity]
resources/samples/local/external/mbed/mbedtls.h [moved from RtSample/local/external/mbed/mbedtls.h with 100% similarity]
resources/samples/local/external/wakaama/.gitignore [moved from RtSample/local/external/wakaama/.gitignore with 100% similarity]
resources/samples/local/external/wakaama/.gitmodules [moved from RtSample/local/external/wakaama/.gitmodules with 100% similarity]
resources/samples/local/external/wakaama/CONTRIBUTING.md [moved from RtSample/local/external/wakaama/CONTRIBUTING.md with 100% similarity]
resources/samples/local/external/wakaama/EDL-v1.0 [moved from RtSample/local/external/wakaama/EDL-v1.0 with 100% similarity]
resources/samples/local/external/wakaama/EPL-v1.0 [moved from RtSample/local/external/wakaama/EPL-v1.0 with 100% similarity]
resources/samples/local/external/wakaama/README.md [moved from RtSample/local/external/wakaama/README.md with 100% similarity]
resources/samples/local/external/wakaama/TODO [moved from RtSample/local/external/wakaama/TODO with 100% similarity]
resources/samples/local/external/wakaama/about.html [moved from RtSample/local/external/wakaama/about.html with 100% similarity]
resources/samples/local/external/wakaama/core/Make.defs [moved from RtSample/local/external/wakaama/core/Make.defs with 100% similarity]
resources/samples/local/external/wakaama/core/bootstrap.c [moved from RtSample/local/external/wakaama/core/bootstrap.c with 100% similarity]
resources/samples/local/external/wakaama/core/data.c [moved from RtSample/local/external/wakaama/core/data.c with 100% similarity]
resources/samples/local/external/wakaama/core/discover.c [moved from RtSample/local/external/wakaama/core/discover.c with 100% similarity]
resources/samples/local/external/wakaama/core/er-coap-13/LICENSE [moved from RtSample/local/external/wakaama/core/er-coap-13/LICENSE with 100% similarity]
resources/samples/local/external/wakaama/core/er-coap-13/Make.defs [moved from RtSample/local/external/wakaama/core/er-coap-13/Make.defs with 100% similarity]
resources/samples/local/external/wakaama/core/er-coap-13/er-coap-13.c [moved from RtSample/local/external/wakaama/core/er-coap-13/er-coap-13.c with 100% similarity]
resources/samples/local/external/wakaama/core/er-coap-13/er-coap-13.h [moved from RtSample/local/external/wakaama/core/er-coap-13/er-coap-13.h with 100% similarity]
resources/samples/local/external/wakaama/core/internals.h [moved from RtSample/local/external/wakaama/core/internals.h with 100% similarity]
resources/samples/local/external/wakaama/core/json.c [moved from RtSample/local/external/wakaama/core/json.c with 100% similarity]
resources/samples/local/external/wakaama/core/liblwm2m.c [moved from RtSample/local/external/wakaama/core/liblwm2m.c with 100% similarity]
resources/samples/local/external/wakaama/core/liblwm2m.h [moved from RtSample/local/external/wakaama/core/liblwm2m.h with 100% similarity]
resources/samples/local/external/wakaama/core/list.c [moved from RtSample/local/external/wakaama/core/list.c with 100% similarity]
resources/samples/local/external/wakaama/core/management.c [moved from RtSample/local/external/wakaama/core/management.c with 100% similarity]
resources/samples/local/external/wakaama/core/objects.c [moved from RtSample/local/external/wakaama/core/objects.c with 100% similarity]
resources/samples/local/external/wakaama/core/observe.c [moved from RtSample/local/external/wakaama/core/observe.c with 100% similarity]
resources/samples/local/external/wakaama/core/packet.c [moved from RtSample/local/external/wakaama/core/packet.c with 100% similarity]
resources/samples/local/external/wakaama/core/registration.c [moved from RtSample/local/external/wakaama/core/registration.c with 100% similarity]
resources/samples/local/external/wakaama/core/tlv_lwm2m.c [moved from RtSample/local/external/wakaama/core/tlv_lwm2m.c with 100% similarity]
resources/samples/local/external/wakaama/core/transaction.c [moved from RtSample/local/external/wakaama/core/transaction.c with 100% similarity]
resources/samples/local/external/wakaama/core/uri_lwm2m.c [moved from RtSample/local/external/wakaama/core/uri_lwm2m.c with 100% similarity]
resources/samples/local/external/wakaama/core/utils.c [moved from RtSample/local/external/wakaama/core/utils.c with 100% similarity]
resources/samples/local/external/wakaama/core/wakaama.cmake [moved from RtSample/local/external/wakaama/core/wakaama.cmake with 100% similarity]
resources/samples/local/external/wakaama/examples/bootstrap_server/CMakeLists.txt [moved from RtSample/local/external/wakaama/examples/bootstrap_server/CMakeLists.txt with 100% similarity]
resources/samples/local/external/wakaama/examples/bootstrap_server/Make.defs [moved from RtSample/local/external/wakaama/examples/bootstrap_server/Make.defs with 100% similarity]
resources/samples/local/external/wakaama/examples/bootstrap_server/README [moved from RtSample/local/external/wakaama/examples/bootstrap_server/README with 100% similarity]
resources/samples/local/external/wakaama/examples/bootstrap_server/bootstrap_info.c [moved from RtSample/local/external/wakaama/examples/bootstrap_server/bootstrap_info.c with 100% similarity]
resources/samples/local/external/wakaama/examples/bootstrap_server/bootstrap_info.h [moved from RtSample/local/external/wakaama/examples/bootstrap_server/bootstrap_info.h with 100% similarity]
resources/samples/local/external/wakaama/examples/bootstrap_server/bootstrap_server.c [moved from RtSample/local/external/wakaama/examples/bootstrap_server/bootstrap_server.c with 100% similarity]
resources/samples/local/external/wakaama/examples/bootstrap_server/bootstrap_server.ini [moved from RtSample/local/external/wakaama/examples/bootstrap_server/bootstrap_server.ini with 100% similarity]
resources/samples/local/external/wakaama/examples/client/CMakeLists.txt [moved from RtSample/local/external/wakaama/examples/client/CMakeLists.txt with 100% similarity]
resources/samples/local/external/wakaama/examples/client/Make.defs [moved from RtSample/local/external/wakaama/examples/client/Make.defs with 100% similarity]
resources/samples/local/external/wakaama/examples/client/README.md [moved from RtSample/local/external/wakaama/examples/client/README.md with 100% similarity]
resources/samples/local/external/wakaama/examples/client/common_monitor_interface.c [moved from RtSample/local/external/wakaama/examples/client/common_monitor_interface.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/common_monitor_interface.h [moved from RtSample/local/external/wakaama/examples/client/common_monitor_interface.h with 100% similarity]
resources/samples/local/external/wakaama/examples/client/connectivity_interface.c [moved from RtSample/local/external/wakaama/examples/client/connectivity_interface.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/connectivity_interface.h [moved from RtSample/local/external/wakaama/examples/client/connectivity_interface.h with 100% similarity]
resources/samples/local/external/wakaama/examples/client/lwm2mclient.c [moved from RtSample/local/external/wakaama/examples/client/lwm2mclient.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/lwm2mclient.h [moved from RtSample/local/external/wakaama/examples/client/lwm2mclient.h with 100% similarity]
resources/samples/local/external/wakaama/examples/client/object_access_control.c [moved from RtSample/local/external/wakaama/examples/client/object_access_control.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/object_connectivity_moni.c [moved from RtSample/local/external/wakaama/examples/client/object_connectivity_moni.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/object_connectivity_stat.c [moved from RtSample/local/external/wakaama/examples/client/object_connectivity_stat.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/object_connectivity_stat.h [moved from RtSample/local/external/wakaama/examples/client/object_connectivity_stat.h with 100% similarity]
resources/samples/local/external/wakaama/examples/client/object_device.c [moved from RtSample/local/external/wakaama/examples/client/object_device.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/object_firmware.c [moved from RtSample/local/external/wakaama/examples/client/object_firmware.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/object_location.c [moved from RtSample/local/external/wakaama/examples/client/object_location.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/object_power_moni.c [moved from RtSample/local/external/wakaama/examples/client/object_power_moni.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/object_security.c [moved from RtSample/local/external/wakaama/examples/client/object_security.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/object_server.c [moved from RtSample/local/external/wakaama/examples/client/object_server.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/power_monitor_interface.c [moved from RtSample/local/external/wakaama/examples/client/power_monitor_interface.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/power_monitor_interface.h [moved from RtSample/local/external/wakaama/examples/client/power_monitor_interface.h with 100% similarity]
resources/samples/local/external/wakaama/examples/client/system_api.c [moved from RtSample/local/external/wakaama/examples/client/system_api.c with 100% similarity]
resources/samples/local/external/wakaama/examples/client/test_object.c [moved from RtSample/local/external/wakaama/examples/client/test_object.c with 100% similarity]
resources/samples/local/external/wakaama/examples/lightclient/CMakeLists.txt [moved from RtSample/local/external/wakaama/examples/lightclient/CMakeLists.txt with 100% similarity]
resources/samples/local/external/wakaama/examples/lightclient/Make.defs [moved from RtSample/local/external/wakaama/examples/lightclient/Make.defs with 100% similarity]
resources/samples/local/external/wakaama/examples/lightclient/lightclient.c [moved from RtSample/local/external/wakaama/examples/lightclient/lightclient.c with 100% similarity]
resources/samples/local/external/wakaama/examples/lightclient/object_device.c [moved from RtSample/local/external/wakaama/examples/lightclient/object_device.c with 100% similarity]
resources/samples/local/external/wakaama/examples/lightclient/object_security.c [moved from RtSample/local/external/wakaama/examples/lightclient/object_security.c with 100% similarity]
resources/samples/local/external/wakaama/examples/lightclient/object_server.c [moved from RtSample/local/external/wakaama/examples/lightclient/object_server.c with 100% similarity]
resources/samples/local/external/wakaama/examples/lightclient/test_object.c [moved from RtSample/local/external/wakaama/examples/lightclient/test_object.c with 100% similarity]
resources/samples/local/external/wakaama/examples/server/CMakeLists.txt [moved from RtSample/local/external/wakaama/examples/server/CMakeLists.txt with 100% similarity]
resources/samples/local/external/wakaama/examples/server/Make.defs [moved from RtSample/local/external/wakaama/examples/server/Make.defs with 100% similarity]
resources/samples/local/external/wakaama/examples/server/lwm2mserver.c [moved from RtSample/local/external/wakaama/examples/server/lwm2mserver.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/Make.defs [moved from RtSample/local/external/wakaama/examples/shared/Make.defs with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/commandline.c [moved from RtSample/local/external/wakaama/examples/shared/commandline.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/commandline.h [moved from RtSample/local/external/wakaama/examples/shared/commandline.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/connection.c [moved from RtSample/local/external/wakaama/examples/shared/connection.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/connection.h [moved from RtSample/local/external/wakaama/examples/shared/connection.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/dtlsconnection.c [moved from RtSample/local/external/wakaama/examples/shared/dtlsconnection.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/dtlsconnection.h [moved from RtSample/local/external/wakaama/examples/shared/dtlsconnection.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/memtrace.c [moved from RtSample/local/external/wakaama/examples/shared/memtrace.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/platform.c [moved from RtSample/local/external/wakaama/examples/shared/platform.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/shared.cmake [moved from RtSample/local/external/wakaama/examples/shared/shared.cmake with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls.cmake [moved from RtSample/local/external/wakaama/examples/shared/tinydtls.cmake with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/Makefile.in [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/Makefile.in with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/Makefile.tinydtls [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/Makefile.tinydtls with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/aes/Makefile.in [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/aes/Makefile.in with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/aes/rijndael.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/aes/rijndael.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/aes/rijndael.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/aes/rijndael.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/alert.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/alert.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/output.0 [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/output.0 with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/output.1 [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/output.1 with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/output.2 [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/output.2 with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/output.3 [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/output.3 with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/requests [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/requests with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/traces.0 [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/traces.0 with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/traces.1 [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/traces.1 with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/traces.2 [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/traces.2 with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/traces.3 [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/autom4te.cache/traces.3 with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/ccm.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/ccm.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/ccm.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/ccm.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/config.log [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/config.log with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/config.status [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/config.status with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/configure [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/configure with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/configure.ac [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/configure.ac with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/crypto.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/crypto.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/crypto.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/crypto.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/Doxyfile [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/Doxyfile with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/Doxyfile.in [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/doc/Doxyfile.in with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/Makefile.in [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/doc/Makefile.in with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/alert_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/alert_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/alert_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/alert_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/annotated.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/annotated.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/bc_s.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/bc_s.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/bdwn.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/bdwn.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ccm_8c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ccm_8c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ccm_8c_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ccm_8c_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ccm_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ccm_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ccm_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ccm_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/classes.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/classes.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/closed.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/closed.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/config_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/config_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/config_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/config_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/contiki-config_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/contiki-config_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/contiki-config_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/contiki-config_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/crypto_8c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/crypto_8c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/crypto_8c_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/crypto_8c_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/crypto_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/crypto_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/crypto_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/crypto_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/debug_8c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/debug_8c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/debug_8c_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/debug_8c_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/debug_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/debug_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/debug_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/debug_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/doxygen.css [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/doxygen.css with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/doxygen.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/doxygen.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls_8c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls_8c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls_8c_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls_8c_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls__config_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls__config_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls__config_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls__config_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls__time_8c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls__time_8c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls__time_8c_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls__time_8c_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls__time_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls__time_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls__time_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/dtls__time_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/dynsections.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/dynsections.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/files.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/files.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2blank.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2blank.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2cl.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2cl.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2doc.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2doc.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2folderclosed.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2folderclosed.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2folderopen.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2folderopen.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2lastnode.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2lastnode.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2link.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2link.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2mlastnode.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2mlastnode.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2mnode.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2mnode.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2mo.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2mo.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2node.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2node.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2ns.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2ns.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2plastnode.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2plastnode.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2pnode.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2pnode.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2splitbar.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2splitbar.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2vertline.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/ftv2vertline.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/functions.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/functions.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/functions_func.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/functions_func.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/functions_vars.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/functions_vars.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/global_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/global_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/global_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/global_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_a.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_a.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_b.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_b.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_d.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_d.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_a.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_a.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_d.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_d.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_e.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_e.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_g.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_g.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_l.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_l.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_m.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_m.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_p.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_p.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_r.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_r.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_s.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_s.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_u.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_u.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_w.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_defs_w.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_e.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_e.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_enum.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_enum.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_eval.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_eval.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_f.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_f.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_a.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_a.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_b.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_b.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_d.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_d.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_e.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_e.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_f.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_f.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_i.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_i.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_k.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_k.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_l.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_l.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_m.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_m.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_n.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_n.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_p.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_p.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_u.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_u.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_v.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_func_v.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_g.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_g.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_i.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_i.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_k.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_k.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_l.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_l.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_m.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_m.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_n.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_n.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_p.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_p.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_r.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_r.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_s.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_s.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_type.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_type.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_u.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_u.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_v.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_v.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_vars.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_vars.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_w.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/globals_w.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/group__HMAC.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/group__HMAC.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/group__clock.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/group__clock.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/group__contiki.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/group__contiki.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/group__dtls__usage.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/group__dtls__usage.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/group__netq.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/group__netq.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/group__prng.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/group__prng.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/hmac_8c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/hmac_8c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/hmac_8c_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/hmac_8c_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/hmac_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/hmac_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/hmac_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/hmac_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/index.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/index.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/jquery.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/jquery.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/modules.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/modules.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/nav_f.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/nav_f.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/nav_g.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/nav_g.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/nav_h.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/nav_h.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/netq_8c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/netq_8c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/netq_8c_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/netq_8c_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/netq_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/netq_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/netq_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/netq_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/numeric_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/numeric_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/numeric_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/numeric_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/open.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/open.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/peer_8c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/peer_8c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/peer_8c_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/peer_8c_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/peer_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/peer_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/peer_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/peer_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/prng_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/prng_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/prng_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/prng_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_0.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_0.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_0.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_0.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_1.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_1.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_1.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_1.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_10.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_10.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_10.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_10.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_11.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_11.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_11.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_11.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_12.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_12.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_12.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_12.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_13.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_13.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_13.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_13.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_14.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_14.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_14.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_14.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_15.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_15.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_15.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_15.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_2.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_2.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_2.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_2.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_3.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_3.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_3.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_3.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_4.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_4.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_4.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_4.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_5.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_5.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_5.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_5.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_6.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_6.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_6.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_6.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_7.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_7.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_7.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_7.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_8.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_8.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_8.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_8.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_9.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_9.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_9.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_9.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_a.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_a.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_a.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_a.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_b.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_b.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_b.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_b.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_c.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_c.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_d.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_d.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_d.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_d.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_e.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_e.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_e.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_e.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_f.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_f.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_f.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/all_f.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_0.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_0.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_0.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_0.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_1.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_1.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_1.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_1.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_2.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_2.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_2.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_2.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_3.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_3.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_3.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_3.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_4.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_4.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_4.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_4.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_5.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_5.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_5.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/classes_5.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/close.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/close.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_0.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_0.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_0.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_0.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_1.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_1.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_1.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_1.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_2.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_2.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_2.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_2.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_3.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_3.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_3.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_3.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_4.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_4.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_4.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_4.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_5.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_5.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_5.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_5.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_6.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_6.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_6.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_6.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_7.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_7.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_7.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_7.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_8.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_8.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_8.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_8.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_9.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_9.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_9.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_9.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_a.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_a.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_a.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_a.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_b.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_b.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_b.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_b.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_c.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_c.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_d.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_d.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_d.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_d.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_e.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_e.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_e.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/defines_e.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enums_0.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enums_0.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enums_0.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enums_0.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enums_1.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enums_1.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enums_1.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enums_1.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_0.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_0.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_0.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_0.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_1.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_1.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_1.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_1.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_2.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_2.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_2.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_2.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_3.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_3.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_3.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/enumvalues_3.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_0.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_0.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_0.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_0.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_1.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_1.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_1.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_1.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_2.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_2.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_2.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_2.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_3.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_3.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_3.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_3.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_4.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_4.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_4.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_4.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_5.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_5.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_5.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_5.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_6.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_6.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_6.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_6.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_7.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_7.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_7.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_7.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_8.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_8.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_8.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_8.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_9.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_9.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_9.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/files_9.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_0.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_0.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_0.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_0.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_1.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_1.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_1.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_1.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_2.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_2.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_2.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_2.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_3.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_3.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_3.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_3.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_4.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_4.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_4.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_4.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_5.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_5.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_5.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_5.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_6.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_6.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_6.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_6.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_7.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_7.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_7.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_7.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_8.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_8.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_8.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_8.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_9.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_9.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_9.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_9.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_a.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_a.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_a.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_a.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_b.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_b.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_b.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_b.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_c.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_c.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_d.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_d.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_d.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_d.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_e.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_e.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_e.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_e.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_f.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_f.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_f.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/functions_f.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_0.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_0.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_0.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_0.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_1.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_1.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_1.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_1.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_2.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_2.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_2.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_2.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_3.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_3.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_3.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_3.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_4.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_4.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_4.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/groups_4.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/mag_sel.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/mag_sel.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/nomatches.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/nomatches.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/search.css [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/search.css with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/search.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/search.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/search_l.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/search_l.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/search_m.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/search_m.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/search_r.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/search_r.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_0.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_0.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_0.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_0.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_1.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_1.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_1.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_1.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_2.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_2.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_2.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_2.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_3.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_3.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_3.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_3.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_4.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_4.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_4.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/typedefs_4.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_0.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_0.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_0.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_0.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_1.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_1.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_1.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_1.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_10.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_10.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_10.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_10.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_2.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_2.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_2.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_2.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_3.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_3.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_3.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_3.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_4.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_4.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_4.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_4.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_5.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_5.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_5.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_5.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_6.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_6.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_6.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_6.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_7.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_7.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_7.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_7.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_8.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_8.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_8.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_8.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_9.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_9.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_9.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_9.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_a.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_a.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_a.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_a.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_b.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_b.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_b.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_b.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_c.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_c.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_d.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_d.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_d.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_d.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_e.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_e.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_e.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_e.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_f.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_f.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_f.js [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/search/variables_f.js with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/session_8c.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/session_8c.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/session_8c_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/session_8c_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/session_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/session_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/session_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/session_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/state_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/state_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/state_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/state_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structUT__hash__bucket.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structUT__hash__bucket.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structUT__hash__handle.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structUT__hash__handle.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structUT__hash__table.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structUT__hash__table.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structaes128__ccm__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structaes128__ccm__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__cipher__context__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__cipher__context__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__context__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__context__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__ecdsa__key__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__ecdsa__key__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__handler__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__handler__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__handshake__parameters__ecdsa__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__handshake__parameters__ecdsa__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__handshake__parameters__psk__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__handshake__parameters__psk__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__handshake__parameters__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__handshake__parameters__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__hmac__context__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__hmac__context__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__hs__state__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__hs__state__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__peer__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__peer__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__security__parameters__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structdtls__security__parameters__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structlist.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structlist.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structnetq__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structnetq__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/structsession__t.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/structsession__t.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/sync_off.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/sync_off.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/sync_on.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/sync_on.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/t__list_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/t__list_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/t__list_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/t__list_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/tab_a.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/tab_a.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/tab_b.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/tab_b.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/tab_h.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/tab_h.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/tab_s.png [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/tab_s.png with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/tabs.css [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/tabs.css with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/tinydtls_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/tinydtls_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/tinydtls_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/tinydtls_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/uthash_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/uthash_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/uthash_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/uthash_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/utlist_8h.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/utlist_8h.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/doc/html/utlist_8h_source.html [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/doc/html/utlist_8h_source.html with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/dtls.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/dtls.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/dtls.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/dtls.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/dtls_config.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/dtls_config.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/dtls_config.h.in [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/dtls_config.h.in with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/dtls_debug.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/dtls_debug.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/dtls_debug.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/dtls_debug.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/dtls_time.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/dtls_time.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/dtls_time.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/dtls_time.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/ecc/Makefile.contiki [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/ecc/Makefile.contiki with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/ecc/Makefile.in [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/ecc/Makefile.in with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/ecc/ecc.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/ecc/ecc.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/ecc/ecc.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/ecc/ecc.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/ecc/test_helper.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/ecc/test_helper.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/ecc/test_helper.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/ecc/test_helper.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/ecc/testecc.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/ecc/testecc.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/ecc/testfield.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/ecc/testfield.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/examples/contiki/Makefile.in [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/examples/contiki/Makefile.in with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/examples/contiki/dtls-client.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/examples/contiki/dtls-client.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/examples/contiki/dtls-server.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/examples/contiki/dtls-server.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/global.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/global.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/hmac.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/hmac.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/hmac.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/hmac.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/netq.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/netq.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/netq.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/netq.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/numeric.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/numeric.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/peer.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/peer.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/peer.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/peer.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/platform-specific/Makefile.in [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/platform-specific/Makefile.in with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/platform-specific/config-cc2538dk.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/platform-specific/config-cc2538dk.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/platform-specific/config-econotag.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/platform-specific/config-econotag.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/platform-specific/config-minimal-net.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/platform-specific/config-minimal-net.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/platform-specific/config-sky.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/platform-specific/config-sky.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/platform-specific/config-wismote.h [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/platform-specific/config-wismote.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/platform-specific/platform.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/platform-specific/platform.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/prng.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/prng.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/session.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/session.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/session.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/session.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/Makefile.in [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/Makefile.in with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/README [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/README with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/sha2.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/sha2.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/sha2.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/sha2.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/sha2prog.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/sha2prog.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/sha2speed.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/sha2/sha2speed.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/sha2test.pl [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/sha2test.pl with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector001.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector001.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector001.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector001.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector002.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector002.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector002.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector002.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector003.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector003.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector003.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector003.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector004.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector004.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector004.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector004.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector005.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector005.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector005.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector005.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector006.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector006.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector006.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector006.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector007.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector007.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector007.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector007.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector008.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector008.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector008.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector008.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector009.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector009.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector009.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector009.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector010.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector010.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector010.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector010.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector011.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector011.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector011.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector011.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector012.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector012.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector012.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector012.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector013.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector013.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector013.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector013.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector014.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector014.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector014.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector014.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector015.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector015.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector015.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector015.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector016.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector016.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector016.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector016.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector017.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector017.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector017.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector017.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector018.dat [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector018.dat with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/sha2/testvectors/testvectors/vector018.info [moved from RtSample/local/external/iotivity/iotivity_1.1.0/extlibs/tinydtls/sha2/testvectors/vector018.info with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/state.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/state.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/t_list.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/t_list.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/tests/Makefile.in [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/tests/Makefile.in with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/tests/ccm-test.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/tests/ccm-test.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/tests/ccm-testdata.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/tests/ccm-testdata.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/tests/dtls-client.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/tests/dtls-client.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/tests/dtls-server.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/tests/dtls-server.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/tests/prf-test.c [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/tests/prf-test.c with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/tinydtls.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/tinydtls.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/tinydtls.h.in [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/tinydtls.h.in with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/uthash.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/uthash.h with 100% similarity]
resources/samples/local/external/wakaama/examples/shared/tinydtls/utlist.h [moved from RtSample/local/external/wakaama/examples/shared/tinydtls/utlist.h with 100% similarity]
resources/samples/local/external/wakaama/notice.html [moved from RtSample/local/external/wakaama/notice.html with 100% similarity]
resources/samples/local/external/wakaama/tests/CMakeLists.txt [moved from RtSample/local/external/wakaama/tests/CMakeLists.txt with 100% similarity]
resources/samples/local/external/wakaama/tests/Make.defs [moved from RtSample/local/external/wakaama/tests/Make.defs with 100% similarity]
resources/samples/local/external/wakaama/tests/convert_numbers_test.c [moved from RtSample/local/external/wakaama/tests/convert_numbers_test.c with 100% similarity]
resources/samples/local/external/wakaama/tests/memtest.h [moved from RtSample/local/external/wakaama/tests/memtest.h with 100% similarity]
resources/samples/local/external/wakaama/tests/tests.h [moved from RtSample/local/external/wakaama/tests/tests.h with 100% similarity]
resources/samples/local/external/wakaama/tests/tlv_json_lwm2m_data_test.c [moved from RtSample/local/external/wakaama/tests/tlv_json_lwm2m_data_test.c with 100% similarity]
resources/samples/local/external/wakaama/tests/tlvtests.c [moved from RtSample/local/external/wakaama/tests/tlvtests.c with 100% similarity]
resources/samples/local/external/wakaama/tests/unittests.c [moved from RtSample/local/external/wakaama/tests/unittests.c with 100% similarity]
resources/samples/local/external/wakaama/tests/uritests.c [moved from RtSample/local/external/wakaama/tests/uritests.c with 100% similarity]
resources/samples/local/framework/Makefile [moved from RtSample/local/framework/Makefile with 100% similarity]
resources/samples/local/framework/docs/.keep [moved from RtSample/local/framework/docs/.keep with 100% similarity]
resources/samples/local/framework/include/arastorage/arastorage.h [moved from RtSample/local/framework/include/arastorage/arastorage.h with 100% similarity]
resources/samples/local/framework/include/dm/dm_connectivity.h [moved from RtSample/local/framework/include/dm/dm_connectivity.h with 100% similarity]
resources/samples/local/framework/include/dm/dm_error.h [moved from RtSample/local/framework/include/dm/dm_error.h with 100% similarity]
resources/samples/local/framework/include/dm/dm_lwm2m.h [moved from RtSample/local/framework/include/dm/dm_lwm2m.h with 100% similarity]
resources/samples/local/framework/include/iotbus/iotbus_error.h [moved from RtSample/local/framework/include/iotbus/iotbus_error.h with 100% similarity]
resources/samples/local/framework/include/iotbus/iotbus_gpio.h [moved from RtSample/local/framework/include/iotbus/iotbus_gpio.h with 100% similarity]
resources/samples/local/framework/include/iotbus/iotbus_i2c.h [moved from RtSample/local/framework/include/iotbus/iotbus_i2c.h with 100% similarity]
resources/samples/local/framework/include/iotbus/iotbus_pwm.h [moved from RtSample/local/framework/include/iotbus/iotbus_pwm.h with 100% similarity]
resources/samples/local/framework/include/iotbus/iotbus_spi.h [moved from RtSample/local/framework/include/iotbus/iotbus_spi.h with 100% similarity]
resources/samples/local/framework/include/iotbus/iotbus_uart.h [moved from RtSample/local/framework/include/iotbus/iotbus_uart.h with 100% similarity]
resources/samples/local/framework/src/arastorage/Kconfig [moved from RtSample/local/framework/src/arastorage/Kconfig with 100% similarity]
resources/samples/local/framework/src/arastorage/Make.defs [moved from RtSample/local/framework/src/arastorage/Make.defs with 100% similarity]
resources/samples/local/framework/src/arastorage/aql.h [moved from RtSample/local/framework/src/arastorage/aql.h with 100% similarity]
resources/samples/local/framework/src/arastorage/aql_adt.c [moved from RtSample/local/framework/src/arastorage/aql_adt.c with 100% similarity]
resources/samples/local/framework/src/arastorage/aql_exec.c [moved from RtSample/local/framework/src/arastorage/aql_exec.c with 100% similarity]
resources/samples/local/framework/src/arastorage/aql_lexer.c [moved from RtSample/local/framework/src/arastorage/aql_lexer.c with 100% similarity]
resources/samples/local/framework/src/arastorage/aql_parser.c [moved from RtSample/local/framework/src/arastorage/aql_parser.c with 100% similarity]
resources/samples/local/framework/src/arastorage/arastorage.c [moved from RtSample/local/framework/src/arastorage/arastorage.c with 100% similarity]
resources/samples/local/framework/src/arastorage/attribute.h [moved from RtSample/local/framework/src/arastorage/attribute.h with 100% similarity]
resources/samples/local/framework/src/arastorage/cursor.c [moved from RtSample/local/framework/src/arastorage/cursor.c with 100% similarity]
resources/samples/local/framework/src/arastorage/db_debug.h [moved from RtSample/local/framework/src/arastorage/db_debug.h with 100% similarity]
resources/samples/local/framework/src/arastorage/db_options.h [moved from RtSample/local/framework/src/arastorage/db_options.h with 100% similarity]
resources/samples/local/framework/src/arastorage/index.h [moved from RtSample/local/framework/src/arastorage/index.h with 100% similarity]
resources/samples/local/framework/src/arastorage/index_bplustree.c [moved from RtSample/local/framework/src/arastorage/index_bplustree.c with 100% similarity]
resources/samples/local/framework/src/arastorage/index_inline.c [moved from RtSample/local/framework/src/arastorage/index_inline.c with 100% similarity]
resources/samples/local/framework/src/arastorage/index_manager.c [moved from RtSample/local/framework/src/arastorage/index_manager.c with 100% similarity]
resources/samples/local/framework/src/arastorage/list.c [moved from RtSample/local/framework/src/arastorage/list.c with 100% similarity]
resources/samples/local/framework/src/arastorage/list.h [moved from RtSample/local/framework/src/arastorage/list.h with 100% similarity]
resources/samples/local/framework/src/arastorage/lvm.c [moved from RtSample/local/framework/src/arastorage/lvm.c with 100% similarity]
resources/samples/local/framework/src/arastorage/lvm.h [moved from RtSample/local/framework/src/arastorage/lvm.h with 100% similarity]
resources/samples/local/framework/src/arastorage/memb.c [moved from RtSample/local/framework/src/arastorage/memb.c with 100% similarity]
resources/samples/local/framework/src/arastorage/memb.h [moved from RtSample/local/framework/src/arastorage/memb.h with 100% similarity]
resources/samples/local/framework/src/arastorage/random.c [moved from RtSample/local/framework/src/arastorage/random.c with 100% similarity]
resources/samples/local/framework/src/arastorage/random.h [moved from RtSample/local/framework/src/arastorage/random.h with 100% similarity]
resources/samples/local/framework/src/arastorage/relation.c [moved from RtSample/local/framework/src/arastorage/relation.c with 100% similarity]
resources/samples/local/framework/src/arastorage/relation.h [moved from RtSample/local/framework/src/arastorage/relation.h with 100% similarity]
resources/samples/local/framework/src/arastorage/result.c [moved from RtSample/local/framework/src/arastorage/result.c with 100% similarity]
resources/samples/local/framework/src/arastorage/result.h [moved from RtSample/local/framework/src/arastorage/result.h with 100% similarity]
resources/samples/local/framework/src/arastorage/rw_locks.c [moved from RtSample/local/framework/src/arastorage/rw_locks.c with 100% similarity]
resources/samples/local/framework/src/arastorage/rw_locks.h [moved from RtSample/local/framework/src/arastorage/rw_locks.h with 100% similarity]
resources/samples/local/framework/src/arastorage/storage.h [moved from RtSample/local/framework/src/arastorage/storage.h with 100% similarity]
resources/samples/local/framework/src/arastorage/storage_abstraction.c [moved from RtSample/local/framework/src/arastorage/storage_abstraction.c with 100% similarity]
resources/samples/local/framework/src/arastorage/storage_interface.c [moved from RtSample/local/framework/src/arastorage/storage_interface.c with 100% similarity]
resources/samples/local/framework/src/dm/Make.defs [moved from RtSample/local/framework/src/dm/Make.defs with 100% similarity]
resources/samples/local/framework/src/dm/arch/sidk_s5jt200/dm_connectivity.c [moved from RtSample/local/framework/src/dm/arch/sidk_s5jt200/dm_connectivity.c with 100% similarity]
resources/samples/local/framework/src/dm/dm_common_interface.c [moved from RtSample/local/framework/src/dm/dm_common_interface.c with 100% similarity]
resources/samples/local/framework/src/dm/dm_common_interface.h [moved from RtSample/local/framework/src/dm/dm_common_interface.h with 100% similarity]
resources/samples/local/framework/src/dm/dm_connectivity.c [moved from RtSample/local/framework/src/dm/dm_connectivity.c with 100% similarity]
resources/samples/local/framework/src/dm/dm_lwm2m.c [moved from RtSample/local/framework/src/dm/dm_lwm2m.c with 100% similarity]
resources/samples/local/framework/src/iotbus/Make.defs [moved from RtSample/local/framework/src/iotbus/Make.defs with 100% similarity]
resources/samples/local/framework/src/iotbus/iotapi_evt_handler.c [moved from RtSample/local/framework/src/iotbus/iotapi_evt_handler.c with 100% similarity]
resources/samples/local/framework/src/iotbus/iotapi_evt_handler.h [moved from RtSample/local/framework/src/iotbus/iotapi_evt_handler.h with 100% similarity]
resources/samples/local/framework/src/iotbus/iotbus_gpio.c [moved from RtSample/local/framework/src/iotbus/iotbus_gpio.c with 100% similarity]
resources/samples/local/framework/src/iotbus/iotbus_i2c.c [moved from RtSample/local/framework/src/iotbus/iotbus_i2c.c with 100% similarity]
resources/samples/local/framework/src/iotbus/iotbus_pwm.c [moved from RtSample/local/framework/src/iotbus/iotbus_pwm.c with 100% similarity]
resources/samples/local/framework/src/iotbus/iotbus_spi.c [moved from RtSample/local/framework/src/iotbus/iotbus_spi.c with 100% similarity]
resources/samples/local/framework/src/iotbus/iotbus_uart.c [moved from RtSample/local/framework/src/iotbus/iotbus_uart.c with 100% similarity]
resources/samples/local/lib/libc/.gitignore [moved from RtSample/local/os/mm/.gitignore with 100% similarity]
resources/samples/local/lib/libc/Kconfig [moved from RtSample/local/lib/libc/Kconfig with 100% similarity]
resources/samples/local/lib/libc/Makefile [moved from RtSample/local/lib/libc/Makefile with 100% similarity]
resources/samples/local/lib/libc/README.txt [moved from RtSample/local/lib/libc/README.txt with 100% similarity]
resources/samples/local/lib/libc/aio/Make.defs [moved from RtSample/local/lib/libc/aio/Make.defs with 100% similarity]
resources/samples/local/lib/libc/aio/aio.h [moved from RtSample/local/lib/libc/aio/aio.h with 100% similarity]
resources/samples/local/lib/libc/aio/aio_error.c [moved from RtSample/local/lib/libc/aio/aio_error.c with 100% similarity]
resources/samples/local/lib/libc/aio/aio_return.c [moved from RtSample/local/lib/libc/aio/aio_return.c with 100% similarity]
resources/samples/local/lib/libc/aio/aio_suspend.c [moved from RtSample/local/lib/libc/aio/aio_suspend.c with 100% similarity]
resources/samples/local/lib/libc/aio/lio_listio.c [moved from RtSample/local/lib/libc/aio/lio_listio.c with 100% similarity]
resources/samples/local/lib/libc/bin/.gitignore [moved from RtSample/local/os/mm/ubin/.gitignore with 100% similarity]
resources/samples/local/lib/libc/bin/Makefile [moved from RtSample/local/apps/platform/bin/Makefile with 100% similarity]
resources/samples/local/lib/libc/dirent/Make.defs [moved from RtSample/local/lib/libc/dirent/Make.defs with 100% similarity]
resources/samples/local/lib/libc/dirent/lib_readdirr.c [moved from RtSample/local/lib/libc/dirent/lib_readdirr.c with 100% similarity]
resources/samples/local/lib/libc/dirent/lib_telldir.c [moved from RtSample/local/lib/libc/dirent/lib_telldir.c with 100% similarity]
resources/samples/local/lib/libc/fixedmath/Make.defs [moved from RtSample/local/lib/libc/fixedmath/Make.defs with 100% similarity]
resources/samples/local/lib/libc/fixedmath/lib_b16atan2.c [moved from RtSample/local/lib/libc/fixedmath/lib_b16atan2.c with 100% similarity]
resources/samples/local/lib/libc/fixedmath/lib_b16cos.c [moved from RtSample/local/lib/libc/fixedmath/lib_b16cos.c with 100% similarity]
resources/samples/local/lib/libc/fixedmath/lib_b16sin.c [moved from RtSample/local/lib/libc/fixedmath/lib_b16sin.c with 100% similarity]
resources/samples/local/lib/libc/fixedmath/lib_fixedmath.c [moved from RtSample/local/lib/libc/fixedmath/lib_fixedmath.c with 100% similarity]
resources/samples/local/lib/libc/kbin/.gitignore [moved from RtSample/local/os/mm/kbin/.gitignore with 100% similarity]
resources/samples/local/lib/libc/kbin/Makefile [moved from RtSample/local/lib/libc/kbin/Makefile with 100% similarity]
resources/samples/local/lib/libc/lib_internal.h [moved from RtSample/local/lib/libc/lib_internal.h with 100% similarity]
resources/samples/local/lib/libc/libc.csv [moved from RtSample/local/lib/libc/libc.csv with 100% similarity]
resources/samples/local/lib/libc/libgen/Make.defs [moved from RtSample/local/lib/libc/libgen/Make.defs with 100% similarity]
resources/samples/local/lib/libc/libgen/lib_basename.c [moved from RtSample/local/lib/libc/libgen/lib_basename.c with 100% similarity]
resources/samples/local/lib/libc/libgen/lib_dirname.c [moved from RtSample/local/lib/libc/libgen/lib_dirname.c with 100% similarity]
resources/samples/local/lib/libc/math.csv [moved from RtSample/local/lib/libc/math.csv with 100% similarity]
resources/samples/local/lib/libc/math/Kconfig [moved from RtSample/local/lib/libc/math/Kconfig with 100% similarity]
resources/samples/local/lib/libc/math/Make.defs [moved from RtSample/local/lib/libc/math/Make.defs with 100% similarity]
resources/samples/local/lib/libc/math/lib_acos.c [moved from RtSample/local/lib/libc/math/lib_acos.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_acosf.c [moved from RtSample/local/lib/libc/math/lib_acosf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_acosh.c [moved from RtSample/local/lib/libc/math/lib_acosh.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_acoshf.c [moved from RtSample/local/lib/libc/math/lib_acoshf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_acoshl.c [moved from RtSample/local/lib/libc/math/lib_acoshl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_acosl.c [moved from RtSample/local/lib/libc/math/lib_acosl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_asin.c [moved from RtSample/local/lib/libc/math/lib_asin.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_asinf.c [moved from RtSample/local/lib/libc/math/lib_asinf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_asinh.c [moved from RtSample/local/lib/libc/math/lib_asinh.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_asinhf.c [moved from RtSample/local/lib/libc/math/lib_asinhf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_asinhl.c [moved from RtSample/local/lib/libc/math/lib_asinhl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_asinl.c [moved from RtSample/local/lib/libc/math/lib_asinl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_atan.c [moved from RtSample/local/lib/libc/math/lib_atan.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_atan2.c [moved from RtSample/local/lib/libc/math/lib_atan2.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_atan2f.c [moved from RtSample/local/lib/libc/math/lib_atan2f.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_atan2l.c [moved from RtSample/local/lib/libc/math/lib_atan2l.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_atanf.c [moved from RtSample/local/lib/libc/math/lib_atanf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_atanh.c [moved from RtSample/local/lib/libc/math/lib_atanh.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_atanhf.c [moved from RtSample/local/lib/libc/math/lib_atanhf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_atanhl.c [moved from RtSample/local/lib/libc/math/lib_atanhl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_atanl.c [moved from RtSample/local/lib/libc/math/lib_atanl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_ceil.c [moved from RtSample/local/lib/libc/math/lib_ceil.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_ceilf.c [moved from RtSample/local/lib/libc/math/lib_ceilf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_ceill.c [moved from RtSample/local/lib/libc/math/lib_ceill.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_copysign.c [moved from RtSample/local/lib/libc/math/lib_copysign.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_copysignf.c [moved from RtSample/local/lib/libc/math/lib_copysignf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_copysignl.c [moved from RtSample/local/lib/libc/math/lib_copysignl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_cos.c [moved from RtSample/local/lib/libc/math/lib_cos.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_cosf.c [moved from RtSample/local/lib/libc/math/lib_cosf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_cosh.c [moved from RtSample/local/lib/libc/math/lib_cosh.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_coshf.c [moved from RtSample/local/lib/libc/math/lib_coshf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_coshl.c [moved from RtSample/local/lib/libc/math/lib_coshl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_cosl.c [moved from RtSample/local/lib/libc/math/lib_cosl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_erf.c [moved from RtSample/local/lib/libc/math/lib_erf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_erff.c [moved from RtSample/local/lib/libc/math/lib_erff.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_erfl.c [moved from RtSample/local/lib/libc/math/lib_erfl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_exp.c [moved from RtSample/local/lib/libc/math/lib_exp.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_expf.c [moved from RtSample/local/lib/libc/math/lib_expf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_expl.c [moved from RtSample/local/lib/libc/math/lib_expl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_fabs.c [moved from RtSample/local/lib/libc/math/lib_fabs.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_fabsf.c [moved from RtSample/local/lib/libc/math/lib_fabsf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_fabsl.c [moved from RtSample/local/lib/libc/math/lib_fabsl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_floor.c [moved from RtSample/local/lib/libc/math/lib_floor.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_floorf.c [moved from RtSample/local/lib/libc/math/lib_floorf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_floorl.c [moved from RtSample/local/lib/libc/math/lib_floorl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_fmod.c [moved from RtSample/local/lib/libc/math/lib_fmod.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_fmodf.c [moved from RtSample/local/lib/libc/math/lib_fmodf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_fmodl.c [moved from RtSample/local/lib/libc/math/lib_fmodl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_frexp.c [moved from RtSample/local/lib/libc/math/lib_frexp.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_frexpf.c [moved from RtSample/local/lib/libc/math/lib_frexpf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_frexpl.c [moved from RtSample/local/lib/libc/math/lib_frexpl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_ldexp.c [moved from RtSample/local/lib/libc/math/lib_ldexp.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_ldexpf.c [moved from RtSample/local/lib/libc/math/lib_ldexpf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_ldexpl.c [moved from RtSample/local/lib/libc/math/lib_ldexpl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_libexpi.c [moved from RtSample/local/lib/libc/math/lib_libexpi.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_libsqrtapprox.c [moved from RtSample/local/lib/libc/math/lib_libsqrtapprox.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_log.c [moved from RtSample/local/lib/libc/math/lib_log.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_log10.c [moved from RtSample/local/lib/libc/math/lib_log10.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_log10f.c [moved from RtSample/local/lib/libc/math/lib_log10f.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_log10l.c [moved from RtSample/local/lib/libc/math/lib_log10l.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_log2.c [moved from RtSample/local/lib/libc/math/lib_log2.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_log2f.c [moved from RtSample/local/lib/libc/math/lib_log2f.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_log2l.c [moved from RtSample/local/lib/libc/math/lib_log2l.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_logf.c [moved from RtSample/local/lib/libc/math/lib_logf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_logl.c [moved from RtSample/local/lib/libc/math/lib_logl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_modf.c [moved from RtSample/local/lib/libc/math/lib_modf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_modff.c [moved from RtSample/local/lib/libc/math/lib_modff.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_modfl.c [moved from RtSample/local/lib/libc/math/lib_modfl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_pow.c [moved from RtSample/local/lib/libc/math/lib_pow.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_powf.c [moved from RtSample/local/lib/libc/math/lib_powf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_powl.c [moved from RtSample/local/lib/libc/math/lib_powl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_rint.c [moved from RtSample/local/lib/libc/math/lib_rint.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_rintf.c [moved from RtSample/local/lib/libc/math/lib_rintf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_rintl.c [moved from RtSample/local/lib/libc/math/lib_rintl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_round.c [moved from RtSample/local/lib/libc/math/lib_round.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_roundf.c [moved from RtSample/local/lib/libc/math/lib_roundf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_roundl.c [moved from RtSample/local/lib/libc/math/lib_roundl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_sin.c [moved from RtSample/local/lib/libc/math/lib_sin.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_sinf.c [moved from RtSample/local/lib/libc/math/lib_sinf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_sinh.c [moved from RtSample/local/lib/libc/math/lib_sinh.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_sinhf.c [moved from RtSample/local/lib/libc/math/lib_sinhf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_sinhl.c [moved from RtSample/local/lib/libc/math/lib_sinhl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_sinl.c [moved from RtSample/local/lib/libc/math/lib_sinl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_sqrt.c [moved from RtSample/local/lib/libc/math/lib_sqrt.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_sqrtf.c [moved from RtSample/local/lib/libc/math/lib_sqrtf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_sqrtl.c [moved from RtSample/local/lib/libc/math/lib_sqrtl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_tan.c [moved from RtSample/local/lib/libc/math/lib_tan.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_tanf.c [moved from RtSample/local/lib/libc/math/lib_tanf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_tanh.c [moved from RtSample/local/lib/libc/math/lib_tanh.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_tanhf.c [moved from RtSample/local/lib/libc/math/lib_tanhf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_tanhl.c [moved from RtSample/local/lib/libc/math/lib_tanhl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_tanl.c [moved from RtSample/local/lib/libc/math/lib_tanl.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_trunc.c [moved from RtSample/local/lib/libc/math/lib_trunc.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_truncf.c [moved from RtSample/local/lib/libc/math/lib_truncf.c with 100% similarity]
resources/samples/local/lib/libc/math/lib_truncl.c [moved from RtSample/local/lib/libc/math/lib_truncl.c with 100% similarity]
resources/samples/local/lib/libc/misc/Make.defs [moved from RtSample/local/lib/libc/misc/Make.defs with 100% similarity]
resources/samples/local/lib/libc/misc/lib_crc16.c [moved from RtSample/local/lib/libc/misc/lib_crc16.c with 100% similarity]
resources/samples/local/lib/libc/misc/lib_crc32.c [moved from RtSample/local/lib/libc/misc/lib_crc32.c with 100% similarity]
resources/samples/local/lib/libc/misc/lib_crc8.c [moved from RtSample/local/lib/libc/misc/lib_crc8.c with 100% similarity]
resources/samples/local/lib/libc/misc/lib_dbg.c [moved from RtSample/local/lib/libc/misc/lib_dbg.c with 100% similarity]
resources/samples/local/lib/libc/misc/lib_dumpbuffer.c [moved from RtSample/local/lib/libc/misc/lib_dumpbuffer.c with 100% similarity]
resources/samples/local/lib/libc/misc/lib_filesem.c [moved from RtSample/local/lib/libc/misc/lib_filesem.c with 100% similarity]
resources/samples/local/lib/libc/misc/lib_ioctl.c [moved from RtSample/local/lib/libc/misc/lib_ioctl.c with 100% similarity]
resources/samples/local/lib/libc/misc/lib_match.c [moved from RtSample/local/lib/libc/misc/lib_match.c with 100% similarity]
resources/samples/local/lib/libc/misc/lib_sendfile.c [moved from RtSample/local/lib/libc/misc/lib_sendfile.c with 100% similarity]
resources/samples/local/lib/libc/misc/lib_stream.c [moved from RtSample/local/lib/libc/misc/lib_stream.c with 100% similarity]
resources/samples/local/lib/libc/misc/lib_streamsem.c [moved from RtSample/local/lib/libc/misc/lib_streamsem.c with 100% similarity]
resources/samples/local/lib/libc/mqueue/Make.defs [moved from RtSample/local/lib/libc/mqueue/Make.defs with 100% similarity]
resources/samples/local/lib/libc/mqueue/mq_getattr.c [moved from RtSample/local/lib/libc/mqueue/mq_getattr.c with 100% similarity]
resources/samples/local/lib/libc/mqueue/mq_setattr.c [moved from RtSample/local/lib/libc/mqueue/mq_setattr.c with 100% similarity]
resources/samples/local/lib/libc/net/Make.defs [moved from RtSample/local/lib/libc/net/Make.defs with 100% similarity]
resources/samples/local/lib/libc/net/lib_addrconfig.c [moved from RtSample/local/lib/libc/net/lib_addrconfig.c with 100% similarity]
resources/samples/local/lib/libc/net/lib_addroute.c [moved from RtSample/local/lib/libc/net/lib_addroute.c with 100% similarity]
resources/samples/local/lib/libc/net/lib_delroute.c [moved from RtSample/local/lib/libc/net/lib_delroute.c with 100% similarity]
resources/samples/local/lib/libc/net/lib_etherntoa.c [moved from RtSample/local/lib/libc/net/lib_etherntoa.c with 100% similarity]
resources/samples/local/lib/libc/net/lib_htonl.c [moved from RtSample/local/lib/libc/net/lib_htonl.c with 100% similarity]
resources/samples/local/lib/libc/net/lib_htons.c [moved from RtSample/local/lib/libc/net/lib_htons.c with 100% similarity]
resources/samples/local/lib/libc/net/lib_inetaddr.c [moved from RtSample/local/lib/libc/net/lib_inetaddr.c with 100% similarity]
resources/samples/local/lib/libc/net/lib_inetntoa.c [moved from RtSample/local/lib/libc/net/lib_inetntoa.c with 100% similarity]
resources/samples/local/lib/libc/net/lib_inetntop.c [moved from RtSample/local/lib/libc/net/lib_inetntop.c with 100% similarity]
resources/samples/local/lib/libc/net/lib_inetpton.c [moved from RtSample/local/lib/libc/net/lib_inetpton.c with 100% similarity]
resources/samples/local/lib/libc/net/lib_shutdown.c [moved from RtSample/local/lib/libc/net/lib_shutdown.c with 100% similarity]
resources/samples/local/lib/libc/netdb/Make.defs [moved from RtSample/local/lib/libc/netdb/Make.defs with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_dns.h [moved from RtSample/local/lib/libc/netdb/lib_dns.h with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_dnsaddserver.c [moved from RtSample/local/lib/libc/netdb/lib_dnsaddserver.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_dnsbind.c [moved from RtSample/local/lib/libc/netdb/lib_dnsbind.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_dnscache.c [moved from RtSample/local/lib/libc/netdb/lib_dnscache.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_dnsforeach.c [moved from RtSample/local/lib/libc/netdb/lib_dnsforeach.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_dnsinit.c [moved from RtSample/local/lib/libc/netdb/lib_dnsinit.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_dnsquery.c [moved from RtSample/local/lib/libc/netdb/lib_dnsquery.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_getaddrinfo.c [moved from RtSample/local/lib/libc/netdb/lib_getaddrinfo.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_gethostbyaddr.c [moved from RtSample/local/lib/libc/netdb/lib_gethostbyaddr.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_gethostbyaddrr.c [moved from RtSample/local/lib/libc/netdb/lib_gethostbyaddrr.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_gethostbyname.c [moved from RtSample/local/lib/libc/netdb/lib_gethostbyname.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_gethostbynamer.c [moved from RtSample/local/lib/libc/netdb/lib_gethostbynamer.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_getnameinfo.c [moved from RtSample/local/lib/libc/netdb/lib_getnameinfo.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_getservbyname.c [moved from RtSample/local/lib/libc/netdb/lib_getservbyname.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_getservent.c [moved from RtSample/local/lib/libc/netdb/lib_getservent.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_netdb.c [moved from RtSample/local/lib/libc/netdb/lib_netdb.c with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_netdb.h [moved from RtSample/local/lib/libc/netdb/lib_netdb.h with 100% similarity]
resources/samples/local/lib/libc/netdb/lib_parsehostfile.c [moved from RtSample/local/lib/libc/netdb/lib_parsehostfile.c with 100% similarity]
resources/samples/local/lib/libc/pthread/Make.defs [moved from RtSample/local/lib/libc/pthread/Make.defs with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_attrdestroy.c [moved from RtSample/local/lib/libc/pthread/pthread_attrdestroy.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_attrgetinheritsched.c [moved from RtSample/local/lib/libc/pthread/pthread_attrgetinheritsched.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_attrgetschedparam.c [moved from RtSample/local/lib/libc/pthread/pthread_attrgetschedparam.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_attrgetschedpolicy.c [moved from RtSample/local/lib/libc/pthread/pthread_attrgetschedpolicy.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_attrgetstacksize.c [moved from RtSample/local/lib/libc/pthread/pthread_attrgetstacksize.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_attrinit.c [moved from RtSample/local/lib/libc/pthread/pthread_attrinit.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_attrsetinheritsched.c [moved from RtSample/local/lib/libc/pthread/pthread_attrsetinheritsched.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_attrsetschedparam.c [moved from RtSample/local/lib/libc/pthread/pthread_attrsetschedparam.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_attrsetschedpolicy.c [moved from RtSample/local/lib/libc/pthread/pthread_attrsetschedpolicy.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_attrsetstacksize.c [moved from RtSample/local/lib/libc/pthread/pthread_attrsetstacksize.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_barrierattrdestroy.c [moved from RtSample/local/lib/libc/pthread/pthread_barrierattrdestroy.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_barrierattrgetpshared.c [moved from RtSample/local/lib/libc/pthread/pthread_barrierattrgetpshared.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_barrierattrinit.c [moved from RtSample/local/lib/libc/pthread/pthread_barrierattrinit.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_barrierattrsetpshared.c [moved from RtSample/local/lib/libc/pthread/pthread_barrierattrsetpshared.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_condattrdestroy.c [moved from RtSample/local/lib/libc/pthread/pthread_condattrdestroy.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_condattrinit.c [moved from RtSample/local/lib/libc/pthread/pthread_condattrinit.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_condattrsetclock.c [moved from RtSample/local/lib/libc/pthread/pthread_condattrsetclock.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_mutexattrdestroy.c [moved from RtSample/local/lib/libc/pthread/pthread_mutexattrdestroy.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_mutexattrgetpshared.c [moved from RtSample/local/lib/libc/pthread/pthread_mutexattrgetpshared.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_mutexattrgettype.c [moved from RtSample/local/lib/libc/pthread/pthread_mutexattrgettype.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_mutexattrinit.c [moved from RtSample/local/lib/libc/pthread/pthread_mutexattrinit.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_mutexattrsetpshared.c [moved from RtSample/local/lib/libc/pthread/pthread_mutexattrsetpshared.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_mutexattrsettype.c [moved from RtSample/local/lib/libc/pthread/pthread_mutexattrsettype.c with 100% similarity]
resources/samples/local/lib/libc/pthread/pthread_startup.c [moved from RtSample/local/lib/libc/pthread/pthread_startup.c with 100% similarity]
resources/samples/local/lib/libc/queue/Make.defs [moved from RtSample/local/lib/libc/queue/Make.defs with 100% similarity]
resources/samples/local/lib/libc/queue/dq_addafter.c [moved from RtSample/local/lib/libc/queue/dq_addafter.c with 100% similarity]
resources/samples/local/lib/libc/queue/dq_addbefore.c [moved from RtSample/local/lib/libc/queue/dq_addbefore.c with 100% similarity]
resources/samples/local/lib/libc/queue/dq_addfirst.c [moved from RtSample/local/lib/libc/queue/dq_addfirst.c with 100% similarity]
resources/samples/local/lib/libc/queue/dq_addlast.c [moved from RtSample/local/lib/libc/queue/dq_addlast.c with 100% similarity]
resources/samples/local/lib/libc/queue/dq_rem.c [moved from RtSample/local/lib/libc/queue/dq_rem.c with 100% similarity]
resources/samples/local/lib/libc/queue/dq_remfirst.c [moved from RtSample/local/lib/libc/queue/dq_remfirst.c with 100% similarity]
resources/samples/local/lib/libc/queue/dq_remlast.c [moved from RtSample/local/lib/libc/queue/dq_remlast.c with 100% similarity]
resources/samples/local/lib/libc/queue/sq_addafter.c [moved from RtSample/local/lib/libc/queue/sq_addafter.c with 100% similarity]
resources/samples/local/lib/libc/queue/sq_addfirst.c [moved from RtSample/local/lib/libc/queue/sq_addfirst.c with 100% similarity]
resources/samples/local/lib/libc/queue/sq_addlast.c [moved from RtSample/local/lib/libc/queue/sq_addlast.c with 100% similarity]
resources/samples/local/lib/libc/queue/sq_rem.c [moved from RtSample/local/lib/libc/queue/sq_rem.c with 100% similarity]
resources/samples/local/lib/libc/queue/sq_remafter.c [moved from RtSample/local/lib/libc/queue/sq_remafter.c with 100% similarity]
resources/samples/local/lib/libc/queue/sq_remfirst.c [moved from RtSample/local/lib/libc/queue/sq_remfirst.c with 100% similarity]
resources/samples/local/lib/libc/queue/sq_remlast.c [moved from RtSample/local/lib/libc/queue/sq_remlast.c with 100% similarity]
resources/samples/local/lib/libc/sched/Make.defs [moved from RtSample/local/lib/libc/sched/Make.defs with 100% similarity]
resources/samples/local/lib/libc/sched/sched_getprioritymax.c [moved from RtSample/local/lib/libc/sched/sched_getprioritymax.c with 100% similarity]
resources/samples/local/lib/libc/sched/sched_getprioritymin.c [moved from RtSample/local/lib/libc/sched/sched_getprioritymin.c with 100% similarity]
resources/samples/local/lib/libc/sched/task_startup.c [moved from RtSample/local/lib/libc/sched/task_startup.c with 100% similarity]
resources/samples/local/lib/libc/semaphore/Make.defs [moved from RtSample/local/lib/libc/semaphore/Make.defs with 100% similarity]
resources/samples/local/lib/libc/semaphore/sem_getvalue.c [moved from RtSample/local/lib/libc/semaphore/sem_getvalue.c with 100% similarity]
resources/samples/local/lib/libc/semaphore/sem_init.c [moved from RtSample/local/lib/libc/semaphore/sem_init.c with 100% similarity]
resources/samples/local/lib/libc/signal/Make.defs [moved from RtSample/local/lib/libc/signal/Make.defs with 100% similarity]
resources/samples/local/lib/libc/signal/sig_addset.c [moved from RtSample/local/lib/libc/signal/sig_addset.c with 100% similarity]
resources/samples/local/lib/libc/signal/sig_delset.c [moved from RtSample/local/lib/libc/signal/sig_delset.c with 100% similarity]
resources/samples/local/lib/libc/signal/sig_emptyset.c [moved from RtSample/local/lib/libc/signal/sig_emptyset.c with 100% similarity]
resources/samples/local/lib/libc/signal/sig_fillset.c [moved from RtSample/local/lib/libc/signal/sig_fillset.c with 100% similarity]
resources/samples/local/lib/libc/signal/sig_hold.c [moved from RtSample/local/lib/libc/signal/sig_hold.c with 100% similarity]
resources/samples/local/lib/libc/signal/sig_ismember.c [moved from RtSample/local/lib/libc/signal/sig_ismember.c with 100% similarity]
resources/samples/local/lib/libc/signal/sig_relse.c [moved from RtSample/local/lib/libc/signal/sig_relse.c with 100% similarity]
resources/samples/local/lib/libc/spawn/Make.defs [moved from RtSample/local/lib/libc/spawn/Make.defs with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psa_dump.c [moved from RtSample/local/lib/libc/spawn/lib_psa_dump.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psa_getflags.c [moved from RtSample/local/lib/libc/spawn/lib_psa_getflags.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psa_getschedparam.c [moved from RtSample/local/lib/libc/spawn/lib_psa_getschedparam.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psa_getschedpolicy.c [moved from RtSample/local/lib/libc/spawn/lib_psa_getschedpolicy.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psa_getsigmask.c [moved from RtSample/local/lib/libc/spawn/lib_psa_getsigmask.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psa_getstacksize.c [moved from RtSample/local/lib/libc/spawn/lib_psa_getstacksize.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psa_init.c [moved from RtSample/local/lib/libc/spawn/lib_psa_init.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psa_setflags.c [moved from RtSample/local/lib/libc/spawn/lib_psa_setflags.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psa_setschedparam.c [moved from RtSample/local/lib/libc/spawn/lib_psa_setschedparam.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psa_setschedpolicy.c [moved from RtSample/local/lib/libc/spawn/lib_psa_setschedpolicy.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psa_setsigmask.c [moved from RtSample/local/lib/libc/spawn/lib_psa_setsigmask.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psa_setstacksize.c [moved from RtSample/local/lib/libc/spawn/lib_psa_setstacksize.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psfa_addaction.c [moved from RtSample/local/lib/libc/spawn/lib_psfa_addaction.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psfa_addclose.c [moved from RtSample/local/lib/libc/spawn/lib_psfa_addclose.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psfa_adddup2.c [moved from RtSample/local/lib/libc/spawn/lib_psfa_adddup2.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psfa_addopen.c [moved from RtSample/local/lib/libc/spawn/lib_psfa_addopen.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psfa_destroy.c [moved from RtSample/local/lib/libc/spawn/lib_psfa_destroy.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psfa_dump.c [moved from RtSample/local/lib/libc/spawn/lib_psfa_dump.c with 100% similarity]
resources/samples/local/lib/libc/spawn/lib_psfa_init.c [moved from RtSample/local/lib/libc/spawn/lib_psfa_init.c with 100% similarity]
resources/samples/local/lib/libc/stdio/Make.defs [moved from RtSample/local/lib/libc/stdio/Make.defs with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_asprintf.c [moved from RtSample/local/lib/libc/stdio/lib_asprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_avsprintf.c [moved from RtSample/local/lib/libc/stdio/lib_avsprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_clearerr.c [moved from RtSample/local/lib/libc/stdio/lib_clearerr.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_dprintf.c [moved from RtSample/local/lib/libc/stdio/lib_dprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_dtoa.c [moved from RtSample/local/lib/libc/stdio/lib_dtoa.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fclose.c [moved from RtSample/local/lib/libc/stdio/lib_fclose.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_feof.c [moved from RtSample/local/lib/libc/stdio/lib_feof.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_ferror.c [moved from RtSample/local/lib/libc/stdio/lib_ferror.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fflush.c [moved from RtSample/local/lib/libc/stdio/lib_fflush.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fgetc.c [moved from RtSample/local/lib/libc/stdio/lib_fgetc.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fgetpos.c [moved from RtSample/local/lib/libc/stdio/lib_fgetpos.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fgets.c [moved from RtSample/local/lib/libc/stdio/lib_fgets.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fileno.c [moved from RtSample/local/lib/libc/stdio/lib_fileno.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fopen.c [moved from RtSample/local/lib/libc/stdio/lib_fopen.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fprintf.c [moved from RtSample/local/lib/libc/stdio/lib_fprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fputc.c [moved from RtSample/local/lib/libc/stdio/lib_fputc.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fputs.c [moved from RtSample/local/lib/libc/stdio/lib_fputs.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fread.c [moved from RtSample/local/lib/libc/stdio/lib_fread.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fseek.c [moved from RtSample/local/lib/libc/stdio/lib_fseek.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fsetpos.c [moved from RtSample/local/lib/libc/stdio/lib_fsetpos.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_ftell.c [moved from RtSample/local/lib/libc/stdio/lib_ftell.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_fwrite.c [moved from RtSample/local/lib/libc/stdio/lib_fwrite.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_gets.c [moved from RtSample/local/lib/libc/stdio/lib_gets.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_gets_s.c [moved from RtSample/local/lib/libc/stdio/lib_gets_s.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_libdtoa.c [moved from RtSample/local/lib/libc/stdio/lib_libdtoa.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_libfflush.c [moved from RtSample/local/lib/libc/stdio/lib_libfflush.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_libfgets.c [moved from RtSample/local/lib/libc/stdio/lib_libfgets.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_libflushall.c [moved from RtSample/local/lib/libc/stdio/lib_libflushall.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_libfread.c [moved from RtSample/local/lib/libc/stdio/lib_libfread.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_libfwrite.c [moved from RtSample/local/lib/libc/stdio/lib_libfwrite.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_libnoflush.c [moved from RtSample/local/lib/libc/stdio/lib_libnoflush.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_libsnoflush.c [moved from RtSample/local/lib/libc/stdio/lib_libsnoflush.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_libsprintf.c [moved from RtSample/local/lib/libc/stdio/lib_libsprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_libvsprintf.c [moved from RtSample/local/lib/libc/stdio/lib_libvsprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_lowinstream.c [moved from RtSample/local/lib/libc/stdio/lib_lowinstream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_lowoutstream.c [moved from RtSample/local/lib/libc/stdio/lib_lowoutstream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_meminstream.c [moved from RtSample/local/lib/libc/stdio/lib_meminstream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_memoutstream.c [moved from RtSample/local/lib/libc/stdio/lib_memoutstream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_memsistream.c [moved from RtSample/local/lib/libc/stdio/lib_memsistream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_memsostream.c [moved from RtSample/local/lib/libc/stdio/lib_memsostream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_nullinstream.c [moved from RtSample/local/lib/libc/stdio/lib_nullinstream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_nulloutstream.c [moved from RtSample/local/lib/libc/stdio/lib_nulloutstream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_perror.c [moved from RtSample/local/lib/libc/stdio/lib_perror.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_printf.c [moved from RtSample/local/lib/libc/stdio/lib_printf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_puts.c [moved from RtSample/local/lib/libc/stdio/lib_puts.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_rawinstream.c [moved from RtSample/local/lib/libc/stdio/lib_rawinstream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_rawoutstream.c [moved from RtSample/local/lib/libc/stdio/lib_rawoutstream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_rawsistream.c [moved from RtSample/local/lib/libc/stdio/lib_rawsistream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_rawsostream.c [moved from RtSample/local/lib/libc/stdio/lib_rawsostream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_rdflush.c [moved from RtSample/local/lib/libc/stdio/lib_rdflush.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_snprintf.c [moved from RtSample/local/lib/libc/stdio/lib_snprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_sprintf.c [moved from RtSample/local/lib/libc/stdio/lib_sprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_sscanf.c [moved from RtSample/local/lib/libc/stdio/lib_sscanf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_stdinstream.c [moved from RtSample/local/lib/libc/stdio/lib_stdinstream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_stdoutstream.c [moved from RtSample/local/lib/libc/stdio/lib_stdoutstream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_stdsistream.c [moved from RtSample/local/lib/libc/stdio/lib_stdsistream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_stdsostream.c [moved from RtSample/local/lib/libc/stdio/lib_stdsostream.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_tempnam.c [moved from RtSample/local/lib/libc/stdio/lib_tempnam.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_tmpnam.c [moved from RtSample/local/lib/libc/stdio/lib_tmpnam.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_ungetc.c [moved from RtSample/local/lib/libc/stdio/lib_ungetc.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_vdprintf.c [moved from RtSample/local/lib/libc/stdio/lib_vdprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_vfprintf.c [moved from RtSample/local/lib/libc/stdio/lib_vfprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_vprintf.c [moved from RtSample/local/lib/libc/stdio/lib_vprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_vsnprintf.c [moved from RtSample/local/lib/libc/stdio/lib_vsnprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_vsprintf.c [moved from RtSample/local/lib/libc/stdio/lib_vsprintf.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_wrflush.c [moved from RtSample/local/lib/libc/stdio/lib_wrflush.c with 100% similarity]
resources/samples/local/lib/libc/stdio/lib_zeroinstream.c [moved from RtSample/local/lib/libc/stdio/lib_zeroinstream.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/Make.defs [moved from RtSample/local/lib/libc/stdlib/Make.defs with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_abort.c [moved from RtSample/local/lib/libc/stdlib/lib_abort.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_abs.c [moved from RtSample/local/lib/libc/stdlib/lib_abs.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_bsearch.c [moved from RtSample/local/lib/libc/stdlib/lib_bsearch.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_checkbase.c [moved from RtSample/local/lib/libc/stdlib/lib_checkbase.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_div.c [moved from RtSample/local/lib/libc/stdlib/lib_div.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_imaxabs.c [moved from RtSample/local/lib/libc/stdlib/lib_imaxabs.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_itoa.c [moved from RtSample/local/lib/libc/stdlib/lib_itoa.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_labs.c [moved from RtSample/local/lib/libc/stdlib/lib_labs.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_ldiv.c [moved from RtSample/local/lib/libc/stdlib/lib_ldiv.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_llabs.c [moved from RtSample/local/lib/libc/stdlib/lib_llabs.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_lldiv.c [moved from RtSample/local/lib/libc/stdlib/lib_lldiv.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_mkstemp.c [moved from RtSample/local/lib/libc/stdlib/lib_mkstemp.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_mktemp.c [moved from RtSample/local/lib/libc/stdlib/lib_mktemp.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_qsort.c [moved from RtSample/local/lib/libc/stdlib/lib_qsort.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_rand.c [moved from RtSample/local/lib/libc/stdlib/lib_rand.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_strtod.c [moved from RtSample/local/lib/libc/stdlib/lib_strtod.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_strtol.c [moved from RtSample/local/lib/libc/stdlib/lib_strtol.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_strtoll.c [moved from RtSample/local/lib/libc/stdlib/lib_strtoll.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_strtoul.c [moved from RtSample/local/lib/libc/stdlib/lib_strtoul.c with 100% similarity]
resources/samples/local/lib/libc/stdlib/lib_strtoull.c [moved from RtSample/local/lib/libc/stdlib/lib_strtoull.c with 100% similarity]
resources/samples/local/lib/libc/string/Make.defs [moved from RtSample/local/lib/libc/string/Make.defs with 100% similarity]
resources/samples/local/lib/libc/string/lib_isbasedigit.c [moved from RtSample/local/lib/libc/string/lib_isbasedigit.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_memccpy.c [moved from RtSample/local/lib/libc/string/lib_memccpy.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_memchr.c [moved from RtSample/local/lib/libc/string/lib_memchr.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_memcmp.c [moved from RtSample/local/lib/libc/string/lib_memcmp.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_memcpy.c [moved from RtSample/local/lib/libc/string/lib_memcpy.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_memmove.c [moved from RtSample/local/lib/libc/string/lib_memmove.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_memset.c [moved from RtSample/local/lib/libc/string/lib_memset.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_skipspace.c [moved from RtSample/local/lib/libc/string/lib_skipspace.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_stpcpy.c [moved from RtSample/local/lib/libc/string/lib_stpcpy.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strcasecmp.c [moved from RtSample/local/lib/libc/string/lib_strcasecmp.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strcasestr.c [moved from RtSample/local/lib/libc/string/lib_strcasestr.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strcat.c [moved from RtSample/local/lib/libc/string/lib_strcat.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strchr.c [moved from RtSample/local/lib/libc/string/lib_strchr.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strcmp.c [moved from RtSample/local/lib/libc/string/lib_strcmp.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strcpy.c [moved from RtSample/local/lib/libc/string/lib_strcpy.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strcspn.c [moved from RtSample/local/lib/libc/string/lib_strcspn.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strdup.c [moved from RtSample/local/lib/libc/string/lib_strdup.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strerror.c [moved from RtSample/local/lib/libc/string/lib_strerror.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strlcpy.c [moved from RtSample/local/lib/libc/string/lib_strlcpy.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strlen.c [moved from RtSample/local/lib/libc/string/lib_strlen.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strncasecmp.c [moved from RtSample/local/lib/libc/string/lib_strncasecmp.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strncat.c [moved from RtSample/local/lib/libc/string/lib_strncat.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strncmp.c [moved from RtSample/local/lib/libc/string/lib_strncmp.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strncpy.c [moved from RtSample/local/lib/libc/string/lib_strncpy.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strndup.c [moved from RtSample/local/lib/libc/string/lib_strndup.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strnlen.c [moved from RtSample/local/lib/libc/string/lib_strnlen.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strpbrk.c [moved from RtSample/local/lib/libc/string/lib_strpbrk.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strrchr.c [moved from RtSample/local/lib/libc/string/lib_strrchr.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strspn.c [moved from RtSample/local/lib/libc/string/lib_strspn.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strstr.c [moved from RtSample/local/lib/libc/string/lib_strstr.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strtok.c [moved from RtSample/local/lib/libc/string/lib_strtok.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_strtokr.c [moved from RtSample/local/lib/libc/string/lib_strtokr.c with 100% similarity]
resources/samples/local/lib/libc/string/lib_vikmemcpy.c [moved from RtSample/local/lib/libc/string/lib_vikmemcpy.c with 100% similarity]
resources/samples/local/lib/libc/syslog/Make.defs [moved from RtSample/local/lib/libc/syslog/Make.defs with 100% similarity]
resources/samples/local/lib/libc/syslog/lib_lowsyslog.c [moved from RtSample/local/lib/libc/syslog/lib_lowsyslog.c with 100% similarity]
resources/samples/local/lib/libc/syslog/lib_setlogmask.c [moved from RtSample/local/lib/libc/syslog/lib_setlogmask.c with 100% similarity]
resources/samples/local/lib/libc/syslog/lib_syslog.c [moved from RtSample/local/lib/libc/syslog/lib_syslog.c with 100% similarity]
resources/samples/local/lib/libc/syslog/lib_syslogstream.c [moved from RtSample/local/lib/libc/syslog/lib_syslogstream.c with 100% similarity]
resources/samples/local/lib/libc/syslog/syslog.h [moved from RtSample/local/lib/libc/syslog/syslog.h with 100% similarity]
resources/samples/local/lib/libc/termios/Make.defs [moved from RtSample/local/lib/libc/termios/Make.defs with 100% similarity]
resources/samples/local/lib/libc/termios/lib_cfgetspeed.c [moved from RtSample/local/lib/libc/termios/lib_cfgetspeed.c with 100% similarity]
resources/samples/local/lib/libc/termios/lib_cfsetspeed.c [moved from RtSample/local/lib/libc/termios/lib_cfsetspeed.c with 100% similarity]
resources/samples/local/lib/libc/termios/lib_isatty.c [moved from RtSample/local/lib/libc/termios/lib_isatty.c with 100% similarity]
resources/samples/local/lib/libc/termios/lib_tcflush.c [moved from RtSample/local/lib/libc/termios/lib_tcflush.c with 100% similarity]
resources/samples/local/lib/libc/termios/lib_tcgetattr.c [moved from RtSample/local/lib/libc/termios/lib_tcgetattr.c with 100% similarity]
resources/samples/local/lib/libc/termios/lib_tcsetattr.c [moved from RtSample/local/lib/libc/termios/lib_tcsetattr.c with 100% similarity]
resources/samples/local/lib/libc/time/Make.defs [moved from RtSample/local/lib/libc/time/Make.defs with 100% similarity]
resources/samples/local/lib/libc/time/lib_calendar2utc.c [moved from RtSample/local/lib/libc/time/lib_calendar2utc.c with 100% similarity]
resources/samples/local/lib/libc/time/lib_daysbeforemonth.c [moved from RtSample/local/lib/libc/time/lib_daysbeforemonth.c with 100% similarity]
resources/samples/local/lib/libc/time/lib_difftime.c [moved from RtSample/local/lib/libc/time/lib_difftime.c with 100% similarity]
resources/samples/local/lib/libc/time/lib_gmtime.c [moved from RtSample/local/lib/libc/time/lib_gmtime.c with 100% similarity]
resources/samples/local/lib/libc/time/lib_gmtimer.c [moved from RtSample/local/lib/libc/time/lib_gmtimer.c with 100% similarity]
resources/samples/local/lib/libc/time/lib_isleapyear.c [moved from RtSample/local/lib/libc/time/lib_isleapyear.c with 100% similarity]
resources/samples/local/lib/libc/time/lib_localtime.c [moved from RtSample/local/lib/libc/time/lib_localtime.c with 100% similarity]
resources/samples/local/lib/libc/time/lib_mktime.c [moved from RtSample/local/lib/libc/time/lib_mktime.c with 100% similarity]
resources/samples/local/lib/libc/time/lib_strftime.c [moved from RtSample/local/lib/libc/time/lib_strftime.c with 100% similarity]
resources/samples/local/lib/libc/time/lib_strptime.c [moved from RtSample/local/lib/libc/time/lib_strptime.c with 100% similarity]
resources/samples/local/lib/libc/time/lib_time.c [moved from RtSample/local/lib/libc/time/lib_time.c with 100% similarity]
resources/samples/local/lib/libc/ubin/.gitignore [moved from RtSample/local/os/mm/bin/.gitignore with 100% similarity]
resources/samples/local/lib/libc/ubin/Makefile [moved from RtSample/local/lib/libc/ubin/Makefile with 100% similarity]
resources/samples/local/lib/libc/unistd/Make.defs [moved from RtSample/local/lib/libc/unistd/Make.defs with 100% similarity]
resources/samples/local/lib/libc/unistd/lib_access.c [moved from RtSample/local/lib/libc/unistd/lib_access.c with 100% similarity]
resources/samples/local/lib/libc/unistd/lib_chdir.c [moved from RtSample/local/lib/libc/unistd/lib_chdir.c with 100% similarity]
resources/samples/local/lib/libc/unistd/lib_execl.c [moved from RtSample/local/lib/libc/unistd/lib_execl.c with 100% similarity]
resources/samples/local/lib/libc/unistd/lib_getcwd.c [moved from RtSample/local/lib/libc/unistd/lib_getcwd.c with 100% similarity]
resources/samples/local/lib/libc/unistd/lib_getopt.c [moved from RtSample/local/lib/libc/unistd/lib_getopt.c with 100% similarity]
resources/samples/local/lib/libc/unistd/lib_getoptargp.c [moved from RtSample/local/lib/libc/unistd/lib_getoptargp.c with 100% similarity]
resources/samples/local/lib/libc/unistd/lib_getoptindp.c [moved from RtSample/local/lib/libc/unistd/lib_getoptindp.c with 100% similarity]
resources/samples/local/lib/libc/unistd/lib_getoptoptp.c [moved from RtSample/local/lib/libc/unistd/lib_getoptoptp.c with 100% similarity]
resources/samples/local/lib/libc/unistd/lib_sleep.c [moved from RtSample/local/lib/libc/unistd/lib_sleep.c with 100% similarity]
resources/samples/local/lib/libc/unistd/lib_usleep.c [moved from RtSample/local/lib/libc/unistd/lib_usleep.c with 100% similarity]
resources/samples/local/lib/libc/wqueue/Make.defs [moved from RtSample/local/lib/libc/wqueue/Make.defs with 100% similarity]
resources/samples/local/lib/libc/wqueue/work_cancel.c [moved from RtSample/local/lib/libc/wqueue/work_cancel.c with 100% similarity]
resources/samples/local/lib/libc/wqueue/work_lock.c [moved from RtSample/local/lib/libc/wqueue/work_lock.c with 100% similarity]
resources/samples/local/lib/libc/wqueue/work_queue.c [moved from RtSample/local/lib/libc/wqueue/work_queue.c with 100% similarity]
resources/samples/local/lib/libc/wqueue/work_signal.c [moved from RtSample/local/lib/libc/wqueue/work_signal.c with 100% similarity]
resources/samples/local/lib/libc/wqueue/work_usrthread.c [moved from RtSample/local/lib/libc/wqueue/work_usrthread.c with 100% similarity]
resources/samples/local/lib/libc/wqueue/wqueue.h [moved from RtSample/local/lib/libc/wqueue/wqueue.h with 100% similarity]
resources/samples/local/lib/libxx/.gitignore [moved from RtSample/local/lib/libxx/.gitignore with 100% similarity]
resources/samples/local/lib/libxx/Kconfig [moved from RtSample/local/lib/libxx/Kconfig with 100% similarity]
resources/samples/local/lib/libxx/Makefile [moved from RtSample/local/lib/libxx/Makefile with 100% similarity]
resources/samples/local/lib/libxx/README.txt [moved from RtSample/local/lib/libxx/README.txt with 100% similarity]
resources/samples/local/lib/libxx/libxx_cxa_atexit.cxx [moved from RtSample/local/lib/libxx/libxx_cxa_atexit.cxx with 100% similarity]
resources/samples/local/lib/libxx/libxx_cxapurevirtual.cxx [moved from RtSample/local/lib/libxx/libxx_cxapurevirtual.cxx with 100% similarity]
resources/samples/local/lib/libxx/libxx_delete.cxx [moved from RtSample/local/lib/libxx/libxx_delete.cxx with 100% similarity]
resources/samples/local/lib/libxx/libxx_deletea.cxx [moved from RtSample/local/lib/libxx/libxx_deletea.cxx with 100% similarity]
resources/samples/local/lib/libxx/libxx_eabi_atexit.cxx [moved from RtSample/local/lib/libxx/libxx_eabi_atexit.cxx with 100% similarity]
resources/samples/local/lib/libxx/libxx_internal.hxx [moved from RtSample/local/lib/libxx/libxx_internal.hxx with 100% similarity]
resources/samples/local/lib/libxx/libxx_new.cxx [moved from RtSample/local/lib/libxx/libxx_new.cxx with 100% similarity]
resources/samples/local/lib/libxx/libxx_newa.cxx [moved from RtSample/local/lib/libxx/libxx_newa.cxx with 100% similarity]
resources/samples/local/lib/libxx/libxx_stdthrow.cxx [moved from RtSample/local/lib/libxx/libxx_stdthrow.cxx with 100% similarity]
resources/samples/local/os/.gitignore [moved from RtSample/local/os/.gitignore with 100% similarity]
resources/samples/local/os/COPYING [moved from RtSample/local/os/COPYING with 100% similarity]
resources/samples/local/os/Directories.mk [moved from RtSample/local/os/Directories.mk with 100% similarity]
resources/samples/local/os/FlatLibs.mk [moved from RtSample/local/os/FlatLibs.mk with 100% similarity]
resources/samples/local/os/Kconfig [moved from RtSample/local/os/Kconfig with 100% similarity]
resources/samples/local/os/KernelLibs.mk [moved from RtSample/local/os/KernelLibs.mk with 100% similarity]
resources/samples/local/os/LibTargets.mk [moved from RtSample/local/os/LibTargets.mk with 100% similarity]
resources/samples/local/os/Makefile [moved from RtSample/local/os/Makefile with 100% similarity]
resources/samples/local/os/Makefile.unix [moved from RtSample/local/os/Makefile.unix with 100% similarity]
resources/samples/local/os/Makefile.win [moved from RtSample/local/os/Makefile.win with 100% similarity]
resources/samples/local/os/ProtectedLibs.mk [moved from RtSample/local/os/ProtectedLibs.mk with 100% similarity]
resources/samples/local/os/arch/Kconfig [moved from RtSample/local/os/arch/Kconfig with 100% similarity]
resources/samples/local/os/arch/README.txt [moved from RtSample/local/os/arch/README.txt with 100% similarity]
resources/samples/local/os/arch/arm/Kconfig [moved from RtSample/local/os/arch/arm/Kconfig with 100% similarity]
resources/samples/local/os/arch/arm/include/.gitignore [moved from RtSample/local/os/arch/arm/include/.gitignore with 100% similarity]
resources/samples/local/os/arch/arm/include/arch.h [moved from RtSample/local/os/arch/arm/include/arch.h with 100% similarity]
resources/samples/local/os/arch/arm/include/armv7-m/irq.h [moved from RtSample/local/os/arch/arm/include/armv7-m/irq.h with 100% similarity]
resources/samples/local/os/arch/arm/include/armv7-m/irq_cmnvector.h [moved from RtSample/local/os/arch/arm/include/armv7-m/irq_cmnvector.h with 100% similarity]
resources/samples/local/os/arch/arm/include/armv7-m/irq_lazyfpu.h [moved from RtSample/local/os/arch/arm/include/armv7-m/irq_lazyfpu.h with 100% similarity]
resources/samples/local/os/arch/arm/include/armv7-m/syscall.h [moved from RtSample/local/os/arch/arm/include/armv7-m/syscall.h with 100% similarity]
resources/samples/local/os/arch/arm/include/armv7-r/irq.h [moved from RtSample/local/os/arch/arm/include/armv7-r/irq.h with 100% similarity]
resources/samples/local/os/arch/arm/include/armv7-r/syscall.h [moved from RtSample/local/os/arch/arm/include/armv7-r/syscall.h with 100% similarity]
resources/samples/local/os/arch/arm/include/elf.h [moved from RtSample/local/os/arch/arm/include/elf.h with 100% similarity]
resources/samples/local/os/arch/arm/include/irq.h [moved from RtSample/local/os/arch/arm/include/irq.h with 100% similarity]
resources/samples/local/os/arch/arm/include/limits.h [moved from RtSample/local/os/arch/arm/include/limits.h with 100% similarity]
resources/samples/local/os/arch/arm/include/s5j/chip.h [moved from RtSample/local/os/arch/arm/include/s5j/chip.h with 100% similarity]
resources/samples/local/os/arch/arm/include/s5j/chip_types.h [moved from RtSample/local/os/arch/arm/include/s5j/chip_types.h with 100% similarity]
resources/samples/local/os/arch/arm/include/s5j/dma.h [moved from RtSample/local/os/arch/arm/include/s5j/dma.h with 100% similarity]
resources/samples/local/os/arch/arm/include/s5j/irq.h [moved from RtSample/local/os/arch/arm/include/s5j/irq.h with 100% similarity]
resources/samples/local/os/arch/arm/include/s5j/nvram.h [moved from RtSample/local/os/arch/arm/include/s5j/nvram.h with 100% similarity]
resources/samples/local/os/arch/arm/include/s5j/s5j_efuse.h [moved from RtSample/local/os/arch/arm/include/s5j/s5j_efuse.h with 100% similarity]
resources/samples/local/os/arch/arm/include/s5j/s5j_types.h [moved from RtSample/local/os/arch/arm/include/s5j/s5j_types.h with 100% similarity]
resources/samples/local/os/arch/arm/include/s5j/soc/s5jt200_irq.h [moved from RtSample/local/os/arch/arm/include/s5j/soc/s5jt200_irq.h with 100% similarity]
resources/samples/local/os/arch/arm/include/serial.h [moved from RtSample/local/os/arch/arm/include/serial.h with 100% similarity]
resources/samples/local/os/arch/arm/include/stdarg.h [moved from RtSample/local/os/arch/arm/include/stdarg.h with 100% similarity]
resources/samples/local/os/arch/arm/include/syscall.h [moved from RtSample/local/os/arch/arm/include/syscall.h with 100% similarity]
resources/samples/local/os/arch/arm/include/types.h [moved from RtSample/local/os/arch/arm/include/types.h with 100% similarity]
resources/samples/local/os/arch/arm/include/watchdog.h [moved from RtSample/local/os/arch/arm/include/watchdog.h with 100% similarity]
resources/samples/local/os/arch/arm/src/.gitignore [moved from RtSample/local/os/arch/arm/src/.gitignore with 100% similarity]
resources/samples/local/os/arch/arm/src/Makefile [moved from RtSample/local/os/arch/arm/src/Makefile with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/Kconfig [moved from RtSample/local/os/arch/arm/src/armv7-m/Kconfig with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/Toolchain.defs [moved from RtSample/local/os/arch/arm/src/armv7-m/Toolchain.defs with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/dwt.h [moved from RtSample/local/os/arch/arm/src/armv7-m/dwt.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/etm.h [moved from RtSample/local/os/arch/arm/src/armv7-m/etm.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/exc_return.h [moved from RtSample/local/os/arch/arm/src/armv7-m/exc_return.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/itm.h [moved from RtSample/local/os/arch/arm/src/armv7-m/itm.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/itm_syslog.h [moved from RtSample/local/os/arch/arm/src/armv7-m/itm_syslog.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/mpu.h [moved from RtSample/local/os/arch/arm/src/armv7-m/mpu.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/nvic.h [moved from RtSample/local/os/arch/arm/src/armv7-m/nvic.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/psr.h [moved from RtSample/local/os/arch/arm/src/armv7-m/psr.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/ram_vectors.h [moved from RtSample/local/os/arch/arm/src/armv7-m/ram_vectors.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/svcall.h [moved from RtSample/local/os/arch/arm/src/armv7-m/svcall.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/tpi.h [moved from RtSample/local/os/arch/arm/src/armv7-m/tpi.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_assert.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_assert.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_blocktask.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_blocktask.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_copyarmstate.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_copyarmstate.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_copyfullstate.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_copyfullstate.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_doirq.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_doirq.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_elf.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_elf.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_exception.S [moved from RtSample/local/os/arch/arm/src/armv7-m/up_exception.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_fpu.S [moved from RtSample/local/os/arch/arm/src/armv7-m/up_fpu.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_fullcontextrestore.S [moved from RtSample/local/os/arch/arm/src/armv7-m/up_fullcontextrestore.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_hardfault.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_hardfault.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_initialstate.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_initialstate.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_itm.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_itm.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_itm_syslog.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_itm_syslog.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_memcpy.S [moved from RtSample/local/os/arch/arm/src/armv7-m/up_memcpy.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_memfault.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_memfault.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_mpu.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_mpu.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_mpurestorecontext.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_mpurestorecontext.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_mpusavecontext.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_mpusavecontext.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_ramvec_attach.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_ramvec_attach.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_ramvec_initialize.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_ramvec_initialize.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_releasepending.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_releasepending.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_reprioritizertr.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_reprioritizertr.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_saveusercontext.S [moved from RtSample/local/os/arch/arm/src/armv7-m/up_saveusercontext.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_schedulesigaction.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_schedulesigaction.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_setupregions.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_setupregions.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_sigdeliver.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_sigdeliver.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_signal_dispatch.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_signal_dispatch.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_signal_handler.S [moved from RtSample/local/os/arch/arm/src/armv7-m/up_signal_handler.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_stackcheck.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_stackcheck.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_svcall.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_svcall.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_switchcontext.S [moved from RtSample/local/os/arch/arm/src/armv7-m/up_switchcontext.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_systemreset.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_systemreset.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_unblocktask.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_unblocktask.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/up_vectors.c [moved from RtSample/local/os/arch/arm/src/armv7-m/up_vectors.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-m/vfork.S [moved from RtSample/local/os/arch/arm/src/armv7-m/vfork.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/Kconfig [moved from RtSample/local/os/arch/arm/src/armv7-r/Kconfig with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/Toolchain.defs [moved from RtSample/local/os/arch/arm/src/armv7-r/Toolchain.defs with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm.h [moved from RtSample/local/os/arch/arm/src/armv7-r/arm.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_assert.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_assert.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_blocktask.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_blocktask.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_coherent_dcache.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_coherent_dcache.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_copyarmstate.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_copyarmstate.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_copyfullstate.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_copyfullstate.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_dataabort.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_dataabort.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_doirq.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_doirq.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_elf.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_elf.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_fpuconfig.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_fpuconfig.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_fullcontextrestore.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_fullcontextrestore.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_gicv2.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_gicv2.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_head.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_head.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_initialstate.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_initialstate.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_l2cc_pl310.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_l2cc_pl310.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_memcpy.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_memcpy.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_mpu.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_mpu.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_mpucontextrestore.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_mpucontextrestore.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_mpucontextsave.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_mpucontextsave.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_prefetchabort.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_prefetchabort.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_releasepending.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_releasepending.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_reprioritizertr.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_reprioritizertr.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_restorefpu.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_restorefpu.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_savefpu.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_savefpu.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_saveusercontext.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_saveusercontext.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_schedulesigaction.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_schedulesigaction.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_setupregions.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_setupregions.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_sigdeliver.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_sigdeliver.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_signal_dispatch.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_signal_dispatch.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_signal_handler.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_signal_handler.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_syscall.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_syscall.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_unblocktask.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_unblocktask.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_undefinedinsn.c [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_undefinedinsn.c with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_vectoraddrexcptn.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_vectoraddrexcptn.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_vectors.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_vectors.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_vectortab.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_vectortab.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/arm_vfork.S [moved from RtSample/local/os/arch/arm/src/armv7-r/arm_vfork.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/cache.h [moved from RtSample/local/os/arch/arm/src/armv7-r/cache.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/cp15.h [moved from RtSample/local/os/arch/arm/src/armv7-r/cp15.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/cp15_cacheops.h [moved from RtSample/local/os/arch/arm/src/armv7-r/cp15_cacheops.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/cp15_clean_dcache.S [moved from RtSample/local/os/arch/arm/src/armv7-r/cp15_clean_dcache.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/cp15_coherent_dcache.S [moved from RtSample/local/os/arch/arm/src/armv7-r/cp15_coherent_dcache.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/cp15_flush_dcache.S [moved from RtSample/local/os/arch/arm/src/armv7-r/cp15_flush_dcache.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/cp15_invalidate_dcache.S [moved from RtSample/local/os/arch/arm/src/armv7-r/cp15_invalidate_dcache.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/cp15_invalidate_dcache_all.S [moved from RtSample/local/os/arch/arm/src/armv7-r/cp15_invalidate_dcache_all.S with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/fpu.h [moved from RtSample/local/os/arch/arm/src/armv7-r/fpu.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/gic.h [moved from RtSample/local/os/arch/arm/src/armv7-r/gic.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/l2cc.h [moved from RtSample/local/os/arch/arm/src/armv7-r/l2cc.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/l2cc_pl310.h [moved from RtSample/local/os/arch/arm/src/armv7-r/l2cc_pl310.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/mpcore.h [moved from RtSample/local/os/arch/arm/src/armv7-r/mpcore.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/mpu.h [moved from RtSample/local/os/arch/arm/src/armv7-r/mpu.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/sctlr.h [moved from RtSample/local/os/arch/arm/src/armv7-r/sctlr.h with 100% similarity]
resources/samples/local/os/arch/arm/src/armv7-r/svcall.h [moved from RtSample/local/os/arch/arm/src/armv7-r/svcall.h with 100% similarity]
resources/samples/local/os/arch/arm/src/common/arm-elf.h [moved from RtSample/local/os/arch/arm/src/common/arm-elf.h with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_allocateheap.c [moved from RtSample/local/os/arch/arm/src/common/up_allocateheap.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_arch.h [moved from RtSample/local/os/arch/arm/src/common/up_arch.h with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_checkstack.c [moved from RtSample/local/os/arch/arm/src/common/up_checkstack.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_createstack.c [moved from RtSample/local/os/arch/arm/src/common/up_createstack.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_etherstub.c [moved from RtSample/local/os/arch/arm/src/common/up_etherstub.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_exit.c [moved from RtSample/local/os/arch/arm/src/common/up_exit.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_idle.c [moved from RtSample/local/os/arch/arm/src/common/up_idle.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_initialize.c [moved from RtSample/local/os/arch/arm/src/common/up_initialize.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_internal.h [moved from RtSample/local/os/arch/arm/src/common/up_internal.h with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_interruptcontext.c [moved from RtSample/local/os/arch/arm/src/common/up_interruptcontext.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_lowputs.c [moved from RtSample/local/os/arch/arm/src/common/up_lowputs.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_mdelay.c [moved from RtSample/local/os/arch/arm/src/common/up_mdelay.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_modifyreg16.c [moved from RtSample/local/os/arch/arm/src/common/up_modifyreg16.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_modifyreg32.c [moved from RtSample/local/os/arch/arm/src/common/up_modifyreg32.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_modifyreg8.c [moved from RtSample/local/os/arch/arm/src/common/up_modifyreg8.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_pthread_start.c [moved from RtSample/local/os/arch/arm/src/common/up_pthread_start.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_puts.c [moved from RtSample/local/os/arch/arm/src/common/up_puts.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_releasestack.c [moved from RtSample/local/os/arch/arm/src/common/up_releasestack.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_schedyield.c [moved from RtSample/local/os/arch/arm/src/common/up_schedyield.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_stackframe.c [moved from RtSample/local/os/arch/arm/src/common/up_stackframe.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_task_start.c [moved from RtSample/local/os/arch/arm/src/common/up_task_start.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_udelay.c [moved from RtSample/local/os/arch/arm/src/common/up_udelay.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_usestack.c [moved from RtSample/local/os/arch/arm/src/common/up_usestack.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_vfork.c [moved from RtSample/local/os/arch/arm/src/common/up_vfork.c with 100% similarity]
resources/samples/local/os/arch/arm/src/common/up_vfork.h [moved from RtSample/local/os/arch/arm/src/common/up_vfork.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/Kconfig [moved from RtSample/local/os/arch/arm/src/s5j/Kconfig with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/Make.defs [moved from RtSample/local/os/arch/arm/src/s5j/Make.defs with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/chip.h [moved from RtSample/local/os/arch/arm/src/s5j/chip.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_boot.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_boot.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_gpio.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_gpio.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_gpio.h [moved from RtSample/local/os/arch/arm/src/s5j/s5j_gpio.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_i2c.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_i2c.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_i2c.h [moved from RtSample/local/os/arch/arm/src/s5j/s5j_i2c.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_iot_spidrv.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_iot_spidrv.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_irq.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_irq.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_mac.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_mac.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_mct.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_mct.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_mct.h [moved from RtSample/local/os/arch/arm/src/s5j/s5j_mct.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_pm.h [moved from RtSample/local/os/arch/arm/src/s5j/s5j_pm.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_pminitialize.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_pminitialize.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_pmstandby.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_pmstandby.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_pmstop.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_pmstop.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_pwm.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_pwm.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_pwm.h [moved from RtSample/local/os/arch/arm/src/s5j/s5j_pwm.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_pwr.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_pwr.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_pwr.h [moved from RtSample/local/os/arch/arm/src/s5j/s5j_pwr.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_qspi.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_qspi.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_qspi.h [moved from RtSample/local/os/arch/arm/src/s5j/s5j_qspi.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_rtc.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_rtc.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_rtc.h [moved from RtSample/local/os/arch/arm/src/s5j/s5j_rtc.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_serial.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_serial.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_serial.h [moved from RtSample/local/os/arch/arm/src/s5j/s5j_serial.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_sflash.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_sflash.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_spidrv.h [moved from RtSample/local/os/arch/arm/src/s5j/s5j_spidrv.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/s5j_timerisr.c [moved from RtSample/local/os/arch/arm/src/s5j/s5j_timerisr.c with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/soc/pwrcal/.gitignore [moved from RtSample/local/os/arch/arm/src/s5j/soc/pwrcal/.gitignore with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/soc/pwrcal/S5JT200/S5JT200_vclk.h [moved from RtSample/local/os/arch/arm/src/s5j/soc/pwrcal/S5JT200/S5JT200_vclk.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/soc/pwrcal/libks5jpwrcal.a [moved from RtSample/local/os/arch/arm/src/s5j/soc/pwrcal/libks5jpwrcal.a with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/soc/pwrcal/pwrcal.h [moved from RtSample/local/os/arch/arm/src/s5j/soc/pwrcal/pwrcal.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/soc/s5j_gpio.h [moved from RtSample/local/os/arch/arm/src/s5j/soc/s5j_gpio.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/soc/s5j_memorymap.h [moved from RtSample/local/os/arch/arm/src/s5j/soc/s5j_memorymap.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/soc/s5j_pwr.h [moved from RtSample/local/os/arch/arm/src/s5j/soc/s5j_pwr.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/soc/s5jt200_gpio.h [moved from RtSample/local/os/arch/arm/src/s5j/soc/s5jt200_gpio.h with 100% similarity]
resources/samples/local/os/arch/arm/src/s5j/soc/s5jt200_memorymap.h [moved from RtSample/local/os/arch/arm/src/s5j/soc/s5jt200_memorymap.h with 100% similarity]
resources/samples/local/os/arch/arm/src/sidk_s5jt200/include/board.h [moved from RtSample/local/os/arch/arm/src/sidk_s5jt200/include/board.h with 100% similarity]
resources/samples/local/os/arch/arm/src/sidk_s5jt200/include/s5jt200_fota.h [moved from RtSample/local/os/arch/arm/src/sidk_s5jt200/include/s5jt200_fota.h with 100% similarity]
resources/samples/local/os/arch/arm/src/sidk_s5jt200/include/s5jt200_partitions.h [moved from RtSample/local/os/arch/arm/src/sidk_s5jt200/include/s5jt200_partitions.h with 100% similarity]
resources/samples/local/os/arch/arm/src/sidk_s5jt200/src/Makefile [moved from RtSample/local/os/arch/arm/src/sidk_s5jt200/src/Makefile with 100% similarity]
resources/samples/local/os/arch/arm/src/sidk_s5jt200/src/s5j_buttons.c [moved from RtSample/local/os/arch/arm/src/sidk_s5jt200/src/s5j_buttons.c with 100% similarity]
resources/samples/local/os/arch/arm/src/sidk_s5jt200/src/s5jt200_boot.c [moved from RtSample/local/os/arch/arm/src/sidk_s5jt200/src/s5jt200_boot.c with 100% similarity]
resources/samples/local/os/arch/arm/src/sidk_s5jt200/src/s5jt200_crashdump.c [moved from RtSample/local/os/arch/arm/src/sidk_s5jt200/src/s5jt200_crashdump.c with 100% similarity]
resources/samples/local/os/arch/arm/src/sidk_s5jt200/src/s5jt200_fota.c [moved from RtSample/local/os/arch/arm/src/sidk_s5jt200/src/s5jt200_fota.c with 100% similarity]
resources/samples/local/os/arch/arm/src/sidk_s5jt200/src/s5jt200_tash.c [moved from RtSample/local/os/arch/arm/src/sidk_s5jt200/src/s5jt200_tash.c with 100% similarity]
resources/samples/local/os/arch/arm/src/sidk_s5jt200/src/s5jt200_watchdog.c [moved from RtSample/local/os/arch/arm/src/sidk_s5jt200/src/s5jt200_watchdog.c with 100% similarity]
resources/samples/local/os/arch/arm/src/sidk_s5jt200/src/slip_if.c [moved from RtSample/local/os/arch/arm/src/sidk_s5jt200/src/slip_if.c with 100% similarity]
resources/samples/local/os/arch/arm/src/sidk_s5jt200/src/wlan.c [moved from RtSample/local/os/arch/arm/src/sidk_s5jt200/src/wlan.c with 100% similarity]
resources/samples/local/os/drivers/.gitignore [moved from RtSample/local/os/net/.gitignore with 100% similarity]
resources/samples/local/os/drivers/Kconfig [moved from RtSample/local/os/drivers/Kconfig with 100% similarity]
resources/samples/local/os/drivers/Makefile [moved from RtSample/local/os/drivers/Makefile with 100% similarity]
resources/samples/local/os/drivers/README.txt [moved from RtSample/local/os/drivers/README.txt with 100% similarity]
resources/samples/local/os/drivers/analog/Kconfig [moved from RtSample/local/os/drivers/analog/Kconfig with 100% similarity]
resources/samples/local/os/drivers/analog/Make.defs [moved from RtSample/local/os/drivers/analog/Make.defs with 100% similarity]
resources/samples/local/os/drivers/analog/adc.c [moved from RtSample/local/os/drivers/analog/adc.c with 100% similarity]
resources/samples/local/os/drivers/analog/dac.c [moved from RtSample/local/os/drivers/analog/dac.c with 100% similarity]
resources/samples/local/os/drivers/can.c [moved from RtSample/local/os/drivers/can.c with 100% similarity]
resources/samples/local/os/drivers/dev_null.c [moved from RtSample/local/os/drivers/dev_null.c with 100% similarity]
resources/samples/local/os/drivers/dev_zero.c [moved from RtSample/local/os/drivers/dev_zero.c with 100% similarity]
resources/samples/local/os/drivers/fota/Make.defs [moved from RtSample/local/os/drivers/fota/Make.defs with 100% similarity]
resources/samples/local/os/drivers/fota/fota_driver.c [moved from RtSample/local/os/drivers/fota/fota_driver.c with 100% similarity]
resources/samples/local/os/drivers/gpio/Kconfig [moved from RtSample/local/os/drivers/gpio/Kconfig with 100% similarity]
resources/samples/local/os/drivers/gpio/Make.defs [moved from RtSample/local/os/drivers/gpio/Make.defs with 100% similarity]
resources/samples/local/os/drivers/gpio/gpio.c [moved from RtSample/local/os/drivers/gpio/gpio.c with 100% similarity]
resources/samples/local/os/drivers/gpio/gpio_export.c [moved from RtSample/local/os/drivers/gpio/gpio_export.c with 100% similarity]
resources/samples/local/os/drivers/i2c/Kconfig [moved from RtSample/local/os/drivers/i2c/Kconfig with 100% similarity]
resources/samples/local/os/drivers/i2c/Make.defs [moved from RtSample/local/os/drivers/i2c/Make.defs with 100% similarity]
resources/samples/local/os/drivers/i2c/i2c_read.c [moved from RtSample/local/os/drivers/i2c/i2c_read.c with 100% similarity]
resources/samples/local/os/drivers/i2c/i2c_uio.c [moved from RtSample/local/os/drivers/i2c/i2c_uio.c with 100% similarity]
resources/samples/local/os/drivers/i2c/i2c_write.c [moved from RtSample/local/os/drivers/i2c/i2c_write.c with 100% similarity]
resources/samples/local/os/drivers/i2c/i2c_writeread.c [moved from RtSample/local/os/drivers/i2c/i2c_writeread.c with 100% similarity]
resources/samples/local/os/drivers/lcd/Kconfig [moved from RtSample/local/os/drivers/lcd/Kconfig with 100% similarity]
resources/samples/local/os/drivers/lcd/Make.defs [moved from RtSample/local/os/drivers/lcd/Make.defs with 100% similarity]
resources/samples/local/os/drivers/lcd/ili9341.c [moved from RtSample/local/os/drivers/lcd/ili9341.c with 100% similarity]
resources/samples/local/os/drivers/loop.c [moved from RtSample/local/os/drivers/loop.c with 100% similarity]
resources/samples/local/os/drivers/net/Kconfig [moved from RtSample/local/os/drivers/net/Kconfig with 100% similarity]
resources/samples/local/os/drivers/net/Make.defs [moved from RtSample/local/os/drivers/net/Make.defs with 100% similarity]
resources/samples/local/os/drivers/net/dm90x0.c [moved from RtSample/local/os/drivers/net/dm90x0.c with 100% similarity]
resources/samples/local/os/drivers/net/e1000.c [moved from RtSample/local/os/drivers/net/e1000.c with 100% similarity]
resources/samples/local/os/drivers/net/e1000.h [moved from RtSample/local/os/drivers/net/e1000.h with 100% similarity]
resources/samples/local/os/drivers/net/enc28j60.c [moved from RtSample/local/os/drivers/net/enc28j60.c with 100% similarity]
resources/samples/local/os/drivers/net/enc28j60.h [moved from RtSample/local/os/drivers/net/enc28j60.h with 100% similarity]
resources/samples/local/os/drivers/net/encx24j600.c [moved from RtSample/local/os/drivers/net/encx24j600.c with 100% similarity]
resources/samples/local/os/drivers/net/encx24j600.h [moved from RtSample/local/os/drivers/net/encx24j600.h with 100% similarity]
resources/samples/local/os/drivers/net/phy_notify.c [moved from RtSample/local/os/drivers/net/phy_notify.c with 100% similarity]
resources/samples/local/os/drivers/net/skeleton.c [moved from RtSample/local/os/drivers/net/skeleton.c with 100% similarity]
resources/samples/local/os/drivers/net/slip.c [moved from RtSample/local/os/drivers/net/slip.c with 100% similarity]
resources/samples/local/os/drivers/net/telnet.c [moved from RtSample/local/os/drivers/net/telnet.c with 100% similarity]
resources/samples/local/os/drivers/net/vnet.c [moved from RtSample/local/os/drivers/net/vnet.c with 100% similarity]
resources/samples/local/os/drivers/pipes/Kconfig [moved from RtSample/local/os/drivers/pipes/Kconfig with 100% similarity]
resources/samples/local/os/drivers/pipes/Make.defs [moved from RtSample/local/os/drivers/pipes/Make.defs with 100% similarity]
resources/samples/local/os/drivers/pipes/fifo.c [moved from RtSample/local/os/drivers/pipes/fifo.c with 100% similarity]
resources/samples/local/os/drivers/pipes/pipe.c [moved from RtSample/local/os/drivers/pipes/pipe.c with 100% similarity]
resources/samples/local/os/drivers/pipes/pipe_common.c [moved from RtSample/local/os/drivers/pipes/pipe_common.c with 100% similarity]
resources/samples/local/os/drivers/pipes/pipe_common.h [moved from RtSample/local/os/drivers/pipes/pipe_common.h with 100% similarity]
resources/samples/local/os/drivers/power/Kconfig [moved from RtSample/local/os/drivers/power/Kconfig with 100% similarity]
resources/samples/local/os/drivers/power/Make.defs [moved from RtSample/local/os/drivers/power/Make.defs with 100% similarity]
resources/samples/local/os/drivers/power/battery_charger.c [moved from RtSample/local/os/drivers/power/battery_charger.c with 100% similarity]
resources/samples/local/os/drivers/power/battery_gauge.c [moved from RtSample/local/os/drivers/power/battery_gauge.c with 100% similarity]
resources/samples/local/os/drivers/pwm.c [moved from RtSample/local/os/drivers/pwm.c with 100% similarity]
resources/samples/local/os/drivers/rtc.c [moved from RtSample/local/os/drivers/rtc.c with 100% similarity]
resources/samples/local/os/drivers/rwbuffer.c [moved from RtSample/local/os/drivers/rwbuffer.c with 100% similarity]
resources/samples/local/os/drivers/sercomm/Kconfig [moved from RtSample/local/apps/platform/dummy/Kconfig with 100% similarity]
resources/samples/local/os/drivers/sercomm/Make.defs [moved from RtSample/local/os/drivers/sercomm/Make.defs with 100% similarity]
resources/samples/local/os/drivers/sercomm/README.txt [moved from RtSample/local/os/drivers/sercomm/README.txt with 100% similarity]
resources/samples/local/os/drivers/sercomm/console.c [moved from RtSample/local/os/drivers/sercomm/console.c with 100% similarity]
resources/samples/local/os/drivers/sercomm/loadwriter.py [moved from RtSample/local/os/drivers/sercomm/loadwriter.py with 100% similarity]
resources/samples/local/os/drivers/sercomm/uart.c [moved from RtSample/local/os/drivers/sercomm/uart.c with 100% similarity]
resources/samples/local/os/drivers/sercomm/uart.h [moved from RtSample/local/os/drivers/sercomm/uart.h with 100% similarity]
resources/samples/local/os/drivers/serial/Kconfig [moved from RtSample/local/os/drivers/serial/Kconfig with 100% similarity]
resources/samples/local/os/drivers/serial/Make.defs [moved from RtSample/local/os/drivers/serial/Make.defs with 100% similarity]
resources/samples/local/os/drivers/serial/lowconsole.c [moved from RtSample/local/os/drivers/serial/lowconsole.c with 100% similarity]
resources/samples/local/os/drivers/serial/serial.c [moved from RtSample/local/os/drivers/serial/serial.c with 100% similarity]
resources/samples/local/os/drivers/serial/serialirq.c [moved from RtSample/local/os/drivers/serial/serialirq.c with 100% similarity]
resources/samples/local/os/drivers/serial/uart_16550.c [moved from RtSample/local/os/drivers/serial/uart_16550.c with 100% similarity]
resources/samples/local/os/drivers/spi/Kconfig [moved from RtSample/local/os/drivers/spi/Kconfig with 100% similarity]
resources/samples/local/os/drivers/spi/Make.defs [moved from RtSample/local/os/drivers/spi/Make.defs with 100% similarity]
resources/samples/local/os/drivers/spi/spi_bitbang.c [moved from RtSample/local/os/drivers/spi/spi_bitbang.c with 100% similarity]
resources/samples/local/os/drivers/syslog/Kconfig [moved from RtSample/local/os/drivers/syslog/Kconfig with 100% similarity]
resources/samples/local/os/drivers/syslog/Make.defs [moved from RtSample/local/os/drivers/syslog/Make.defs with 100% similarity]
resources/samples/local/os/drivers/syslog/README.txt [moved from RtSample/local/os/drivers/syslog/README.txt with 100% similarity]
resources/samples/local/os/drivers/syslog/ramlog.c [moved from RtSample/local/os/drivers/syslog/ramlog.c with 100% similarity]
resources/samples/local/os/drivers/syslog/syslog_console.c [moved from RtSample/local/os/drivers/syslog/syslog_console.c with 100% similarity]
resources/samples/local/os/drivers/timer.c [moved from RtSample/local/os/drivers/timer.c with 100% similarity]
resources/samples/local/os/drivers/usbdev/Kconfig [moved from RtSample/local/os/drivers/usbdev/Kconfig with 100% similarity]
resources/samples/local/os/drivers/usbdev/Make.defs [moved from RtSample/local/os/drivers/usbdev/Make.defs with 100% similarity]
resources/samples/local/os/drivers/usbdev/cdcacm.c [moved from RtSample/local/os/drivers/usbdev/cdcacm.c with 100% similarity]
resources/samples/local/os/drivers/usbdev/cdcacm.h [moved from RtSample/local/os/drivers/usbdev/cdcacm.h with 100% similarity]
resources/samples/local/os/drivers/usbdev/cdcacm_desc.c [moved from RtSample/local/os/drivers/usbdev/cdcacm_desc.c with 100% similarity]
resources/samples/local/os/drivers/usbdev/composite.c [moved from RtSample/local/os/drivers/usbdev/composite.c with 100% similarity]
resources/samples/local/os/drivers/usbdev/composite.h [moved from RtSample/local/os/drivers/usbdev/composite.h with 100% similarity]
resources/samples/local/os/drivers/usbdev/composite_desc.c [moved from RtSample/local/os/drivers/usbdev/composite_desc.c with 100% similarity]
resources/samples/local/os/drivers/usbdev/pl2303.c [moved from RtSample/local/os/drivers/usbdev/pl2303.c with 100% similarity]
resources/samples/local/os/drivers/usbdev/usbdev_strings.c [moved from RtSample/local/os/drivers/usbdev/usbdev_strings.c with 100% similarity]
resources/samples/local/os/drivers/usbdev/usbdev_trace.c [moved from RtSample/local/os/drivers/usbdev/usbdev_trace.c with 100% similarity]
resources/samples/local/os/drivers/usbdev/usbdev_trprintf.c [moved from RtSample/local/os/drivers/usbdev/usbdev_trprintf.c with 100% similarity]
resources/samples/local/os/drivers/usbdev/usbmsc.c [moved from RtSample/local/os/drivers/usbdev/usbmsc.c with 100% similarity]
resources/samples/local/os/drivers/usbdev/usbmsc.h [moved from RtSample/local/os/drivers/usbdev/usbmsc.h with 100% similarity]
resources/samples/local/os/drivers/usbdev/usbmsc_desc.c [moved from RtSample/local/os/drivers/usbdev/usbmsc_desc.c with 100% similarity]
resources/samples/local/os/drivers/usbdev/usbmsc_scsi.c [moved from RtSample/local/os/drivers/usbdev/usbmsc_scsi.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/.gitignore [moved from RtSample/local/os/drivers/usbhost/.gitignore with 100% similarity]
resources/samples/local/os/drivers/usbhost/Kconfig [moved from RtSample/local/os/drivers/usbhost/Kconfig with 100% similarity]
resources/samples/local/os/drivers/usbhost/Make.defs [moved from RtSample/local/os/drivers/usbhost/Make.defs with 100% similarity]
resources/samples/local/os/drivers/usbhost/hid_parser.c [moved from RtSample/local/os/drivers/usbhost/hid_parser.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_cdcacm.c [moved from RtSample/local/os/drivers/usbhost/usbhost_cdcacm.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_devaddr.c [moved from RtSample/local/os/drivers/usbhost/usbhost_devaddr.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_enumerate.c [moved from RtSample/local/os/drivers/usbhost/usbhost_enumerate.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_findclass.c [moved from RtSample/local/os/drivers/usbhost/usbhost_findclass.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_hidkbd.c [moved from RtSample/local/os/drivers/usbhost/usbhost_hidkbd.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_hidmouse.c [moved from RtSample/local/os/drivers/usbhost/usbhost_hidmouse.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_hub.c [moved from RtSample/local/os/drivers/usbhost/usbhost_hub.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_registerclass.c [moved from RtSample/local/os/drivers/usbhost/usbhost_registerclass.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_registry.c [moved from RtSample/local/os/drivers/usbhost/usbhost_registry.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_registry.h [moved from RtSample/local/os/drivers/usbhost/usbhost_registry.h with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_skeleton.c [moved from RtSample/local/os/drivers/usbhost/usbhost_skeleton.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_storage.c [moved from RtSample/local/os/drivers/usbhost/usbhost_storage.c with 100% similarity]
resources/samples/local/os/drivers/usbhost/usbhost_trace.c [moved from RtSample/local/os/drivers/usbhost/usbhost_trace.c with 100% similarity]
resources/samples/local/os/drivers/watchdog.c [moved from RtSample/local/os/drivers/watchdog.c with 100% similarity]
resources/samples/local/os/fs/.gitignore [moved from RtSample/local/os/kernel/.gitignore with 100% similarity]
resources/samples/local/os/fs/Kconfig [moved from RtSample/local/os/fs/Kconfig with 100% similarity]
resources/samples/local/os/fs/Makefile [moved from RtSample/local/os/fs/Makefile with 100% similarity]
resources/samples/local/os/fs/aio/Kconfig [moved from RtSample/local/os/fs/aio/Kconfig with 100% similarity]
resources/samples/local/os/fs/aio/Make.defs [moved from RtSample/local/os/fs/aio/Make.defs with 100% similarity]
resources/samples/local/os/fs/aio/aio.h [moved from RtSample/local/os/fs/aio/aio.h with 100% similarity]
resources/samples/local/os/fs/aio/aio_cancel.c [moved from RtSample/local/os/fs/aio/aio_cancel.c with 100% similarity]
resources/samples/local/os/fs/aio/aio_fsync.c [moved from RtSample/local/os/fs/aio/aio_fsync.c with 100% similarity]
resources/samples/local/os/fs/aio/aio_initialize.c [moved from RtSample/local/os/fs/aio/aio_initialize.c with 100% similarity]
resources/samples/local/os/fs/aio/aio_queue.c [moved from RtSample/local/os/fs/aio/aio_queue.c with 100% similarity]
resources/samples/local/os/fs/aio/aio_read.c [moved from RtSample/local/os/fs/aio/aio_read.c with 100% similarity]
resources/samples/local/os/fs/aio/aio_signal.c [moved from RtSample/local/os/fs/aio/aio_signal.c with 100% similarity]
resources/samples/local/os/fs/aio/aio_write.c [moved from RtSample/local/os/fs/aio/aio_write.c with 100% similarity]
resources/samples/local/os/fs/aio/aioc_contain.c [moved from RtSample/local/os/fs/aio/aioc_contain.c with 100% similarity]
resources/samples/local/os/fs/dirent/Make.defs [moved from RtSample/local/os/fs/dirent/Make.defs with 100% similarity]
resources/samples/local/os/fs/dirent/fs_closedir.c [moved from RtSample/local/os/fs/dirent/fs_closedir.c with 100% similarity]
resources/samples/local/os/fs/dirent/fs_opendir.c [moved from RtSample/local/os/fs/dirent/fs_opendir.c with 100% similarity]
resources/samples/local/os/fs/dirent/fs_readdir.c [moved from RtSample/local/os/fs/dirent/fs_readdir.c with 100% similarity]
resources/samples/local/os/fs/dirent/fs_rewinddir.c [moved from RtSample/local/os/fs/dirent/fs_rewinddir.c with 100% similarity]
resources/samples/local/os/fs/dirent/fs_seekdir.c [moved from RtSample/local/os/fs/dirent/fs_seekdir.c with 100% similarity]
resources/samples/local/os/fs/driver/Make.defs [moved from RtSample/local/os/fs/driver/Make.defs with 100% similarity]
resources/samples/local/os/fs/driver/block/Kconfig [moved from RtSample/local/os/fs/driver/block/Kconfig with 100% similarity]
resources/samples/local/os/fs/driver/block/driver.h [moved from RtSample/local/os/fs/driver/block/driver.h with 100% similarity]
resources/samples/local/os/fs/driver/block/fs_closeblockdriver.c [moved from RtSample/local/os/fs/driver/block/fs_closeblockdriver.c with 100% similarity]
resources/samples/local/os/fs/driver/block/fs_devsyslog.c [moved from RtSample/local/os/fs/driver/block/fs_devsyslog.c with 100% similarity]
resources/samples/local/os/fs/driver/block/fs_findblockdriver.c [moved from RtSample/local/os/fs/driver/block/fs_findblockdriver.c with 100% similarity]
resources/samples/local/os/fs/driver/block/fs_openblockdriver.c [moved from RtSample/local/os/fs/driver/block/fs_openblockdriver.c with 100% similarity]
resources/samples/local/os/fs/driver/block/fs_registerblockdriver.c [moved from RtSample/local/os/fs/driver/block/fs_registerblockdriver.c with 100% similarity]
resources/samples/local/os/fs/driver/block/fs_registerdriver.c [moved from RtSample/local/os/fs/driver/block/fs_registerdriver.c with 100% similarity]
resources/samples/local/os/fs/driver/block/fs_unregisterblockdriver.c [moved from RtSample/local/os/fs/driver/block/fs_unregisterblockdriver.c with 100% similarity]
resources/samples/local/os/fs/driver/block/fs_unregisterdriver.c [moved from RtSample/local/os/fs/driver/block/fs_unregisterdriver.c with 100% similarity]
resources/samples/local/os/fs/driver/block/ramdisk.c [moved from RtSample/local/os/fs/driver/block/ramdisk.c with 100% similarity]
resources/samples/local/os/fs/driver/mtd/Kconfig [moved from RtSample/local/os/fs/driver/mtd/Kconfig with 100% similarity]
resources/samples/local/os/fs/driver/mtd/m25px/Kconfig [moved from RtSample/local/os/fs/driver/mtd/m25px/Kconfig with 100% similarity]
resources/samples/local/os/fs/driver/mtd/m25px/m25px.c [moved from RtSample/local/os/fs/driver/mtd/m25px/m25px.c with 100% similarity]
resources/samples/local/os/fs/driver/mtd/mtd_config.c [moved from RtSample/local/os/fs/driver/mtd/mtd_config.c with 100% similarity]
resources/samples/local/os/fs/driver/mtd/mtd_partition.c [moved from RtSample/local/os/fs/driver/mtd/mtd_partition.c with 100% similarity]
resources/samples/local/os/fs/driver/mtd/mtd_procfs.c [moved from RtSample/local/os/fs/driver/mtd/mtd_procfs.c with 100% similarity]
resources/samples/local/os/fs/driver/mtd/mtd_progmem.c [moved from RtSample/local/os/fs/driver/mtd/mtd_progmem.c with 100% similarity]
resources/samples/local/os/fs/driver/mtd/rammtd/Kconfig [moved from RtSample/local/os/fs/driver/mtd/rammtd/Kconfig with 100% similarity]
resources/samples/local/os/fs/driver/mtd/rammtd/rammtd.c [moved from RtSample/local/os/fs/driver/mtd/rammtd/rammtd.c with 100% similarity]
resources/samples/local/os/fs/driver/mtd/smart.c [moved from RtSample/local/os/fs/driver/mtd/smart.c with 100% similarity]
resources/samples/local/os/fs/fs_initialize.c [moved from RtSample/local/os/fs/fs_initialize.c with 100% similarity]
resources/samples/local/os/fs/fs_utils.c [moved from RtSample/local/os/fs/fs_utils.c with 100% similarity]
resources/samples/local/os/fs/inode/Make.defs [moved from RtSample/local/os/fs/inode/Make.defs with 100% similarity]
resources/samples/local/os/fs/inode/fs_files.c [moved from RtSample/local/os/fs/inode/fs_files.c with 100% similarity]
resources/samples/local/os/fs/inode/fs_foreachinode.c [moved from RtSample/local/os/fs/inode/fs_foreachinode.c with 100% similarity]
resources/samples/local/os/fs/inode/fs_inode.c [moved from RtSample/local/os/fs/inode/fs_inode.c with 100% similarity]
resources/samples/local/os/fs/inode/fs_inodeaddref.c [moved from RtSample/local/os/fs/inode/fs_inodeaddref.c with 100% similarity]
resources/samples/local/os/fs/inode/fs_inodebasename.c [moved from RtSample/local/os/fs/inode/fs_inodebasename.c with 100% similarity]
resources/samples/local/os/fs/inode/fs_inodefind.c [moved from RtSample/local/os/fs/inode/fs_inodefind.c with 100% similarity]
resources/samples/local/os/fs/inode/fs_inoderelease.c [moved from RtSample/local/os/fs/inode/fs_inoderelease.c with 100% similarity]
resources/samples/local/os/fs/inode/fs_inoderemove.c [moved from RtSample/local/os/fs/inode/fs_inoderemove.c with 100% similarity]
resources/samples/local/os/fs/inode/fs_inodereserve.c [moved from RtSample/local/os/fs/inode/fs_inodereserve.c with 100% similarity]
resources/samples/local/os/fs/inode/inode.h [moved from RtSample/local/os/fs/inode/inode.h with 100% similarity]
resources/samples/local/os/fs/mount/Make.defs [moved from RtSample/local/os/fs/mount/Make.defs with 100% similarity]
resources/samples/local/os/fs/mount/fs_automount.c [moved from RtSample/local/os/fs/mount/fs_automount.c with 100% similarity]
resources/samples/local/os/fs/mount/fs_foreachmountpoint.c [moved from RtSample/local/os/fs/mount/fs_foreachmountpoint.c with 100% similarity]
resources/samples/local/os/fs/mount/fs_mount.c [moved from RtSample/local/os/fs/mount/fs_mount.c with 100% similarity]
resources/samples/local/os/fs/mount/fs_umount.c [moved from RtSample/local/os/fs/mount/fs_umount.c with 100% similarity]
resources/samples/local/os/fs/mqueue/Kconfig [moved from RtSample/local/os/fs/mqueue/Kconfig with 100% similarity]
resources/samples/local/os/fs/mqueue/Make.defs [moved from RtSample/local/os/fs/mqueue/Make.defs with 100% similarity]
resources/samples/local/os/fs/mqueue/mq_close.c [moved from RtSample/local/os/fs/mqueue/mq_close.c with 100% similarity]
resources/samples/local/os/fs/mqueue/mq_open.c [moved from RtSample/local/os/fs/mqueue/mq_open.c with 100% similarity]
resources/samples/local/os/fs/mqueue/mq_unlink.c [moved from RtSample/local/os/fs/mqueue/mq_unlink.c with 100% similarity]
resources/samples/local/os/fs/mqueue/mqueue.h [moved from RtSample/local/os/fs/mqueue/mqueue.h with 100% similarity]
resources/samples/local/os/fs/procfs/Kconfig [moved from RtSample/local/os/fs/procfs/Kconfig with 100% similarity]
resources/samples/local/os/fs/procfs/Make.defs [moved from RtSample/local/os/fs/procfs/Make.defs with 100% similarity]
resources/samples/local/os/fs/procfs/README.txt [moved from RtSample/local/os/fs/procfs/README.txt with 100% similarity]
resources/samples/local/os/fs/procfs/fs_procfs.c [moved from RtSample/local/os/fs/procfs/fs_procfs.c with 100% similarity]
resources/samples/local/os/fs/procfs/fs_procfscm.c [moved from RtSample/local/os/fs/procfs/fs_procfscm.c with 100% similarity]
resources/samples/local/os/fs/procfs/fs_procfscpuload.c [moved from RtSample/local/os/fs/procfs/fs_procfscpuload.c with 100% similarity]
resources/samples/local/os/fs/procfs/fs_procfsproc.c [moved from RtSample/local/os/fs/procfs/fs_procfsproc.c with 100% similarity]
resources/samples/local/os/fs/procfs/fs_procfsuptime.c [moved from RtSample/local/os/fs/procfs/fs_procfsuptime.c with 100% similarity]
resources/samples/local/os/fs/procfs/fs_procfsutil.c [moved from RtSample/local/os/fs/procfs/fs_procfsutil.c with 100% similarity]
resources/samples/local/os/fs/procfs/fs_procfsversion.c [moved from RtSample/local/os/fs/procfs/fs_procfsversion.c with 100% similarity]
resources/samples/local/os/fs/procfs/fs_skeleton.c [moved from RtSample/local/os/fs/procfs/fs_skeleton.c with 100% similarity]
resources/samples/local/os/fs/romfs/Kconfig [moved from RtSample/local/os/fs/romfs/Kconfig with 100% similarity]
resources/samples/local/os/fs/romfs/Make.defs [moved from RtSample/local/os/fs/romfs/Make.defs with 100% similarity]
resources/samples/local/os/fs/romfs/fs_romfs.c [moved from RtSample/local/os/fs/romfs/fs_romfs.c with 100% similarity]
resources/samples/local/os/fs/romfs/fs_romfs.h [moved from RtSample/local/os/fs/romfs/fs_romfs.h with 100% similarity]
resources/samples/local/os/fs/romfs/fs_romfsutil.c [moved from RtSample/local/os/fs/romfs/fs_romfsutil.c with 100% similarity]
resources/samples/local/os/fs/semaphore/Kconfig [moved from RtSample/local/os/fs/semaphore/Kconfig with 100% similarity]
resources/samples/local/os/fs/semaphore/Make.defs [moved from RtSample/local/os/fs/semaphore/Make.defs with 100% similarity]
resources/samples/local/os/fs/semaphore/sem_close.c [moved from RtSample/local/os/fs/semaphore/sem_close.c with 100% similarity]
resources/samples/local/os/fs/semaphore/sem_open.c [moved from RtSample/local/os/fs/semaphore/sem_open.c with 100% similarity]
resources/samples/local/os/fs/semaphore/sem_unlink.c [moved from RtSample/local/os/fs/semaphore/sem_unlink.c with 100% similarity]
resources/samples/local/os/fs/semaphore/semaphore.h [moved from RtSample/local/os/fs/semaphore/semaphore.h with 100% similarity]
resources/samples/local/os/fs/smartfs/Kconfig [moved from RtSample/local/os/fs/smartfs/Kconfig with 100% similarity]
resources/samples/local/os/fs/smartfs/Make.defs [moved from RtSample/local/os/fs/smartfs/Make.defs with 100% similarity]
resources/samples/local/os/fs/smartfs/README.txt [moved from RtSample/local/os/fs/smartfs/README.txt with 100% similarity]
resources/samples/local/os/fs/smartfs/smartfs.h [moved from RtSample/local/os/fs/smartfs/smartfs.h with 100% similarity]
resources/samples/local/os/fs/smartfs/smartfs_mksmartfs.c [moved from RtSample/local/os/fs/smartfs/smartfs_mksmartfs.c with 100% similarity]
resources/samples/local/os/fs/smartfs/smartfs_procfs.c [moved from RtSample/local/os/fs/smartfs/smartfs_procfs.c with 100% similarity]
resources/samples/local/os/fs/smartfs/smartfs_smart.c [moved from RtSample/local/os/fs/smartfs/smartfs_smart.c with 100% similarity]
resources/samples/local/os/fs/smartfs/smartfs_utils.c [moved from RtSample/local/os/fs/smartfs/smartfs_utils.c with 100% similarity]
resources/samples/local/os/fs/vfs/Make.defs [moved from RtSample/local/os/fs/vfs/Make.defs with 100% similarity]
resources/samples/local/os/fs/vfs/fs_close.c [moved from RtSample/local/os/fs/vfs/fs_close.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_dup.c [moved from RtSample/local/os/fs/vfs/fs_dup.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_dup2.c [moved from RtSample/local/os/fs/vfs/fs_dup2.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_dupfd.c [moved from RtSample/local/os/fs/vfs/fs_dupfd.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_dupfd2.c [moved from RtSample/local/os/fs/vfs/fs_dupfd2.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_fcntl.c [moved from RtSample/local/os/fs/vfs/fs_fcntl.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_fdopen.c [moved from RtSample/local/os/fs/vfs/fs_fdopen.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_fsync.c [moved from RtSample/local/os/fs/vfs/fs_fsync.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_getfilep.c [moved from RtSample/local/os/fs/vfs/fs_getfilep.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_ioctl.c [moved from RtSample/local/os/fs/vfs/fs_ioctl.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_lseek.c [moved from RtSample/local/os/fs/vfs/fs_lseek.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_mkdir.c [moved from RtSample/local/os/fs/vfs/fs_mkdir.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_open.c [moved from RtSample/local/os/fs/vfs/fs_open.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_poll.c [moved from RtSample/local/os/fs/vfs/fs_poll.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_pread.c [moved from RtSample/local/os/fs/vfs/fs_pread.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_pwrite.c [moved from RtSample/local/os/fs/vfs/fs_pwrite.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_read.c [moved from RtSample/local/os/fs/vfs/fs_read.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_rename.c [moved from RtSample/local/os/fs/vfs/fs_rename.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_rmdir.c [moved from RtSample/local/os/fs/vfs/fs_rmdir.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_select.c [moved from RtSample/local/os/fs/vfs/fs_select.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_sendfile.c [moved from RtSample/local/os/fs/vfs/fs_sendfile.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_stat.c [moved from RtSample/local/os/fs/vfs/fs_stat.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_statfs.c [moved from RtSample/local/os/fs/vfs/fs_statfs.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_unlink.c [moved from RtSample/local/os/fs/vfs/fs_unlink.c with 100% similarity]
resources/samples/local/os/fs/vfs/fs_write.c [moved from RtSample/local/os/fs/vfs/fs_write.c with 100% similarity]
resources/samples/local/os/include/.gitignore [moved from RtSample/local/os/include/.gitignore with 100% similarity]
resources/samples/local/os/include/aio.h [moved from RtSample/local/os/include/aio.h with 100% similarity]
resources/samples/local/os/include/arpa/inet.h [moved from RtSample/local/os/include/arpa/inet.h with 100% similarity]
resources/samples/local/os/include/assert.h [moved from RtSample/local/os/include/assert.h with 100% similarity]
resources/samples/local/os/include/crc16.h [moved from RtSample/local/os/include/crc16.h with 100% similarity]
resources/samples/local/os/include/crc32.h [moved from RtSample/local/os/include/crc32.h with 100% similarity]
resources/samples/local/os/include/crc8.h [moved from RtSample/local/os/include/crc8.h with 100% similarity]
resources/samples/local/os/include/ctype.h [moved from RtSample/local/os/include/ctype.h with 100% similarity]
resources/samples/local/os/include/cxx/cassert [moved from RtSample/local/os/include/cxx/cassert with 100% similarity]
resources/samples/local/os/include/cxx/cctype [moved from RtSample/local/os/include/cxx/cctype with 100% similarity]
resources/samples/local/os/include/cxx/cerrno [moved from RtSample/local/os/include/cxx/cerrno with 100% similarity]
resources/samples/local/os/include/cxx/cfcntl [moved from RtSample/local/os/include/cxx/cfcntl with 100% similarity]
resources/samples/local/os/include/cxx/climits [moved from RtSample/local/os/include/cxx/climits with 100% similarity]
resources/samples/local/os/include/cxx/cmath [moved from RtSample/local/os/include/cxx/cmath with 100% similarity]
resources/samples/local/os/include/cxx/csched [moved from RtSample/local/os/include/cxx/csched with 100% similarity]
resources/samples/local/os/include/cxx/csignal [moved from RtSample/local/os/include/cxx/csignal with 100% similarity]
resources/samples/local/os/include/cxx/cstdarg [moved from RtSample/local/os/include/cxx/cstdarg with 100% similarity]
resources/samples/local/os/include/cxx/cstdbool [moved from RtSample/local/os/include/cxx/cstdbool with 100% similarity]
resources/samples/local/os/include/cxx/cstddef [moved from RtSample/local/os/include/cxx/cstddef with 100% similarity]
resources/samples/local/os/include/cxx/cstdint [moved from RtSample/local/os/include/cxx/cstdint with 100% similarity]
resources/samples/local/os/include/cxx/cstdio [moved from RtSample/local/os/include/cxx/cstdio with 100% similarity]
resources/samples/local/os/include/cxx/cstdlib [moved from RtSample/local/os/include/cxx/cstdlib with 100% similarity]
resources/samples/local/os/include/cxx/cstring [moved from RtSample/local/os/include/cxx/cstring with 100% similarity]
resources/samples/local/os/include/cxx/ctime [moved from RtSample/local/os/include/cxx/ctime with 100% similarity]
resources/samples/local/os/include/cxx/cunistd [moved from RtSample/local/os/include/cxx/cunistd with 100% similarity]
resources/samples/local/os/include/debug.h [moved from RtSample/local/os/include/debug.h with 100% similarity]
resources/samples/local/os/include/dirent.h [moved from RtSample/local/os/include/dirent.h with 100% similarity]
resources/samples/local/os/include/elf32.h [moved from RtSample/local/os/include/elf32.h with 100% similarity]
resources/samples/local/os/include/errno.h [moved from RtSample/local/os/include/errno.h with 100% similarity]
resources/samples/local/os/include/fcntl.h [moved from RtSample/local/os/include/fcntl.h with 100% similarity]
resources/samples/local/os/include/fixedmath.h [moved from RtSample/local/os/include/fixedmath.h with 100% similarity]
resources/samples/local/os/include/ifaddrs.h [moved from RtSample/local/os/include/ifaddrs.h with 100% similarity]
resources/samples/local/os/include/inttypes.h [moved from RtSample/local/os/include/inttypes.h with 100% similarity]
resources/samples/local/os/include/libgen.h [moved from RtSample/local/os/include/libgen.h with 100% similarity]
resources/samples/local/os/include/limits.h [moved from RtSample/local/os/include/limits.h with 100% similarity]
resources/samples/local/os/include/mqueue.h [moved from RtSample/local/os/include/mqueue.h with 100% similarity]
resources/samples/local/os/include/net/ethernet.h [moved from RtSample/local/os/include/net/ethernet.h with 100% similarity]
resources/samples/local/os/include/net/if.h [moved from RtSample/local/os/include/net/if.h with 100% similarity]
resources/samples/local/os/include/net/lwip/api.h [moved from RtSample/local/os/include/net/lwip/api.h with 100% similarity]
resources/samples/local/os/include/net/lwip/api_msg.h [moved from RtSample/local/os/include/net/lwip/api_msg.h with 100% similarity]
resources/samples/local/os/include/net/lwip/arch.h [moved from RtSample/local/os/include/net/lwip/arch.h with 100% similarity]
resources/samples/local/os/include/net/lwip/arch/cc.h [moved from RtSample/local/os/include/net/lwip/arch/cc.h with 100% similarity]
resources/samples/local/os/include/net/lwip/arch/cpu.h [moved from RtSample/local/os/include/net/lwip/arch/cpu.h with 100% similarity]
resources/samples/local/os/include/net/lwip/arch/perf.h [moved from RtSample/local/os/include/net/lwip/arch/perf.h with 100% similarity]
resources/samples/local/os/include/net/lwip/arch/sys_arch.h [moved from RtSample/local/os/include/net/lwip/arch/sys_arch.h with 100% similarity]
resources/samples/local/os/include/net/lwip/debug.h [moved from RtSample/local/os/include/net/lwip/debug.h with 100% similarity]
resources/samples/local/os/include/net/lwip/def.h [moved from RtSample/local/os/include/net/lwip/def.h with 100% similarity]
resources/samples/local/os/include/net/lwip/dhcp.h [moved from RtSample/local/os/include/net/lwip/dhcp.h with 100% similarity]
resources/samples/local/os/include/net/lwip/err.h [moved from RtSample/local/os/include/net/lwip/err.h with 100% similarity]
resources/samples/local/os/include/net/lwip/init.h [moved from RtSample/local/os/include/net/lwip/init.h with 100% similarity]
resources/samples/local/os/include/net/lwip/ipv4/autoip.h [moved from RtSample/local/os/include/net/lwip/ipv4/autoip.h with 100% similarity]
resources/samples/local/os/include/net/lwip/ipv4/icmp.h [moved from RtSample/local/os/include/net/lwip/ipv4/icmp.h with 100% similarity]
resources/samples/local/os/include/net/lwip/ipv4/igmp.h [moved from RtSample/local/os/include/net/lwip/ipv4/igmp.h with 100% similarity]
resources/samples/local/os/include/net/lwip/ipv4/inet.h [moved from RtSample/local/os/include/net/lwip/ipv4/inet.h with 100% similarity]
resources/samples/local/os/include/net/lwip/ipv4/inet_chksum.h [moved from RtSample/local/os/include/net/lwip/ipv4/inet_chksum.h with 100% similarity]
resources/samples/local/os/include/net/lwip/ipv4/ip.h [moved from RtSample/local/os/include/net/lwip/ipv4/ip.h with 100% similarity]
resources/samples/local/os/include/net/lwip/ipv4/ip_addr.h [moved from RtSample/local/os/include/net/lwip/ipv4/ip_addr.h with 100% similarity]
resources/samples/local/os/include/net/lwip/ipv4/ip_frag.h [moved from RtSample/local/os/include/net/lwip/ipv4/ip_frag.h with 100% similarity]
resources/samples/local/os/include/net/lwip/ipv6/icmp6.h [moved from RtSample/local/os/include/net/lwip/ipv6/icmp6.h with 100% similarity]
resources/samples/local/os/include/net/lwip/ipv6/inet6.h [moved from RtSample/local/os/include/net/lwip/ipv6/inet6.h with 100% similarity]
resources/samples/local/os/include/net/lwip/ipv6/ip6.h [moved from RtSample/local/os/include/net/lwip/ipv6/ip6.h with 100% similarity]
resources/samples/local/os/include/net/lwip/ipv6/ip_addr6.h [moved from RtSample/local/os/include/net/lwip/ipv6/ip_addr6.h with 100% similarity]
resources/samples/local/os/include/net/lwip/lwipopts.h [moved from RtSample/local/os/include/net/lwip/lwipopts.h with 100% similarity]
resources/samples/local/os/include/net/lwip/mem.h [moved from RtSample/local/os/include/net/lwip/mem.h with 100% similarity]
resources/samples/local/os/include/net/lwip/memp.h [moved from RtSample/local/os/include/net/lwip/memp.h with 100% similarity]
resources/samples/local/os/include/net/lwip/memp_std.h [moved from RtSample/local/os/include/net/lwip/memp_std.h with 100% similarity]
resources/samples/local/os/include/net/lwip/netbuf.h [moved from RtSample/local/os/include/net/lwip/netbuf.h with 100% similarity]
resources/samples/local/os/include/net/lwip/netif.h [moved from RtSample/local/os/include/net/lwip/netif.h with 100% similarity]
resources/samples/local/os/include/net/lwip/netif/etharp.h [moved from RtSample/local/os/include/net/lwip/netif/etharp.h with 100% similarity]
resources/samples/local/os/include/net/lwip/netif/ppp_oe.h [moved from RtSample/local/os/include/net/lwip/netif/ppp_oe.h with 100% similarity]
resources/samples/local/os/include/net/lwip/netif/slipif.h [moved from RtSample/local/os/include/net/lwip/netif/slipif.h with 100% similarity]
resources/samples/local/os/include/net/lwip/netifapi.h [moved from RtSample/local/os/include/net/lwip/netifapi.h with 100% similarity]
resources/samples/local/os/include/net/lwip/opt.h [moved from RtSample/local/os/include/net/lwip/opt.h with 100% similarity]
resources/samples/local/os/include/net/lwip/pbuf.h [moved from RtSample/local/os/include/net/lwip/pbuf.h with 100% similarity]
resources/samples/local/os/include/net/lwip/posix/sys/socket.h [moved from RtSample/local/os/include/net/lwip/posix/sys/socket.h with 100% similarity]
resources/samples/local/os/include/net/lwip/raw.h [moved from RtSample/local/os/include/net/lwip/raw.h with 100% similarity]
resources/samples/local/os/include/net/lwip/sio.h [moved from RtSample/local/os/include/net/lwip/sio.h with 100% similarity]
resources/samples/local/os/include/net/lwip/snmp.h [moved from RtSample/local/os/include/net/lwip/snmp.h with 100% similarity]
resources/samples/local/os/include/net/lwip/snmp_asn1.h [moved from RtSample/local/os/include/net/lwip/snmp_asn1.h with 100% similarity]
resources/samples/local/os/include/net/lwip/snmp_msg.h [moved from RtSample/local/os/include/net/lwip/snmp_msg.h with 100% similarity]
resources/samples/local/os/include/net/lwip/snmp_structs.h [moved from RtSample/local/os/include/net/lwip/snmp_structs.h with 100% similarity]
resources/samples/local/os/include/net/lwip/sockets.h [moved from RtSample/local/os/include/net/lwip/sockets.h with 100% similarity]
resources/samples/local/os/include/net/lwip/stats.h [moved from RtSample/local/os/include/net/lwip/stats.h with 100% similarity]
resources/samples/local/os/include/net/lwip/sys.h [moved from RtSample/local/os/include/net/lwip/sys.h with 100% similarity]
resources/samples/local/os/include/net/lwip/tcp.h [moved from RtSample/local/os/include/net/lwip/tcp.h with 100% similarity]
resources/samples/local/os/include/net/lwip/tcp_impl.h [moved from RtSample/local/os/include/net/lwip/tcp_impl.h with 100% similarity]
resources/samples/local/os/include/net/lwip/tcpip.h [moved from RtSample/local/os/include/net/lwip/tcpip.h with 100% similarity]
resources/samples/local/os/include/net/lwip/timers.h [moved from RtSample/local/os/include/net/lwip/timers.h with 100% similarity]
resources/samples/local/os/include/net/lwip/udp.h [moved from RtSample/local/os/include/net/lwip/udp.h with 100% similarity]
resources/samples/local/os/include/net/route.h [moved from RtSample/local/os/include/net/route.h with 100% similarity]
resources/samples/local/os/include/netdb.h [moved from RtSample/local/os/include/netdb.h with 100% similarity]
resources/samples/local/os/include/netinet/arp.h [moved from RtSample/local/os/include/netinet/arp.h with 100% similarity]
resources/samples/local/os/include/netinet/ether.h [moved from RtSample/local/os/include/netinet/ether.h with 100% similarity]
resources/samples/local/os/include/netinet/in.h [moved from RtSample/local/os/include/netinet/in.h with 100% similarity]
resources/samples/local/os/include/netinet/ip.h [moved from RtSample/local/os/include/netinet/ip.h with 100% similarity]
resources/samples/local/os/include/netinet/ip6.h [moved from RtSample/local/os/include/netinet/ip6.h with 100% similarity]
resources/samples/local/os/include/netpacket/packet.h [moved from RtSample/local/os/include/netpacket/packet.h with 100% similarity]
resources/samples/local/os/include/poll.h [moved from RtSample/local/os/include/poll.h with 100% similarity]
resources/samples/local/os/include/pthread.h [moved from RtSample/local/os/include/pthread.h with 100% similarity]
resources/samples/local/os/include/queue.h [moved from RtSample/local/os/include/queue.h with 100% similarity]
resources/samples/local/os/include/sched.h [moved from RtSample/local/os/include/sched.h with 100% similarity]
resources/samples/local/os/include/semaphore.h [moved from RtSample/local/os/include/semaphore.h with 100% similarity]
resources/samples/local/os/include/signal.h [moved from RtSample/local/os/include/signal.h with 100% similarity]
resources/samples/local/os/include/spawn.h [moved from RtSample/local/os/include/spawn.h with 100% similarity]
resources/samples/local/os/include/stdbool.h [moved from RtSample/local/os/include/stdbool.h with 100% similarity]
resources/samples/local/os/include/stddef.h [moved from RtSample/local/os/include/stddef.h with 100% similarity]
resources/samples/local/os/include/stdint.h [moved from RtSample/local/os/include/stdint.h with 100% similarity]
resources/samples/local/os/include/stdio.h [moved from RtSample/local/os/include/stdio.h with 100% similarity]
resources/samples/local/os/include/stdlib.h [moved from RtSample/local/os/include/stdlib.h with 100% similarity]
resources/samples/local/os/include/string.h [moved from RtSample/local/os/include/string.h with 100% similarity]
resources/samples/local/os/include/sys/custom_file.h [moved from RtSample/local/os/include/sys/custom_file.h with 100% similarity]
resources/samples/local/os/include/sys/ioctl.h [moved from RtSample/local/os/include/sys/ioctl.h with 100% similarity]
resources/samples/local/os/include/sys/ipc.h [moved from RtSample/local/os/include/sys/ipc.h with 100% similarity]
resources/samples/local/os/include/sys/mman.h [moved from RtSample/local/os/include/sys/mman.h with 100% similarity]
resources/samples/local/os/include/sys/mount.h [moved from RtSample/local/os/include/sys/mount.h with 100% similarity]
resources/samples/local/os/include/sys/prctl.h [moved from RtSample/local/os/include/sys/prctl.h with 100% similarity]
resources/samples/local/os/include/sys/select.h [moved from RtSample/local/os/include/sys/select.h with 100% similarity]
resources/samples/local/os/include/sys/sendfile.h [moved from RtSample/local/os/include/sys/sendfile.h with 100% similarity]
resources/samples/local/os/include/sys/shm.h [moved from RtSample/local/os/include/sys/shm.h with 100% similarity]
resources/samples/local/os/include/sys/sock_internal.h [moved from RtSample/local/os/include/sys/sock_internal.h with 100% similarity]
resources/samples/local/os/include/sys/socket.h [moved from RtSample/local/os/include/sys/socket.h with 100% similarity]
resources/samples/local/os/include/sys/sockio.h [moved from RtSample/local/os/include/sys/sockio.h with 100% similarity]
resources/samples/local/os/include/sys/stat.h [moved from RtSample/local/os/include/sys/stat.h with 100% similarity]
resources/samples/local/os/include/sys/statfs.h [moved from RtSample/local/os/include/sys/statfs.h with 100% similarity]
resources/samples/local/os/include/sys/syscall.h [moved from RtSample/local/os/include/sys/syscall.h with 100% similarity]
resources/samples/local/os/include/sys/time.h [moved from RtSample/local/os/include/sys/time.h with 100% similarity]
resources/samples/local/os/include/sys/types.h [moved from RtSample/local/os/include/sys/types.h with 100% similarity]
resources/samples/local/os/include/sys/un.h [moved from RtSample/local/os/include/sys/un.h with 100% similarity]
resources/samples/local/os/include/sys/vfs.h [moved from RtSample/local/os/include/sys/vfs.h with 100% similarity]
resources/samples/local/os/include/sys/wait.h [moved from RtSample/local/os/include/sys/wait.h with 100% similarity]
resources/samples/local/os/include/syscall.h [moved from RtSample/local/os/include/syscall.h with 100% similarity]
resources/samples/local/os/include/syslog.h [moved from RtSample/local/os/include/syslog.h with 100% similarity]
resources/samples/local/os/include/termios.h [moved from RtSample/local/os/include/termios.h with 100% similarity]
resources/samples/local/os/include/threads.h [moved from RtSample/local/os/include/threads.h with 100% similarity]
resources/samples/local/os/include/time.h [moved from RtSample/local/os/include/time.h with 100% similarity]
resources/samples/local/os/include/tinyara/.gitignore [moved from RtSample/local/os/include/tinyara/.gitignore with 100% similarity]
resources/samples/local/os/include/tinyara/addrenv.h [moved from RtSample/local/os/include/tinyara/addrenv.h with 100% similarity]
resources/samples/local/os/include/tinyara/analog/adc.h [moved from RtSample/local/os/include/tinyara/analog/adc.h with 100% similarity]
resources/samples/local/os/include/tinyara/arch.h [moved from RtSample/local/os/include/tinyara/arch.h with 100% similarity]
resources/samples/local/os/include/tinyara/ascii.h [moved from RtSample/local/os/include/tinyara/ascii.h with 100% similarity]
resources/samples/local/os/include/tinyara/board.h [moved from RtSample/local/os/include/tinyara/board.h with 100% similarity]
resources/samples/local/os/include/tinyara/can.h [moved from RtSample/local/os/include/tinyara/can.h with 100% similarity]
resources/samples/local/os/include/tinyara/clock.h [moved from RtSample/local/os/include/tinyara/clock.h with 100% similarity]
resources/samples/local/os/include/tinyara/compiler.h [moved from RtSample/local/os/include/tinyara/compiler.h with 100% similarity]
resources/samples/local/os/include/tinyara/configdata.h [moved from RtSample/local/os/include/tinyara/configdata.h with 100% similarity]
resources/samples/local/os/include/tinyara/float.h [moved from RtSample/local/os/include/tinyara/float.h with 100% similarity]
resources/samples/local/os/include/tinyara/fota/fota.h [moved from RtSample/local/os/include/tinyara/fota/fota.h with 100% similarity]
resources/samples/local/os/include/tinyara/fs/dirent.h [moved from RtSample/local/os/include/tinyara/fs/dirent.h with 100% similarity]
resources/samples/local/os/include/tinyara/fs/fs.h [moved from RtSample/local/os/include/tinyara/fs/fs.h with 100% similarity]
resources/samples/local/os/include/tinyara/fs/fs_utils.h [moved from RtSample/local/os/include/tinyara/fs/fs_utils.h with 100% similarity]
resources/samples/local/os/include/tinyara/fs/ioctl.h [moved from RtSample/local/os/include/tinyara/fs/ioctl.h with 100% similarity]
resources/samples/local/os/include/tinyara/fs/mksmartfs.h [moved from RtSample/local/os/include/tinyara/fs/mksmartfs.h with 100% similarity]
resources/samples/local/os/include/tinyara/fs/mtd.h [moved from RtSample/local/os/include/tinyara/fs/mtd.h with 100% similarity]
resources/samples/local/os/include/tinyara/fs/procfs.h [moved from RtSample/local/os/include/tinyara/fs/procfs.h with 100% similarity]
resources/samples/local/os/include/tinyara/fs/ramdisk.h [moved from RtSample/local/os/include/tinyara/fs/ramdisk.h with 100% similarity]
resources/samples/local/os/include/tinyara/fs/smart.h [moved from RtSample/local/os/include/tinyara/fs/smart.h with 100% similarity]
resources/samples/local/os/include/tinyara/fs/smart_procfs.h [moved from RtSample/local/os/include/tinyara/fs/smart_procfs.h with 100% similarity]
resources/samples/local/os/include/tinyara/gpio.h [moved from RtSample/local/os/include/tinyara/gpio.h with 100% similarity]
resources/samples/local/os/include/tinyara/i2c.h [moved from RtSample/local/os/include/tinyara/i2c.h with 100% similarity]
resources/samples/local/os/include/tinyara/init.h [moved from RtSample/local/os/include/tinyara/init.h with 100% similarity]
resources/samples/local/os/include/tinyara/irq.h [moved from RtSample/local/os/include/tinyara/irq.h with 100% similarity]
resources/samples/local/os/include/tinyara/kmalloc.h [moved from RtSample/local/os/include/tinyara/kmalloc.h with 100% similarity]
resources/samples/local/os/include/tinyara/kthread.h [moved from RtSample/local/os/include/tinyara/kthread.h with 100% similarity]
resources/samples/local/os/include/tinyara/lcd/ili9341.h [moved from RtSample/local/os/include/tinyara/lcd/ili9341.h with 100% similarity]
resources/samples/local/os/include/tinyara/lib.h [moved from RtSample/local/os/include/tinyara/lib.h with 100% similarity]
resources/samples/local/os/include/tinyara/logm.h [moved from RtSample/local/os/include/tinyara/logm.h with 100% similarity]
resources/samples/local/os/include/tinyara/math.h [moved from RtSample/local/os/include/tinyara/math.h with 100% similarity]
resources/samples/local/os/include/tinyara/mm/gran.h [moved from RtSample/local/os/include/tinyara/mm/gran.h with 100% similarity]
resources/samples/local/os/include/tinyara/mm/mm.h [moved from RtSample/local/os/include/tinyara/mm/mm.h with 100% similarity]
resources/samples/local/os/include/tinyara/mm/shm.h [moved from RtSample/local/os/include/tinyara/mm/shm.h with 100% similarity]
resources/samples/local/os/include/tinyara/mmcsd.h [moved from RtSample/local/os/include/tinyara/mmcsd.h with 100% similarity]
resources/samples/local/os/include/tinyara/mqueue.h [moved from RtSample/local/os/include/tinyara/mqueue.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/cs89x0.h [moved from RtSample/local/os/include/tinyara/net/cs89x0.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/dns.h [moved from RtSample/local/os/include/tinyara/net/dns.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/enc28j60.h [moved from RtSample/local/os/include/tinyara/net/enc28j60.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/encx24j600.h [moved from RtSample/local/os/include/tinyara/net/encx24j600.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/ethernet.h [moved from RtSample/local/os/include/tinyara/net/ethernet.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/gmii.h [moved from RtSample/local/os/include/tinyara/net/gmii.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/ioctl.h [moved from RtSample/local/os/include/tinyara/net/ioctl.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/ip.h [moved from RtSample/local/os/include/tinyara/net/ip.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/loopback.h [moved from RtSample/local/os/include/tinyara/net/loopback.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/mii.h [moved from RtSample/local/os/include/tinyara/net/mii.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/net.h [moved from RtSample/local/os/include/tinyara/net/net.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/netdev.h [moved from RtSample/local/os/include/tinyara/net/netdev.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/netiob.h [moved from RtSample/local/os/include/tinyara/net/netiob.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/phy.h [moved from RtSample/local/os/include/tinyara/net/phy.h with 100% similarity]
resources/samples/local/os/include/tinyara/net/telnet.h [moved from RtSample/local/os/include/tinyara/net/telnet.h with 100% similarity]
resources/samples/local/os/include/tinyara/page.h [moved from RtSample/local/os/include/tinyara/page.h with 100% similarity]
resources/samples/local/os/include/tinyara/pgalloc.h [moved from RtSample/local/os/include/tinyara/pgalloc.h with 100% similarity]
resources/samples/local/os/include/tinyara/pm/pm.h [moved from RtSample/local/os/include/tinyara/pm/pm.h with 100% similarity]
resources/samples/local/os/include/tinyara/power/battery_charger.h [moved from RtSample/local/os/include/tinyara/power/battery_charger.h with 100% similarity]
resources/samples/local/os/include/tinyara/power/battery_gauge.h [moved from RtSample/local/os/include/tinyara/power/battery_gauge.h with 100% similarity]
resources/samples/local/os/include/tinyara/power/battery_ioctl.h [moved from RtSample/local/os/include/tinyara/power/battery_ioctl.h with 100% similarity]
resources/samples/local/os/include/tinyara/power/relay.h [moved from RtSample/local/os/include/tinyara/power/relay.h with 100% similarity]
resources/samples/local/os/include/tinyara/progmem.h [moved from RtSample/local/os/include/tinyara/progmem.h with 100% similarity]
resources/samples/local/os/include/tinyara/pthread.h [moved from RtSample/local/os/include/tinyara/pthread.h with 100% similarity]
resources/samples/local/os/include/tinyara/pwm.h [moved from RtSample/local/os/include/tinyara/pwm.h with 100% similarity]
resources/samples/local/os/include/tinyara/regex.h [moved from RtSample/local/os/include/tinyara/regex.h with 100% similarity]
resources/samples/local/os/include/tinyara/rtc.h [moved from RtSample/local/os/include/tinyara/rtc.h with 100% similarity]
resources/samples/local/os/include/tinyara/rwbuffer.h [moved from RtSample/local/os/include/tinyara/rwbuffer.h with 100% similarity]
resources/samples/local/os/include/tinyara/sched.h [moved from RtSample/local/os/include/tinyara/sched.h with 100% similarity]
resources/samples/local/os/include/tinyara/sdio.h [moved from RtSample/local/os/include/tinyara/sdio.h with 100% similarity]
resources/samples/local/os/include/tinyara/semaphore.h [moved from RtSample/local/os/include/tinyara/semaphore.h with 100% similarity]
resources/samples/local/os/include/tinyara/sensors/qencoder.h [moved from RtSample/local/os/include/tinyara/sensors/qencoder.h with 100% similarity]
resources/samples/local/os/include/tinyara/sercomm/msgb.h [moved from RtSample/local/os/include/tinyara/sercomm/msgb.h with 100% similarity]
resources/samples/local/os/include/tinyara/sercomm/sercomm.h [moved from RtSample/local/os/include/tinyara/sercomm/sercomm.h with 100% similarity]
resources/samples/local/os/include/tinyara/sercomm/sercomm_cons.h [moved from RtSample/local/os/include/tinyara/sercomm/sercomm_cons.h with 100% similarity]
resources/samples/local/os/include/tinyara/serial/serial.h [moved from RtSample/local/os/include/tinyara/serial/serial.h with 100% similarity]
resources/samples/local/os/include/tinyara/serial/tioctl.h [moved from RtSample/local/os/include/tinyara/serial/tioctl.h with 100% similarity]
resources/samples/local/os/include/tinyara/serial/uart_16550.h [moved from RtSample/local/os/include/tinyara/serial/uart_16550.h with 100% similarity]
resources/samples/local/os/include/tinyara/spawn.h [moved from RtSample/local/os/include/tinyara/spawn.h with 100% similarity]
resources/samples/local/os/include/tinyara/spi/spi.h [moved from RtSample/local/os/include/tinyara/spi/spi.h with 100% similarity]
resources/samples/local/os/include/tinyara/spi/spi_bitbang.c [moved from RtSample/local/os/include/tinyara/spi/spi_bitbang.c with 100% similarity]
resources/samples/local/os/include/tinyara/spi/spi_bitbang.h [moved from RtSample/local/os/include/tinyara/spi/spi_bitbang.h with 100% similarity]
resources/samples/local/os/include/tinyara/stdarg.h [moved from RtSample/local/os/include/tinyara/stdarg.h with 100% similarity]
resources/samples/local/os/include/tinyara/streams.h [moved from RtSample/local/os/include/tinyara/streams.h with 100% similarity]
resources/samples/local/os/include/tinyara/syslog/ramlog.h [moved from RtSample/local/os/include/tinyara/syslog/ramlog.h with 100% similarity]
resources/samples/local/os/include/tinyara/syslog/syslog.h [moved from RtSample/local/os/include/tinyara/syslog/syslog.h with 100% similarity]
resources/samples/local/os/include/tinyara/syslog/syslog_console.h [moved from RtSample/local/os/include/tinyara/syslog/syslog_console.h with 100% similarity]
resources/samples/local/os/include/tinyara/time.h [moved from RtSample/local/os/include/tinyara/time.h with 100% similarity]
resources/samples/local/os/include/tinyara/timer.h [moved from RtSample/local/os/include/tinyara/timer.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/cdc.h [moved from RtSample/local/os/include/tinyara/usb/cdc.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/cdcacm.h [moved from RtSample/local/os/include/tinyara/usb/cdcacm.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/composite.h [moved from RtSample/local/os/include/tinyara/usb/composite.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/ehci.h [moved from RtSample/local/os/include/tinyara/usb/ehci.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/hid.h [moved from RtSample/local/os/include/tinyara/usb/hid.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/hid_parser.h [moved from RtSample/local/os/include/tinyara/usb/hid_parser.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/hub.h [moved from RtSample/local/os/include/tinyara/usb/hub.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/ohci.h [moved from RtSample/local/os/include/tinyara/usb/ohci.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/pl2303.h [moved from RtSample/local/os/include/tinyara/usb/pl2303.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/storage.h [moved from RtSample/local/os/include/tinyara/usb/storage.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/usb.h [moved from RtSample/local/os/include/tinyara/usb/usb.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/usbdev.h [moved from RtSample/local/os/include/tinyara/usb/usbdev.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/usbdev_trace.h [moved from RtSample/local/os/include/tinyara/usb/usbdev_trace.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/usbhost.h [moved from RtSample/local/os/include/tinyara/usb/usbhost.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/usbhost_devaddr.h [moved from RtSample/local/os/include/tinyara/usb/usbhost_devaddr.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/usbhost_trace.h [moved from RtSample/local/os/include/tinyara/usb/usbhost_trace.h with 100% similarity]
resources/samples/local/os/include/tinyara/usb/usbmsc.h [moved from RtSample/local/os/include/tinyara/usb/usbmsc.h with 100% similarity]
resources/samples/local/os/include/tinyara/userspace.h [moved from RtSample/local/os/include/tinyara/userspace.h with 100% similarity]
resources/samples/local/os/include/tinyara/video/fb.h [moved from RtSample/local/os/include/tinyara/video/fb.h with 100% similarity]
resources/samples/local/os/include/tinyara/video/rgbcolors.h [moved from RtSample/local/os/include/tinyara/video/rgbcolors.h with 100% similarity]
resources/samples/local/os/include/tinyara/vt100.h [moved from RtSample/local/os/include/tinyara/vt100.h with 100% similarity]
resources/samples/local/os/include/tinyara/watchdog.h [moved from RtSample/local/os/include/tinyara/watchdog.h with 100% similarity]
resources/samples/local/os/include/tinyara/wdog.h [moved from RtSample/local/os/include/tinyara/wdog.h with 100% similarity]
resources/samples/local/os/include/tinyara/wqueue.h [moved from RtSample/local/os/include/tinyara/wqueue.h with 100% similarity]
resources/samples/local/os/include/tls/aes.h [moved from RtSample/local/os/include/tls/aes.h with 100% similarity]
resources/samples/local/os/include/tls/aes_api.h [moved from RtSample/local/os/include/tls/aes_api.h with 100% similarity]
resources/samples/local/os/include/tls/aesni.h [moved from RtSample/local/os/include/tls/aesni.h with 100% similarity]
resources/samples/local/os/include/tls/arc4.h [moved from RtSample/local/os/include/tls/arc4.h with 100% similarity]
resources/samples/local/os/include/tls/asn1.h [moved from RtSample/local/os/include/tls/asn1.h with 100% similarity]
resources/samples/local/os/include/tls/asn1write.h [moved from RtSample/local/os/include/tls/asn1write.h with 100% similarity]
resources/samples/local/os/include/tls/base64.h [moved from RtSample/local/os/include/tls/base64.h with 100% similarity]
resources/samples/local/os/include/tls/bignum.h [moved from RtSample/local/os/include/tls/bignum.h with 100% similarity]
resources/samples/local/os/include/tls/blowfish.h [moved from RtSample/local/os/include/tls/blowfish.h with 100% similarity]
resources/samples/local/os/include/tls/bn_mul.h [moved from RtSample/local/os/include/tls/bn_mul.h with 100% similarity]
resources/samples/local/os/include/tls/camellia.h [moved from RtSample/local/os/include/tls/camellia.h with 100% similarity]
resources/samples/local/os/include/tls/ccm.h [moved from RtSample/local/os/include/tls/ccm.h with 100% similarity]
resources/samples/local/os/include/tls/certs.h [moved from RtSample/local/os/include/tls/certs.h with 100% similarity]
resources/samples/local/os/include/tls/check_config.h [moved from RtSample/local/os/include/tls/check_config.h with 100% similarity]
resources/samples/local/os/include/tls/cipher.h [moved from RtSample/local/os/include/tls/cipher.h with 100% similarity]
resources/samples/local/os/include/tls/cipher_internal.h [moved from RtSample/local/os/include/tls/cipher_internal.h with 100% similarity]
resources/samples/local/os/include/tls/cmac.h [moved from RtSample/local/os/include/tls/cmac.h with 100% similarity]
resources/samples/local/os/include/tls/compat-1.3.h [moved from RtSample/local/os/include/tls/compat-1.3.h with 100% similarity]
resources/samples/local/os/include/tls/config.h [moved from RtSample/local/os/include/tls/config.h with 100% similarity]
resources/samples/local/os/include/tls/configs/README.txt [moved from RtSample/local/os/net/tls/configs/README.txt with 100% similarity]
resources/samples/local/os/include/tls/configs/config-ccm-psk-tls1_2.h [moved from RtSample/local/os/include/tls/configs/config-ccm-psk-tls1_2.h with 100% similarity]
resources/samples/local/os/include/tls/configs/config-mini-tls1_1.h [moved from RtSample/local/os/include/tls/configs/config-mini-tls1_1.h with 100% similarity]
resources/samples/local/os/include/tls/configs/config-picocoin.h [moved from RtSample/local/os/include/tls/configs/config-picocoin.h with 100% similarity]
resources/samples/local/os/include/tls/configs/config-suite-b.h [moved from RtSample/local/os/include/tls/configs/config-suite-b.h with 100% similarity]
resources/samples/local/os/include/tls/configs/config_ori.h [moved from RtSample/local/os/include/tls/configs/config_ori.h with 100% similarity]
resources/samples/local/os/include/tls/configs/ssl_client1.c [moved from RtSample/local/os/include/tls/configs/ssl_client1.c with 100% similarity]
resources/samples/local/os/include/tls/configs/ssl_server.c [moved from RtSample/local/os/include/tls/configs/ssl_server.c with 100% similarity]
resources/samples/local/os/include/tls/configs/tlstest.txt [moved from RtSample/local/os/net/tls/configs/tlstest.txt with 100% similarity]
resources/samples/local/os/include/tls/ctr_drbg.h [moved from RtSample/local/os/include/tls/ctr_drbg.h with 100% similarity]
resources/samples/local/os/include/tls/debug.h [moved from RtSample/local/os/include/tls/debug.h with 100% similarity]
resources/samples/local/os/include/tls/des.h [moved from RtSample/local/os/include/tls/des.h with 100% similarity]
resources/samples/local/os/include/tls/dhm.h [moved from RtSample/local/os/include/tls/dhm.h with 100% similarity]
resources/samples/local/os/include/tls/ecdh.h [moved from RtSample/local/os/include/tls/ecdh.h with 100% similarity]
resources/samples/local/os/include/tls/ecdsa.h [moved from RtSample/local/os/include/tls/ecdsa.h with 100% similarity]
resources/samples/local/os/include/tls/ecjpake.h [moved from RtSample/local/os/include/tls/ecjpake.h with 100% similarity]
resources/samples/local/os/include/tls/ecp.h [moved from RtSample/local/os/include/tls/ecp.h with 100% similarity]
resources/samples/local/os/include/tls/entropy.h [moved from RtSample/local/os/include/tls/entropy.h with 100% similarity]
resources/samples/local/os/include/tls/entropy_poll.h [moved from RtSample/local/os/include/tls/entropy_poll.h with 100% similarity]
resources/samples/local/os/include/tls/error.h [moved from RtSample/local/os/include/tls/error.h with 100% similarity]
resources/samples/local/os/include/tls/gcm.h [moved from RtSample/local/os/include/tls/gcm.h with 100% similarity]
resources/samples/local/os/include/tls/havege.h [moved from RtSample/local/os/include/tls/havege.h with 100% similarity]
resources/samples/local/os/include/tls/hmac_drbg.h [moved from RtSample/local/os/include/tls/hmac_drbg.h with 100% similarity]
resources/samples/local/os/include/tls/md.h [moved from RtSample/local/os/include/tls/md.h with 100% similarity]
resources/samples/local/os/include/tls/md2.h [moved from RtSample/local/os/include/tls/md2.h with 100% similarity]
resources/samples/local/os/include/tls/md4.h [moved from RtSample/local/os/include/tls/md4.h with 100% similarity]
resources/samples/local/os/include/tls/md5.h [moved from RtSample/local/os/include/tls/md5.h with 100% similarity]
resources/samples/local/os/include/tls/md_internal.h [moved from RtSample/local/os/include/tls/md_internal.h with 100% similarity]
resources/samples/local/os/include/tls/memory_buffer_alloc.h [moved from RtSample/local/os/include/tls/memory_buffer_alloc.h with 100% similarity]
resources/samples/local/os/include/tls/net.h [moved from RtSample/local/os/include/tls/net.h with 100% similarity]
resources/samples/local/os/include/tls/net_sockets.h [moved from RtSample/local/os/include/tls/net_sockets.h with 100% similarity]
resources/samples/local/os/include/tls/oid.h [moved from RtSample/local/os/include/tls/oid.h with 100% similarity]
resources/samples/local/os/include/tls/padlock.h [moved from RtSample/local/os/include/tls/padlock.h with 100% similarity]
resources/samples/local/os/include/tls/pem.h [moved from RtSample/local/os/include/tls/pem.h with 100% similarity]
resources/samples/local/os/include/tls/pk.h [moved from RtSample/local/os/include/tls/pk.h with 100% similarity]
resources/samples/local/os/include/tls/pk_internal.h [moved from RtSample/local/os/include/tls/pk_internal.h with 100% similarity]
resources/samples/local/os/include/tls/pkcs11.h [moved from RtSample/local/os/include/tls/pkcs11.h with 100% similarity]
resources/samples/local/os/include/tls/pkcs12.h [moved from RtSample/local/os/include/tls/pkcs12.h with 100% similarity]
resources/samples/local/os/include/tls/pkcs5.h [moved from RtSample/local/os/include/tls/pkcs5.h with 100% similarity]
resources/samples/local/os/include/tls/platform.h [moved from RtSample/local/os/include/tls/platform.h with 100% similarity]
resources/samples/local/os/include/tls/platform_time.h [moved from RtSample/local/os/include/tls/platform_time.h with 100% similarity]
resources/samples/local/os/include/tls/ripemd160.h [moved from RtSample/local/os/include/tls/ripemd160.h with 100% similarity]
resources/samples/local/os/include/tls/rsa.h [moved from RtSample/local/os/include/tls/rsa.h with 100% similarity]
resources/samples/local/os/include/tls/see_api.h [moved from RtSample/local/os/include/tls/see_api.h with 100% similarity]
resources/samples/local/os/include/tls/sha1.h [moved from RtSample/local/os/include/tls/sha1.h with 100% similarity]
resources/samples/local/os/include/tls/sha256.h [moved from RtSample/local/os/include/tls/sha256.h with 100% similarity]
resources/samples/local/os/include/tls/sha512.h [moved from RtSample/local/os/include/tls/sha512.h with 100% similarity]
resources/samples/local/os/include/tls/ssl.h [moved from RtSample/local/os/include/tls/ssl.h with 100% similarity]
resources/samples/local/os/include/tls/ssl_cache.h [moved from RtSample/local/os/include/tls/ssl_cache.h with 100% similarity]
resources/samples/local/os/include/tls/ssl_ciphersuites.h [moved from RtSample/local/os/include/tls/ssl_ciphersuites.h with 100% similarity]
resources/samples/local/os/include/tls/ssl_client.h [moved from RtSample/local/os/include/tls/ssl_client.h with 100% similarity]
resources/samples/local/os/include/tls/ssl_cookie.h [moved from RtSample/local/os/include/tls/ssl_cookie.h with 100% similarity]
resources/samples/local/os/include/tls/ssl_internal.h [moved from RtSample/local/os/include/tls/ssl_internal.h with 100% similarity]
resources/samples/local/os/include/tls/ssl_ticket.h [moved from RtSample/local/os/include/tls/ssl_ticket.h with 100% similarity]
resources/samples/local/os/include/tls/threading.h [moved from RtSample/local/os/include/tls/threading.h with 100% similarity]
resources/samples/local/os/include/tls/timing.h [moved from RtSample/local/os/include/tls/timing.h with 100% similarity]
resources/samples/local/os/include/tls/version.h [moved from RtSample/local/os/include/tls/version.h with 100% similarity]
resources/samples/local/os/include/tls/x509.h [moved from RtSample/local/os/include/tls/x509.h with 100% similarity]
resources/samples/local/os/include/tls/x509_crl.h [moved from RtSample/local/os/include/tls/x509_crl.h with 100% similarity]
resources/samples/local/os/include/tls/x509_crt.h [moved from RtSample/local/os/include/tls/x509_crt.h with 100% similarity]
resources/samples/local/os/include/tls/x509_csr.h [moved from RtSample/local/os/include/tls/x509_csr.h with 100% similarity]
resources/samples/local/os/include/tls/xtea.h [moved from RtSample/local/os/include/tls/xtea.h with 100% similarity]
resources/samples/local/os/include/uio.h [moved from RtSample/local/os/include/uio.h with 100% similarity]
resources/samples/local/os/include/unistd.h [moved from RtSample/local/os/include/unistd.h with 100% similarity]
resources/samples/local/os/include/uuid/uuid.h [moved from RtSample/local/os/include/uuid/uuid.h with 100% similarity]
resources/samples/local/os/include/wchar.h [moved from RtSample/local/os/include/wchar.h with 100% similarity]
resources/samples/local/os/kernel/.gitignore [moved from RtSample/local/os/fs/.gitignore with 100% similarity]
resources/samples/local/os/kernel/Kconfig [moved from RtSample/local/os/kernel/Kconfig with 100% similarity]
resources/samples/local/os/kernel/Makefile [moved from RtSample/local/os/kernel/Makefile with 100% similarity]
resources/samples/local/os/kernel/clock/Make.defs [moved from RtSample/local/os/kernel/clock/Make.defs with 100% similarity]
resources/samples/local/os/kernel/clock/clock.h [moved from RtSample/local/os/kernel/clock/clock.h with 100% similarity]
resources/samples/local/os/kernel/clock/clock_abstime2ticks.c [moved from RtSample/local/os/kernel/clock/clock_abstime2ticks.c with 100% similarity]
resources/samples/local/os/kernel/clock/clock_dow.c [moved from RtSample/local/os/kernel/clock/clock_dow.c with 100% similarity]
resources/samples/local/os/kernel/clock/clock_getres.c [moved from RtSample/local/os/kernel/clock/clock_getres.c with 100% similarity]
resources/samples/local/os/kernel/clock/clock_gettime.c [moved from RtSample/local/os/kernel/clock/clock_gettime.c with 100% similarity]
resources/samples/local/os/kernel/clock/clock_gettimeofday.c [moved from RtSample/local/os/kernel/clock/clock_gettimeofday.c with 100% similarity]
resources/samples/local/os/kernel/clock/clock_initialize.c [moved from RtSample/local/os/kernel/clock/clock_initialize.c with 100% similarity]
resources/samples/local/os/kernel/clock/clock_settime.c [moved from RtSample/local/os/kernel/clock/clock_settime.c with 100% similarity]
resources/samples/local/os/kernel/clock/clock_systimer.c [moved from RtSample/local/os/kernel/clock/clock_systimer.c with 100% similarity]
resources/samples/local/os/kernel/clock/clock_systimespec.c [moved from RtSample/local/os/kernel/clock/clock_systimespec.c with 100% similarity]
resources/samples/local/os/kernel/clock/clock_ticks2time.c [moved from RtSample/local/os/kernel/clock/clock_ticks2time.c with 100% similarity]
resources/samples/local/os/kernel/clock/clock_time2ticks.c [moved from RtSample/local/os/kernel/clock/clock_time2ticks.c with 100% similarity]
resources/samples/local/os/kernel/environ/Make.defs [moved from RtSample/local/os/kernel/environ/Make.defs with 100% similarity]
resources/samples/local/os/kernel/environ/env_clearenv.c [moved from RtSample/local/os/kernel/environ/env_clearenv.c with 100% similarity]
resources/samples/local/os/kernel/environ/env_dup.c [moved from RtSample/local/os/kernel/environ/env_dup.c with 100% similarity]
resources/samples/local/os/kernel/environ/env_findvar.c [moved from RtSample/local/os/kernel/environ/env_findvar.c with 100% similarity]
resources/samples/local/os/kernel/environ/env_getenv.c [moved from RtSample/local/os/kernel/environ/env_getenv.c with 100% similarity]
resources/samples/local/os/kernel/environ/env_getenvironptr.c [moved from RtSample/local/os/kernel/environ/env_getenvironptr.c with 100% similarity]
resources/samples/local/os/kernel/environ/env_putenv.c [moved from RtSample/local/os/kernel/environ/env_putenv.c with 100% similarity]
resources/samples/local/os/kernel/environ/env_release.c [moved from RtSample/local/os/kernel/environ/env_release.c with 100% similarity]
resources/samples/local/os/kernel/environ/env_removevar.c [moved from RtSample/local/os/kernel/environ/env_removevar.c with 100% similarity]
resources/samples/local/os/kernel/environ/env_setenv.c [moved from RtSample/local/os/kernel/environ/env_setenv.c with 100% similarity]
resources/samples/local/os/kernel/environ/env_unsetenv.c [moved from RtSample/local/os/kernel/environ/env_unsetenv.c with 100% similarity]
resources/samples/local/os/kernel/environ/environ.h [moved from RtSample/local/os/kernel/environ/environ.h with 100% similarity]
resources/samples/local/os/kernel/errno/Make.defs [moved from RtSample/local/os/kernel/errno/Make.defs with 100% similarity]
resources/samples/local/os/kernel/errno/errno_get.c [moved from RtSample/local/os/kernel/errno/errno_get.c with 100% similarity]
resources/samples/local/os/kernel/errno/errno_getptr.c [moved from RtSample/local/os/kernel/errno/errno_getptr.c with 100% similarity]
resources/samples/local/os/kernel/errno/errno_set.c [moved from RtSample/local/os/kernel/errno/errno_set.c with 100% similarity]
resources/samples/local/os/kernel/group/Make.defs [moved from RtSample/local/os/kernel/group/Make.defs with 100% similarity]
resources/samples/local/os/kernel/group/group.h [moved from RtSample/local/os/kernel/group/group.h with 100% similarity]
resources/samples/local/os/kernel/group/group_addrenv.c [moved from RtSample/local/os/kernel/group/group_addrenv.c with 100% similarity]
resources/samples/local/os/kernel/group/group_childstatus.c [moved from RtSample/local/os/kernel/group/group_childstatus.c with 100% similarity]
resources/samples/local/os/kernel/group/group_create.c [moved from RtSample/local/os/kernel/group/group_create.c with 100% similarity]
resources/samples/local/os/kernel/group/group_find.c [moved from RtSample/local/os/kernel/group/group_find.c with 100% similarity]
resources/samples/local/os/kernel/group/group_foreachchild.c [moved from RtSample/local/os/kernel/group/group_foreachchild.c with 100% similarity]
resources/samples/local/os/kernel/group/group_free.c [moved from RtSample/local/os/kernel/group/group_free.c with 100% similarity]
resources/samples/local/os/kernel/group/group_join.c [moved from RtSample/local/os/kernel/group/group_join.c with 100% similarity]
resources/samples/local/os/kernel/group/group_killchildren.c [moved from RtSample/local/os/kernel/group/group_killchildren.c with 100% similarity]
resources/samples/local/os/kernel/group/group_leave.c [moved from RtSample/local/os/kernel/group/group_leave.c with 100% similarity]
resources/samples/local/os/kernel/group/group_malloc.c [moved from RtSample/local/os/kernel/group/group_malloc.c with 100% similarity]
resources/samples/local/os/kernel/group/group_setupidlefiles.c [moved from RtSample/local/os/kernel/group/group_setupidlefiles.c with 100% similarity]
resources/samples/local/os/kernel/group/group_setupstreams.c [moved from RtSample/local/os/kernel/group/group_setupstreams.c with 100% similarity]
resources/samples/local/os/kernel/group/group_setuptaskfiles.c [moved from RtSample/local/os/kernel/group/group_setuptaskfiles.c with 100% similarity]
resources/samples/local/os/kernel/group/group_signal.c [moved from RtSample/local/os/kernel/group/group_signal.c with 100% similarity]
resources/samples/local/os/kernel/group/group_zalloc.c [moved from RtSample/local/os/kernel/group/group_zalloc.c with 100% similarity]
resources/samples/local/os/kernel/init/Make.defs [moved from RtSample/local/os/kernel/init/Make.defs with 100% similarity]
resources/samples/local/os/kernel/init/init.h [moved from RtSample/local/os/kernel/init/init.h with 100% similarity]
resources/samples/local/os/kernel/init/os_bringup.c [moved from RtSample/local/os/kernel/init/os_bringup.c with 100% similarity]
resources/samples/local/os/kernel/init/os_start.c [moved from RtSample/local/os/kernel/init/os_start.c with 100% similarity]
resources/samples/local/os/kernel/irq/Make.defs [moved from RtSample/local/os/kernel/irq/Make.defs with 100% similarity]
resources/samples/local/os/kernel/irq/irq.h [moved from RtSample/local/os/kernel/irq/irq.h with 100% similarity]
resources/samples/local/os/kernel/irq/irq_attach.c [moved from RtSample/local/os/kernel/irq/irq_attach.c with 100% similarity]
resources/samples/local/os/kernel/irq/irq_dispatch.c [moved from RtSample/local/os/kernel/irq/irq_dispatch.c with 100% similarity]
resources/samples/local/os/kernel/irq/irq_initialize.c [moved from RtSample/local/os/kernel/irq/irq_initialize.c with 100% similarity]
resources/samples/local/os/kernel/irq/irq_unexpectedisr.c [moved from RtSample/local/os/kernel/irq/irq_unexpectedisr.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/Make.defs [moved from RtSample/local/os/kernel/mqueue/Make.defs with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_desclose.c [moved from RtSample/local/os/kernel/mqueue/mq_desclose.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_descreate.c [moved from RtSample/local/os/kernel/mqueue/mq_descreate.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_initialize.c [moved from RtSample/local/os/kernel/mqueue/mq_initialize.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_msgfree.c [moved from RtSample/local/os/kernel/mqueue/mq_msgfree.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_msgqalloc.c [moved from RtSample/local/os/kernel/mqueue/mq_msgqalloc.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_msgqfree.c [moved from RtSample/local/os/kernel/mqueue/mq_msgqfree.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_notify.c [moved from RtSample/local/os/kernel/mqueue/mq_notify.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_rcvinternal.c [moved from RtSample/local/os/kernel/mqueue/mq_rcvinternal.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_receive.c [moved from RtSample/local/os/kernel/mqueue/mq_receive.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_recover.c [moved from RtSample/local/os/kernel/mqueue/mq_recover.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_release.c [moved from RtSample/local/os/kernel/mqueue/mq_release.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_send.c [moved from RtSample/local/os/kernel/mqueue/mq_send.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_sndinternal.c [moved from RtSample/local/os/kernel/mqueue/mq_sndinternal.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_timedreceive.c [moved from RtSample/local/os/kernel/mqueue/mq_timedreceive.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_timedsend.c [moved from RtSample/local/os/kernel/mqueue/mq_timedsend.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mq_waitirq.c [moved from RtSample/local/os/kernel/mqueue/mq_waitirq.c with 100% similarity]
resources/samples/local/os/kernel/mqueue/mqueue.h [moved from RtSample/local/os/kernel/mqueue/mqueue.h with 100% similarity]
resources/samples/local/os/kernel/paging/Make.defs [moved from RtSample/local/os/kernel/paging/Make.defs with 100% similarity]
resources/samples/local/os/kernel/paging/paging.h [moved from RtSample/local/os/kernel/paging/paging.h with 100% similarity]
resources/samples/local/os/kernel/paging/pg_miss.c [moved from RtSample/local/os/kernel/paging/pg_miss.c with 100% similarity]
resources/samples/local/os/kernel/paging/pg_worker.c [moved from RtSample/local/os/kernel/paging/pg_worker.c with 100% similarity]
resources/samples/local/os/kernel/pthread/Make.defs [moved from RtSample/local/os/kernel/pthread/Make.defs with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread.h [moved from RtSample/local/os/kernel/pthread/pthread.h with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_barrierdestroy.c [moved from RtSample/local/os/kernel/pthread/pthread_barrierdestroy.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_barrierinit.c [moved from RtSample/local/os/kernel/pthread/pthread_barrierinit.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_barrierwait.c [moved from RtSample/local/os/kernel/pthread/pthread_barrierwait.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_cancel.c [moved from RtSample/local/os/kernel/pthread/pthread_cancel.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_completejoin.c [moved from RtSample/local/os/kernel/pthread/pthread_completejoin.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_condbroadcast.c [moved from RtSample/local/os/kernel/pthread/pthread_condbroadcast.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_conddestroy.c [moved from RtSample/local/os/kernel/pthread/pthread_conddestroy.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_condinit.c [moved from RtSample/local/os/kernel/pthread/pthread_condinit.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_condsignal.c [moved from RtSample/local/os/kernel/pthread/pthread_condsignal.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_condtimedwait.c [moved from RtSample/local/os/kernel/pthread/pthread_condtimedwait.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_condwait.c [moved from RtSample/local/os/kernel/pthread/pthread_condwait.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_create.c [moved from RtSample/local/os/kernel/pthread/pthread_create.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_detach.c [moved from RtSample/local/os/kernel/pthread/pthread_detach.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_exit.c [moved from RtSample/local/os/kernel/pthread/pthread_exit.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_findjoininfo.c [moved from RtSample/local/os/kernel/pthread/pthread_findjoininfo.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_getschedparam.c [moved from RtSample/local/os/kernel/pthread/pthread_getschedparam.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_getspecific.c [moved from RtSample/local/os/kernel/pthread/pthread_getspecific.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_initialize.c [moved from RtSample/local/os/kernel/pthread/pthread_initialize.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_join.c [moved from RtSample/local/os/kernel/pthread/pthread_join.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_keycreate.c [moved from RtSample/local/os/kernel/pthread/pthread_keycreate.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_keydelete.c [moved from RtSample/local/os/kernel/pthread/pthread_keydelete.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_kill.c [moved from RtSample/local/os/kernel/pthread/pthread_kill.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_mutexdestroy.c [moved from RtSample/local/os/kernel/pthread/pthread_mutexdestroy.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_mutexinit.c [moved from RtSample/local/os/kernel/pthread/pthread_mutexinit.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_mutexlock.c [moved from RtSample/local/os/kernel/pthread/pthread_mutexlock.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_mutextrylock.c [moved from RtSample/local/os/kernel/pthread/pthread_mutextrylock.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_mutexunlock.c [moved from RtSample/local/os/kernel/pthread/pthread_mutexunlock.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_once.c [moved from RtSample/local/os/kernel/pthread/pthread_once.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_release.c [moved from RtSample/local/os/kernel/pthread/pthread_release.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_setcancelstate.c [moved from RtSample/local/os/kernel/pthread/pthread_setcancelstate.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_setschedparam.c [moved from RtSample/local/os/kernel/pthread/pthread_setschedparam.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_setschedprio.c [moved from RtSample/local/os/kernel/pthread/pthread_setschedprio.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_setspecific.c [moved from RtSample/local/os/kernel/pthread/pthread_setspecific.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_sigmask.c [moved from RtSample/local/os/kernel/pthread/pthread_sigmask.c with 100% similarity]
resources/samples/local/os/kernel/pthread/pthread_yield.c [moved from RtSample/local/os/kernel/pthread/pthread_yield.c with 100% similarity]
resources/samples/local/os/kernel/sched/Make.defs [moved from RtSample/local/os/kernel/sched/Make.defs with 100% similarity]
resources/samples/local/os/kernel/sched/sched.h [moved from RtSample/local/os/kernel/sched/sched.h with 100% similarity]
resources/samples/local/os/kernel/sched/sched_addblocked.c [moved from RtSample/local/os/kernel/sched/sched_addblocked.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_addprioritized.c [moved from RtSample/local/os/kernel/sched/sched_addprioritized.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_addreadytorun.c [moved from RtSample/local/os/kernel/sched/sched_addreadytorun.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_cpuload.c [moved from RtSample/local/os/kernel/sched/sched_cpuload.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_foreach.c [moved from RtSample/local/os/kernel/sched/sched_foreach.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_free.c [moved from RtSample/local/os/kernel/sched/sched_free.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_garbage.c [moved from RtSample/local/os/kernel/sched/sched_garbage.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_getfiles.c [moved from RtSample/local/os/kernel/sched/sched_getfiles.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_getparam.c [moved from RtSample/local/os/kernel/sched/sched_getparam.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_getscheduler.c [moved from RtSample/local/os/kernel/sched/sched_getscheduler.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_getsockets.c [moved from RtSample/local/os/kernel/sched/sched_getsockets.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_getstreams.c [moved from RtSample/local/os/kernel/sched/sched_getstreams.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_gettcb.c [moved from RtSample/local/os/kernel/sched/sched_gettcb.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_lock.c [moved from RtSample/local/os/kernel/sched/sched_lock.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_lockcount.c [moved from RtSample/local/os/kernel/sched/sched_lockcount.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_mergepending.c [moved from RtSample/local/os/kernel/sched/sched_mergepending.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_processtimer.c [moved from RtSample/local/os/kernel/sched/sched_processtimer.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_releasetcb.c [moved from RtSample/local/os/kernel/sched/sched_releasetcb.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_removeblocked.c [moved from RtSample/local/os/kernel/sched/sched_removeblocked.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_removereadytorun.c [moved from RtSample/local/os/kernel/sched/sched_removereadytorun.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_reprioritize.c [moved from RtSample/local/os/kernel/sched/sched_reprioritize.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_rrgetinterval.c [moved from RtSample/local/os/kernel/sched/sched_rrgetinterval.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_self.c [moved from RtSample/local/os/kernel/sched/sched_self.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_setparam.c [moved from RtSample/local/os/kernel/sched/sched_setparam.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_setpriority.c [moved from RtSample/local/os/kernel/sched/sched_setpriority.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_setscheduler.c [moved from RtSample/local/os/kernel/sched/sched_setscheduler.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_timerexpiration.c [moved from RtSample/local/os/kernel/sched/sched_timerexpiration.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_unlock.c [moved from RtSample/local/os/kernel/sched/sched_unlock.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_verifytcb.c [moved from RtSample/local/os/kernel/sched/sched_verifytcb.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_wait.c [moved from RtSample/local/os/kernel/sched/sched_wait.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_waitid.c [moved from RtSample/local/os/kernel/sched/sched_waitid.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_waitpid.c [moved from RtSample/local/os/kernel/sched/sched_waitpid.c with 100% similarity]
resources/samples/local/os/kernel/sched/sched_yield.c [moved from RtSample/local/os/kernel/sched/sched_yield.c with 100% similarity]
resources/samples/local/os/kernel/semaphore/Make.defs [moved from RtSample/local/os/kernel/semaphore/Make.defs with 100% similarity]
resources/samples/local/os/kernel/semaphore/sem_destroy.c [moved from RtSample/local/os/kernel/semaphore/sem_destroy.c with 100% similarity]
resources/samples/local/os/kernel/semaphore/sem_holder.c [moved from RtSample/local/os/kernel/semaphore/sem_holder.c with 100% similarity]
resources/samples/local/os/kernel/semaphore/sem_initialize.c [moved from RtSample/local/os/kernel/semaphore/sem_initialize.c with 100% similarity]
resources/samples/local/os/kernel/semaphore/sem_post.c [moved from RtSample/local/os/kernel/semaphore/sem_post.c with 100% similarity]
resources/samples/local/os/kernel/semaphore/sem_recover.c [moved from RtSample/local/os/kernel/semaphore/sem_recover.c with 100% similarity]
resources/samples/local/os/kernel/semaphore/sem_timedwait.c [moved from RtSample/local/os/kernel/semaphore/sem_timedwait.c with 100% similarity]
resources/samples/local/os/kernel/semaphore/sem_trywait.c [moved from RtSample/local/os/kernel/semaphore/sem_trywait.c with 100% similarity]
resources/samples/local/os/kernel/semaphore/sem_wait.c [moved from RtSample/local/os/kernel/semaphore/sem_wait.c with 100% similarity]
resources/samples/local/os/kernel/semaphore/sem_waitirq.c [moved from RtSample/local/os/kernel/semaphore/sem_waitirq.c with 100% similarity]
resources/samples/local/os/kernel/semaphore/semaphore.h [moved from RtSample/local/os/kernel/semaphore/semaphore.h with 100% similarity]
resources/samples/local/os/kernel/signal/Make.defs [moved from RtSample/local/os/kernel/signal/Make.defs with 100% similarity]
resources/samples/local/os/kernel/signal/sig_action.c [moved from RtSample/local/os/kernel/signal/sig_action.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_allocatependingsigaction.c [moved from RtSample/local/os/kernel/signal/sig_allocatependingsigaction.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_cleanup.c [moved from RtSample/local/os/kernel/signal/sig_cleanup.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_deliver.c [moved from RtSample/local/os/kernel/signal/sig_deliver.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_dispatch.c [moved from RtSample/local/os/kernel/signal/sig_dispatch.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_findaction.c [moved from RtSample/local/os/kernel/signal/sig_findaction.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_initialize.c [moved from RtSample/local/os/kernel/signal/sig_initialize.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_kill.c [moved from RtSample/local/os/kernel/signal/sig_kill.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_lowest.c [moved from RtSample/local/os/kernel/signal/sig_lowest.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_mqnotempty.c [moved from RtSample/local/os/kernel/signal/sig_mqnotempty.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_nanosleep.c [moved from RtSample/local/os/kernel/signal/sig_nanosleep.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_pause.c [moved from RtSample/local/os/kernel/signal/sig_pause.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_pending.c [moved from RtSample/local/os/kernel/signal/sig_pending.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_procmask.c [moved from RtSample/local/os/kernel/signal/sig_procmask.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_queue.c [moved from RtSample/local/os/kernel/signal/sig_queue.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_releasependingsigaction.c [moved from RtSample/local/os/kernel/signal/sig_releasependingsigaction.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_releasependingsignal.c [moved from RtSample/local/os/kernel/signal/sig_releasependingsignal.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_removependingsignal.c [moved from RtSample/local/os/kernel/signal/sig_removependingsignal.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_suspend.c [moved from RtSample/local/os/kernel/signal/sig_suspend.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_timedwait.c [moved from RtSample/local/os/kernel/signal/sig_timedwait.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_unmaskpendingsignal.c [moved from RtSample/local/os/kernel/signal/sig_unmaskpendingsignal.c with 100% similarity]
resources/samples/local/os/kernel/signal/sig_waitinfo.c [moved from RtSample/local/os/kernel/signal/sig_waitinfo.c with 100% similarity]
resources/samples/local/os/kernel/signal/signal.h [moved from RtSample/local/os/kernel/signal/signal.h with 100% similarity]
resources/samples/local/os/kernel/task/Make.defs [moved from RtSample/local/os/kernel/task/Make.defs with 100% similarity]
resources/samples/local/os/kernel/task/exit.c [moved from RtSample/local/os/kernel/task/exit.c with 100% similarity]
resources/samples/local/os/kernel/task/spawn.h [moved from RtSample/local/os/kernel/task/spawn.h with 100% similarity]
resources/samples/local/os/kernel/task/task.h [moved from RtSample/local/os/kernel/task/task.h with 100% similarity]
resources/samples/local/os/kernel/task/task_activate.c [moved from RtSample/local/os/kernel/task/task_activate.c with 100% similarity]
resources/samples/local/os/kernel/task/task_atexit.c [moved from RtSample/local/os/kernel/task/task_atexit.c with 100% similarity]
resources/samples/local/os/kernel/task/task_create.c [moved from RtSample/local/os/kernel/task/task_create.c with 100% similarity]
resources/samples/local/os/kernel/task/task_delete.c [moved from RtSample/local/os/kernel/task/task_delete.c with 100% similarity]
resources/samples/local/os/kernel/task/task_execv.c [moved from RtSample/local/os/kernel/task/task_execv.c with 100% similarity]
resources/samples/local/os/kernel/task/task_exit.c [moved from RtSample/local/os/kernel/task/task_exit.c with 100% similarity]
resources/samples/local/os/kernel/task/task_exithook.c [moved from RtSample/local/os/kernel/task/task_exithook.c with 100% similarity]
resources/samples/local/os/kernel/task/task_getgroup.c [moved from RtSample/local/os/kernel/task/task_getgroup.c with 100% similarity]
resources/samples/local/os/kernel/task/task_getpid.c [moved from RtSample/local/os/kernel/task/task_getpid.c with 100% similarity]
resources/samples/local/os/kernel/task/task_init.c [moved from RtSample/local/os/kernel/task/task_init.c with 100% similarity]
resources/samples/local/os/kernel/task/task_onexit.c [moved from RtSample/local/os/kernel/task/task_onexit.c with 100% similarity]
resources/samples/local/os/kernel/task/task_posixspawn.c [moved from RtSample/local/os/kernel/task/task_posixspawn.c with 100% similarity]
resources/samples/local/os/kernel/task/task_prctl.c [moved from RtSample/local/os/kernel/task/task_prctl.c with 100% similarity]
resources/samples/local/os/kernel/task/task_recover.c [moved from RtSample/local/os/kernel/task/task_recover.c with 100% similarity]
resources/samples/local/os/kernel/task/task_reparent.c [moved from RtSample/local/os/kernel/task/task_reparent.c with 100% similarity]
resources/samples/local/os/kernel/task/task_restart.c [moved from RtSample/local/os/kernel/task/task_restart.c with 100% similarity]
resources/samples/local/os/kernel/task/task_setup.c [moved from RtSample/local/os/kernel/task/task_setup.c with 100% similarity]
resources/samples/local/os/kernel/task/task_spawn.c [moved from RtSample/local/os/kernel/task/task_spawn.c with 100% similarity]
resources/samples/local/os/kernel/task/task_spawnparms.c [moved from RtSample/local/os/kernel/task/task_spawnparms.c with 100% similarity]
resources/samples/local/os/kernel/task/task_start.c [moved from RtSample/local/os/kernel/task/task_start.c with 100% similarity]
resources/samples/local/os/kernel/task/task_starthook.c [moved from RtSample/local/os/kernel/task/task_starthook.c with 100% similarity]
resources/samples/local/os/kernel/task/task_terminate.c [moved from RtSample/local/os/kernel/task/task_terminate.c with 100% similarity]
resources/samples/local/os/kernel/task/task_vfork.c [moved from RtSample/local/os/kernel/task/task_vfork.c with 100% similarity]
resources/samples/local/os/kernel/timer/Make.defs [moved from RtSample/local/os/kernel/timer/Make.defs with 100% similarity]
resources/samples/local/os/kernel/timer/timer.h [moved from RtSample/local/os/kernel/timer/timer.h with 100% similarity]
resources/samples/local/os/kernel/timer/timer_create.c [moved from RtSample/local/os/kernel/timer/timer_create.c with 100% similarity]
resources/samples/local/os/kernel/timer/timer_delete.c [moved from RtSample/local/os/kernel/timer/timer_delete.c with 100% similarity]
resources/samples/local/os/kernel/timer/timer_getoverrun.c [moved from RtSample/local/os/kernel/timer/timer_getoverrun.c with 100% similarity]
resources/samples/local/os/kernel/timer/timer_gettime.c [moved from RtSample/local/os/kernel/timer/timer_gettime.c with 100% similarity]
resources/samples/local/os/kernel/timer/timer_initialize.c [moved from RtSample/local/os/kernel/timer/timer_initialize.c with 100% similarity]
resources/samples/local/os/kernel/timer/timer_release.c [moved from RtSample/local/os/kernel/timer/timer_release.c with 100% similarity]
resources/samples/local/os/kernel/timer/timer_settime.c [moved from RtSample/local/os/kernel/timer/timer_settime.c with 100% similarity]
resources/samples/local/os/kernel/wdog/Make.defs [moved from RtSample/local/os/kernel/wdog/Make.defs with 100% similarity]
resources/samples/local/os/kernel/wdog/wd_cancel.c [moved from RtSample/local/os/kernel/wdog/wd_cancel.c with 100% similarity]
resources/samples/local/os/kernel/wdog/wd_create.c [moved from RtSample/local/os/kernel/wdog/wd_create.c with 100% similarity]
resources/samples/local/os/kernel/wdog/wd_delete.c [moved from RtSample/local/os/kernel/wdog/wd_delete.c with 100% similarity]
resources/samples/local/os/kernel/wdog/wd_gettime.c [moved from RtSample/local/os/kernel/wdog/wd_gettime.c with 100% similarity]
resources/samples/local/os/kernel/wdog/wd_initialize.c [moved from RtSample/local/os/kernel/wdog/wd_initialize.c with 100% similarity]
resources/samples/local/os/kernel/wdog/wd_recover.c [moved from RtSample/local/os/kernel/wdog/wd_recover.c with 100% similarity]
resources/samples/local/os/kernel/wdog/wd_start.c [moved from RtSample/local/os/kernel/wdog/wd_start.c with 100% similarity]
resources/samples/local/os/kernel/wdog/wdog.h [moved from RtSample/local/os/kernel/wdog/wdog.h with 100% similarity]
resources/samples/local/os/kernel/wqueue/Make.defs [moved from RtSample/local/os/kernel/wqueue/Make.defs with 100% similarity]
resources/samples/local/os/kernel/wqueue/kwork_cancel.c [moved from RtSample/local/os/kernel/wqueue/kwork_cancel.c with 100% similarity]
resources/samples/local/os/kernel/wqueue/kwork_hpthread.c [moved from RtSample/local/os/kernel/wqueue/kwork_hpthread.c with 100% similarity]
resources/samples/local/os/kernel/wqueue/kwork_inherit.c [moved from RtSample/local/os/kernel/wqueue/kwork_inherit.c with 100% similarity]
resources/samples/local/os/kernel/wqueue/kwork_lpthread.c [moved from RtSample/local/os/kernel/wqueue/kwork_lpthread.c with 100% similarity]
resources/samples/local/os/kernel/wqueue/kwork_process.c [moved from RtSample/local/os/kernel/wqueue/kwork_process.c with 100% similarity]
resources/samples/local/os/kernel/wqueue/kwork_queue.c [moved from RtSample/local/os/kernel/wqueue/kwork_queue.c with 100% similarity]
resources/samples/local/os/kernel/wqueue/kwork_signal.c [moved from RtSample/local/os/kernel/wqueue/kwork_signal.c with 100% similarity]
resources/samples/local/os/kernel/wqueue/wqueue.h [moved from RtSample/local/os/kernel/wqueue/wqueue.h with 100% similarity]
resources/samples/local/os/logm/Kconfig [moved from RtSample/local/os/logm/Kconfig with 100% similarity]
resources/samples/local/os/logm/Makefile [moved from RtSample/local/os/logm/Makefile with 100% similarity]
resources/samples/local/os/logm/logm.c [moved from RtSample/local/os/logm/logm.c with 100% similarity]
resources/samples/local/os/logm/logm.h [moved from RtSample/local/os/logm/logm.h with 100% similarity]
resources/samples/local/os/logm/logm_init.c [moved from RtSample/local/os/logm/logm_init.c with 100% similarity]
resources/samples/local/os/logm/logm_process.c [moved from RtSample/local/os/logm/logm_process.c with 100% similarity]
resources/samples/local/os/logm/logm_test.c [moved from RtSample/local/os/logm/logm_test.c with 100% similarity]
resources/samples/local/os/logm/logm_test.h [moved from RtSample/local/os/logm/logm_test.h with 100% similarity]
resources/samples/local/os/mm/.gitignore [moved from RtSample/local/lib/libc/.gitignore with 100% similarity]
resources/samples/local/os/mm/Kconfig [moved from RtSample/local/os/mm/Kconfig with 100% similarity]
resources/samples/local/os/mm/Makefile [moved from RtSample/local/os/mm/Makefile with 100% similarity]
resources/samples/local/os/mm/README.txt [moved from RtSample/local/os/mm/README.txt with 100% similarity]
resources/samples/local/os/mm/bin/.gitignore [moved from RtSample/local/lib/libc/ubin/.gitignore with 100% similarity]
resources/samples/local/os/mm/bin/Makefile [moved from RtSample/local/os/mm/bin/Makefile with 100% similarity]
resources/samples/local/os/mm/kbin/.gitignore [moved from RtSample/local/lib/libc/kbin/.gitignore with 100% similarity]
resources/samples/local/os/mm/kbin/Makefile [moved from RtSample/local/os/mm/kbin/Makefile with 100% similarity]
resources/samples/local/os/mm/kmm_heap/Make.defs [moved from RtSample/local/os/mm/kmm_heap/Make.defs with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_addregion.c [moved from RtSample/local/os/mm/kmm_heap/kmm_addregion.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_brkaddr.c [moved from RtSample/local/os/mm/kmm_heap/kmm_brkaddr.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_calloc.c [moved from RtSample/local/os/mm/kmm_heap/kmm_calloc.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_extend.c [moved from RtSample/local/os/mm/kmm_heap/kmm_extend.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_free.c [moved from RtSample/local/os/mm/kmm_heap/kmm_free.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_heapmember.c [moved from RtSample/local/os/mm/kmm_heap/kmm_heapmember.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_initialize.c [moved from RtSample/local/os/mm/kmm_heap/kmm_initialize.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_kernel.c [moved from RtSample/local/os/mm/kmm_heap/kmm_kernel.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_mallinfo.c [moved from RtSample/local/os/mm/kmm_heap/kmm_mallinfo.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_malloc.c [moved from RtSample/local/os/mm/kmm_heap/kmm_malloc.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_memalign.c [moved from RtSample/local/os/mm/kmm_heap/kmm_memalign.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_realloc.c [moved from RtSample/local/os/mm/kmm_heap/kmm_realloc.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_sbrk.c [moved from RtSample/local/os/mm/kmm_heap/kmm_sbrk.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_sem.c [moved from RtSample/local/os/mm/kmm_heap/kmm_sem.c with 100% similarity]
resources/samples/local/os/mm/kmm_heap/kmm_zalloc.c [moved from RtSample/local/os/mm/kmm_heap/kmm_zalloc.c with 100% similarity]
resources/samples/local/os/mm/mm_gran/Make.defs [moved from RtSample/local/os/mm/mm_gran/Make.defs with 100% similarity]
resources/samples/local/os/mm/mm_gran/mm_gran.h [moved from RtSample/local/os/mm/mm_gran/mm_gran.h with 100% similarity]
resources/samples/local/os/mm/mm_gran/mm_granalloc.c [moved from RtSample/local/os/mm/mm_gran/mm_granalloc.c with 100% similarity]
resources/samples/local/os/mm/mm_gran/mm_grancritical.c [moved from RtSample/local/os/mm/mm_gran/mm_grancritical.c with 100% similarity]
resources/samples/local/os/mm/mm_gran/mm_granfree.c [moved from RtSample/local/os/mm/mm_gran/mm_granfree.c with 100% similarity]
resources/samples/local/os/mm/mm_gran/mm_graninit.c [moved from RtSample/local/os/mm/mm_gran/mm_graninit.c with 100% similarity]
resources/samples/local/os/mm/mm_gran/mm_granmark.c [moved from RtSample/local/os/mm/mm_gran/mm_granmark.c with 100% similarity]
resources/samples/local/os/mm/mm_gran/mm_granrelease.c [moved from RtSample/local/os/mm/mm_gran/mm_granrelease.c with 100% similarity]
resources/samples/local/os/mm/mm_gran/mm_granreserve.c [moved from RtSample/local/os/mm/mm_gran/mm_granreserve.c with 100% similarity]
resources/samples/local/os/mm/mm_gran/mm_pgalloc.c [moved from RtSample/local/os/mm/mm_gran/mm_pgalloc.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/Make.defs [moved from RtSample/local/os/mm/mm_heap/Make.defs with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_addfreechunk.c [moved from RtSample/local/os/mm/mm_heap/mm_addfreechunk.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_brkaddr.c [moved from RtSample/local/os/mm/mm_heap/mm_brkaddr.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_calloc.c [moved from RtSample/local/os/mm/mm_heap/mm_calloc.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_extend.c [moved from RtSample/local/os/mm/mm_heap/mm_extend.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_free.c [moved from RtSample/local/os/mm/mm_heap/mm_free.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_heapinfo.c [moved from RtSample/local/os/mm/mm_heap/mm_heapinfo.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_initialize.c [moved from RtSample/local/os/mm/mm_heap/mm_initialize.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_mallinfo.c [moved from RtSample/local/os/mm/mm_heap/mm_mallinfo.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_malloc.c [moved from RtSample/local/os/mm/mm_heap/mm_malloc.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_memalign.c [moved from RtSample/local/os/mm/mm_heap/mm_memalign.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_realloc.c [moved from RtSample/local/os/mm/mm_heap/mm_realloc.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_sbrk.c [moved from RtSample/local/os/mm/mm_heap/mm_sbrk.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_sem.c [moved from RtSample/local/os/mm/mm_heap/mm_sem.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_shrinkchunk.c [moved from RtSample/local/os/mm/mm_heap/mm_shrinkchunk.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_size2ndx.c [moved from RtSample/local/os/mm/mm_heap/mm_size2ndx.c with 100% similarity]
resources/samples/local/os/mm/mm_heap/mm_zalloc.c [moved from RtSample/local/os/mm/mm_heap/mm_zalloc.c with 100% similarity]
resources/samples/local/os/mm/shm/Make.defs [moved from RtSample/local/os/mm/shm/Make.defs with 100% similarity]
resources/samples/local/os/mm/shm/README.txt [moved from RtSample/local/os/mm/shm/README.txt with 100% similarity]
resources/samples/local/os/mm/shm/shm.h [moved from RtSample/local/os/mm/shm/shm.h with 100% similarity]
resources/samples/local/os/mm/shm/shm_initialize.c [moved from RtSample/local/os/mm/shm/shm_initialize.c with 100% similarity]
resources/samples/local/os/mm/shm/shmat.c [moved from RtSample/local/os/mm/shm/shmat.c with 100% similarity]
resources/samples/local/os/mm/shm/shmctl.c [moved from RtSample/local/os/mm/shm/shmctl.c with 100% similarity]
resources/samples/local/os/mm/shm/shmdt.c [moved from RtSample/local/os/mm/shm/shmdt.c with 100% similarity]
resources/samples/local/os/mm/shm/shmget.c [moved from RtSample/local/os/mm/shm/shmget.c with 100% similarity]
resources/samples/local/os/mm/ubin/.gitignore [moved from RtSample/local/lib/libc/bin/.gitignore with 100% similarity]
resources/samples/local/os/mm/ubin/Makefile [moved from RtSample/local/os/mm/ubin/Makefile with 100% similarity]
resources/samples/local/os/mm/umm_heap/Make.defs [moved from RtSample/local/os/mm/umm_heap/Make.defs with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_addregion.c [moved from RtSample/local/os/mm/umm_heap/umm_addregion.c with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_brkaddr.c [moved from RtSample/local/os/mm/umm_heap/umm_brkaddr.c with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_calloc.c [moved from RtSample/local/os/mm/umm_heap/umm_calloc.c with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_extend.c [moved from RtSample/local/os/mm/umm_heap/umm_extend.c with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_free.c [moved from RtSample/local/os/mm/umm_heap/umm_free.c with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_initialize.c [moved from RtSample/local/os/mm/umm_heap/umm_initialize.c with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_mallinfo.c [moved from RtSample/local/os/mm/umm_heap/umm_mallinfo.c with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_malloc.c [moved from RtSample/local/os/mm/umm_heap/umm_malloc.c with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_memalign.c [moved from RtSample/local/os/mm/umm_heap/umm_memalign.c with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_realloc.c [moved from RtSample/local/os/mm/umm_heap/umm_realloc.c with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_sbrk.c [moved from RtSample/local/os/mm/umm_heap/umm_sbrk.c with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_sem.c [moved from RtSample/local/os/mm/umm_heap/umm_sem.c with 100% similarity]
resources/samples/local/os/mm/umm_heap/umm_zalloc.c [moved from RtSample/local/os/mm/umm_heap/umm_zalloc.c with 100% similarity]
resources/samples/local/os/net/.gitignore [moved from RtSample/local/os/drivers/.gitignore with 100% similarity]
resources/samples/local/os/net/Kconfig [moved from RtSample/local/os/net/Kconfig with 100% similarity]
resources/samples/local/os/net/Makefile [moved from RtSample/local/os/net/Makefile with 100% similarity]
resources/samples/local/os/net/README.txt [moved from RtSample/local/os/net/README.txt with 100% similarity]
resources/samples/local/os/net/lwip/Kconfig [moved from RtSample/local/os/net/lwip/Kconfig with 100% similarity]
resources/samples/local/os/net/lwip/src/FILES [moved from RtSample/local/os/net/lwip/src/FILES with 100% similarity]
resources/samples/local/os/net/lwip/src/api/Make.defs [moved from RtSample/local/os/net/lwip/src/api/Make.defs with 100% similarity]
resources/samples/local/os/net/lwip/src/api/api_lib.c [moved from RtSample/local/os/net/lwip/src/api/api_lib.c with 100% similarity]
resources/samples/local/os/net/lwip/src/api/api_msg.c [moved from RtSample/local/os/net/lwip/src/api/api_msg.c with 100% similarity]
resources/samples/local/os/net/lwip/src/api/err.c [moved from RtSample/local/os/net/lwip/src/api/err.c with 100% similarity]
resources/samples/local/os/net/lwip/src/api/netbuf.c [moved from RtSample/local/os/net/lwip/src/api/netbuf.c with 100% similarity]
resources/samples/local/os/net/lwip/src/api/netifapi.c [moved from RtSample/local/os/net/lwip/src/api/netifapi.c with 100% similarity]
resources/samples/local/os/net/lwip/src/api/sockets.c [moved from RtSample/local/os/net/lwip/src/api/sockets.c with 100% similarity]
resources/samples/local/os/net/lwip/src/api/tcpip.c [moved from RtSample/local/os/net/lwip/src/api/tcpip.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/Make.defs [moved from RtSample/local/os/net/lwip/src/core/Make.defs with 100% similarity]
resources/samples/local/os/net/lwip/src/core/def.c [moved from RtSample/local/os/net/lwip/src/core/def.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/dhcp.c [moved from RtSample/local/os/net/lwip/src/core/dhcp.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/dhcps.c [moved from RtSample/local/os/net/lwip/src/core/dhcps.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/init.c [moved from RtSample/local/os/net/lwip/src/core/init.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv4/Make.defs [moved from RtSample/local/os/net/lwip/src/core/ipv4/Make.defs with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv4/autoip.c [moved from RtSample/local/os/net/lwip/src/core/ipv4/autoip.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv4/icmp.c [moved from RtSample/local/os/net/lwip/src/core/ipv4/icmp.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv4/igmp.c [moved from RtSample/local/os/net/lwip/src/core/ipv4/igmp.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv4/inet.c [moved from RtSample/local/os/net/lwip/src/core/ipv4/inet.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv4/inet_chksum.c [moved from RtSample/local/os/net/lwip/src/core/ipv4/inet_chksum.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv4/ip.c [moved from RtSample/local/os/net/lwip/src/core/ipv4/ip.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv4/ip_addr.c [moved from RtSample/local/os/net/lwip/src/core/ipv4/ip_addr.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv4/ip_frag.c [moved from RtSample/local/os/net/lwip/src/core/ipv4/ip_frag.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv6/Make.defs [moved from RtSample/local/os/net/lwip/src/core/ipv6/Make.defs with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv6/README [moved from RtSample/local/os/net/lwip/src/core/ipv6/README with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv6/icmp6.c [moved from RtSample/local/os/net/lwip/src/core/ipv6/icmp6.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv6/inet6.c [moved from RtSample/local/os/net/lwip/src/core/ipv6/inet6.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv6/ip6.c [moved from RtSample/local/os/net/lwip/src/core/ipv6/ip6.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/ipv6/ip6_addr.c [moved from RtSample/local/os/net/lwip/src/core/ipv6/ip6_addr.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/mem.c [moved from RtSample/local/os/net/lwip/src/core/mem.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/memp.c [moved from RtSample/local/os/net/lwip/src/core/memp.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/netif.c [moved from RtSample/local/os/net/lwip/src/core/netif.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/pbuf.c [moved from RtSample/local/os/net/lwip/src/core/pbuf.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/raw.c [moved from RtSample/local/os/net/lwip/src/core/raw.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/snmp/Make.defs [moved from RtSample/local/os/net/lwip/src/core/snmp/Make.defs with 100% similarity]
resources/samples/local/os/net/lwip/src/core/snmp/asn1_dec.c [moved from RtSample/local/os/net/lwip/src/core/snmp/asn1_dec.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/snmp/asn1_enc.c [moved from RtSample/local/os/net/lwip/src/core/snmp/asn1_enc.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/snmp/mib2.c [moved from RtSample/local/os/net/lwip/src/core/snmp/mib2.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/snmp/mib_structs.c [moved from RtSample/local/os/net/lwip/src/core/snmp/mib_structs.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/snmp/msg_in.c [moved from RtSample/local/os/net/lwip/src/core/snmp/msg_in.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/snmp/msg_out.c [moved from RtSample/local/os/net/lwip/src/core/snmp/msg_out.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/stats.c [moved from RtSample/local/os/net/lwip/src/core/stats.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/sys.c [moved from RtSample/local/os/net/lwip/src/core/sys.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/tcp.c [moved from RtSample/local/os/net/lwip/src/core/tcp.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/tcp_in.c [moved from RtSample/local/os/net/lwip/src/core/tcp_in.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/tcp_out.c [moved from RtSample/local/os/net/lwip/src/core/tcp_out.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/timers.c [moved from RtSample/local/os/net/lwip/src/core/timers.c with 100% similarity]
resources/samples/local/os/net/lwip/src/core/udp.c [moved from RtSample/local/os/net/lwip/src/core/udp.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/FILES [moved from RtSample/local/os/net/lwip/src/netif/FILES with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/Make.defs [moved from RtSample/local/os/net/lwip/src/netif/Make.defs with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/etharp.c [moved from RtSample/local/os/net/lwip/src/netif/etharp.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ethernetif.c [moved from RtSample/local/os/net/lwip/src/netif/ethernetif.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/Make.defs [moved from RtSample/local/os/net/lwip/src/netif/ppp/Make.defs with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/auth.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/auth.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/auth.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/auth.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/chap.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/chap.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/chap.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/chap.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/chpms.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/chpms.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/chpms.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/chpms.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/fsm.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/fsm.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/fsm.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/fsm.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/ipcp.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/ipcp.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/ipcp.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/ipcp.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/lcp.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/lcp.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/lcp.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/lcp.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/lwip_md5.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/lwip_md5.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/lwip_md5.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/lwip_md5.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/magic.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/magic.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/magic.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/magic.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/pap.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/pap.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/pap.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/pap.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/ppp.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/ppp.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/ppp.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/ppp.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/ppp_impl.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/ppp_impl.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/ppp_oe.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/ppp_oe.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/pppdebug.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/pppdebug.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/randm.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/randm.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/randm.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/randm.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/vj.c [moved from RtSample/local/os/net/lwip/src/netif/ppp/vj.c with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/ppp/vj.h [moved from RtSample/local/os/net/lwip/src/netif/ppp/vj.h with 100% similarity]
resources/samples/local/os/net/lwip/src/netif/slipif.c [moved from RtSample/local/os/net/lwip/src/netif/slipif.c with 100% similarity]
resources/samples/local/os/net/lwip/sys/arch/Make.defs [moved from RtSample/local/os/net/lwip/sys/arch/Make.defs with 100% similarity]
resources/samples/local/os/net/lwip/sys/arch/sys_arch.c [moved from RtSample/local/os/net/lwip/sys/arch/sys_arch.c with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/core/test_mem.c [moved from RtSample/local/os/net/lwip/test/unit/core/test_mem.c with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/core/test_mem.h [moved from RtSample/local/os/net/lwip/test/unit/core/test_mem.h with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/etharp/test_etharp.c [moved from RtSample/local/os/net/lwip/test/unit/etharp/test_etharp.c with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/etharp/test_etharp.h [moved from RtSample/local/os/net/lwip/test/unit/etharp/test_etharp.h with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/lwip_check.h [moved from RtSample/local/os/net/lwip/test/unit/lwip_check.h with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/lwip_unittests.c [moved from RtSample/local/os/net/lwip/test/unit/lwip_unittests.c with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/lwipopts.h [moved from RtSample/local/os/net/lwip/test/unit/lwipopts.h with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/tcp/tcp_helper.c [moved from RtSample/local/os/net/lwip/test/unit/tcp/tcp_helper.c with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/tcp/tcp_helper.h [moved from RtSample/local/os/net/lwip/test/unit/tcp/tcp_helper.h with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/tcp/test_tcp.c [moved from RtSample/local/os/net/lwip/test/unit/tcp/test_tcp.c with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/tcp/test_tcp.h [moved from RtSample/local/os/net/lwip/test/unit/tcp/test_tcp.h with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/tcp/test_tcp_oos.c [moved from RtSample/local/os/net/lwip/test/unit/tcp/test_tcp_oos.c with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/tcp/test_tcp_oos.h [moved from RtSample/local/os/net/lwip/test/unit/tcp/test_tcp_oos.h with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/udp/test_udp.c [moved from RtSample/local/os/net/lwip/test/unit/udp/test_udp.c with 100% similarity]
resources/samples/local/os/net/lwip/test/unit/udp/test_udp.h [moved from RtSample/local/os/net/lwip/test/unit/udp/test_udp.h with 100% similarity]
resources/samples/local/os/net/mac/Kconfig [moved from RtSample/local/os/net/mac/Kconfig with 100% similarity]
resources/samples/local/os/net/mac/Make.defs [moved from RtSample/local/os/net/mac/Make.defs with 100% similarity]
resources/samples/local/os/net/mac/ethernetif.c [moved from RtSample/local/os/net/mac/ethernetif.c with 100% similarity]
resources/samples/local/os/net/net_initialize.c [moved from RtSample/local/os/net/net_initialize.c with 100% similarity]
resources/samples/local/os/net/netdev/Kconfig [moved from RtSample/local/os/net/netdev/Kconfig with 100% similarity]
resources/samples/local/os/net/netdev/Make.defs [moved from RtSample/local/os/net/netdev/Make.defs with 100% similarity]
resources/samples/local/os/net/netdev/netdev.h [moved from RtSample/local/os/net/netdev/netdev.h with 100% similarity]
resources/samples/local/os/net/netdev/netdev_carrier.c [moved from RtSample/local/os/net/netdev/netdev_carrier.c with 100% similarity]
resources/samples/local/os/net/netdev/netdev_count.c [moved from RtSample/local/os/net/netdev/netdev_count.c with 100% similarity]
resources/samples/local/os/net/netdev/netdev_default.c [moved from RtSample/local/os/net/netdev/netdev_default.c with 100% similarity]
resources/samples/local/os/net/netdev/netdev_findbyaddr.c [moved from RtSample/local/os/net/netdev/netdev_findbyaddr.c with 100% similarity]
resources/samples/local/os/net/netdev/netdev_findbyname.c [moved from RtSample/local/os/net/netdev/netdev_findbyname.c with 100% similarity]
resources/samples/local/os/net/netdev/netdev_foreach.c [moved from RtSample/local/os/net/netdev/netdev_foreach.c with 100% similarity]
resources/samples/local/os/net/netdev/netdev_ioctl.c [moved from RtSample/local/os/net/netdev/netdev_ioctl.c with 100% similarity]
resources/samples/local/os/net/netdev/netdev_sem.c [moved from RtSample/local/os/net/netdev/netdev_sem.c with 100% similarity]
resources/samples/local/os/net/route/Kconfig [moved from RtSample/local/os/net/route/Kconfig with 100% similarity]
resources/samples/local/os/net/route/Make.defs [moved from RtSample/local/os/net/route/Make.defs with 100% similarity]
resources/samples/local/os/net/route/net_addroute.c [moved from RtSample/local/os/net/route/net_addroute.c with 100% similarity]
resources/samples/local/os/net/route/net_allocroute.c [moved from RtSample/local/os/net/route/net_allocroute.c with 100% similarity]
resources/samples/local/os/net/route/net_delroute.c [moved from RtSample/local/os/net/route/net_delroute.c with 100% similarity]
resources/samples/local/os/net/route/net_foreachroute.c [moved from RtSample/local/os/net/route/net_foreachroute.c with 100% similarity]
resources/samples/local/os/net/route/net_router.c [moved from RtSample/local/os/net/route/net_router.c with 100% similarity]
resources/samples/local/os/net/route/netdev_router.c [moved from RtSample/local/os/net/route/netdev_router.c with 100% similarity]
resources/samples/local/os/net/route/route.h [moved from RtSample/local/os/net/route/route.h with 100% similarity]
resources/samples/local/os/net/socket/Kconfig [moved from RtSample/local/os/net/socket/Kconfig with 100% similarity]
resources/samples/local/os/net/socket/Make.defs [moved from RtSample/local/os/net/socket/Make.defs with 100% similarity]
resources/samples/local/os/net/socket/bsd_socket_api.c [moved from RtSample/local/os/net/socket/bsd_socket_api.c with 100% similarity]
resources/samples/local/os/net/socket/net_checksd.c [moved from RtSample/local/os/net/socket/net_checksd.c with 100% similarity]
resources/samples/local/os/net/socket/net_clone.c [moved from RtSample/local/os/net/socket/net_clone.c with 100% similarity]
resources/samples/local/os/net/socket/net_close.c [moved from RtSample/local/os/net/socket/net_close.c with 100% similarity]
resources/samples/local/os/net/socket/net_dupsd.c [moved from RtSample/local/os/net/socket/net_dupsd.c with 100% similarity]
resources/samples/local/os/net/socket/net_dupsd2.c [moved from RtSample/local/os/net/socket/net_dupsd2.c with 100% similarity]
resources/samples/local/os/net/socket/net_monitor.c [moved from RtSample/local/os/net/socket/net_monitor.c with 100% similarity]
resources/samples/local/os/net/socket/net_sendfile.c [moved from RtSample/local/os/net/socket/net_sendfile.c with 100% similarity]
resources/samples/local/os/net/socket/net_sockets.c [moved from RtSample/local/os/net/socket/net_sockets.c with 100% similarity]
resources/samples/local/os/net/socket/net_timeo.c [moved from RtSample/local/os/net/socket/net_timeo.c with 100% similarity]
resources/samples/local/os/net/socket/net_vfcntl.c [moved from RtSample/local/os/net/socket/net_vfcntl.c with 100% similarity]
resources/samples/local/os/net/socket/recvmsg.c [moved from RtSample/local/os/net/socket/recvmsg.c with 100% similarity]
resources/samples/local/os/net/socket/socket.h [moved from RtSample/local/os/net/socket/socket.h with 100% similarity]
resources/samples/local/os/net/tls/Kconfig [moved from RtSample/local/os/net/tls/Kconfig with 100% similarity]
resources/samples/local/os/net/tls/Make.defs [moved from RtSample/local/os/net/tls/Make.defs with 100% similarity]
resources/samples/local/os/net/tls/aes.c [moved from RtSample/local/os/net/tls/aes.c with 100% similarity]
resources/samples/local/os/net/tls/aesni.c [moved from RtSample/local/os/net/tls/aesni.c with 100% similarity]
resources/samples/local/os/net/tls/arc4.c [moved from RtSample/local/os/net/tls/arc4.c with 100% similarity]
resources/samples/local/os/net/tls/asn1parse.c [moved from RtSample/local/os/net/tls/asn1parse.c with 100% similarity]
resources/samples/local/os/net/tls/asn1write.c [moved from RtSample/local/os/net/tls/asn1write.c with 100% similarity]
resources/samples/local/os/net/tls/base64.c [moved from RtSample/local/os/net/tls/base64.c with 100% similarity]
resources/samples/local/os/net/tls/bignum.c [moved from RtSample/local/os/net/tls/bignum.c with 100% similarity]
resources/samples/local/os/net/tls/blowfish.c [moved from RtSample/local/os/net/tls/blowfish.c with 100% similarity]
resources/samples/local/os/net/tls/camellia.c [moved from RtSample/local/os/net/tls/camellia.c with 100% similarity]
resources/samples/local/os/net/tls/ccm.c [moved from RtSample/local/os/net/tls/ccm.c with 100% similarity]
resources/samples/local/os/net/tls/certs.c [moved from RtSample/local/os/net/tls/certs.c with 100% similarity]
resources/samples/local/os/net/tls/cipher.c [moved from RtSample/local/os/net/tls/cipher.c with 100% similarity]
resources/samples/local/os/net/tls/cipher_wrap.c [moved from RtSample/local/os/net/tls/cipher_wrap.c with 100% similarity]
resources/samples/local/os/net/tls/cmac.c [moved from RtSample/local/os/net/tls/cmac.c with 100% similarity]
resources/samples/local/os/net/tls/configs/README.txt [moved from RtSample/local/os/include/tls/configs/README.txt with 100% similarity]
resources/samples/local/os/net/tls/configs/ssl_client1.c [moved from RtSample/local/os/net/tls/configs/ssl_client1.c with 100% similarity]
resources/samples/local/os/net/tls/configs/ssl_server.c [moved from RtSample/local/os/net/tls/configs/ssl_server.c with 100% similarity]
resources/samples/local/os/net/tls/configs/tlstest.txt [moved from RtSample/local/os/include/tls/configs/tlstest.txt with 100% similarity]
resources/samples/local/os/net/tls/ctr_drbg.c [moved from RtSample/local/os/net/tls/ctr_drbg.c with 100% similarity]
resources/samples/local/os/net/tls/debug.c [moved from RtSample/local/os/net/tls/debug.c with 100% similarity]
resources/samples/local/os/net/tls/des.c [moved from RtSample/local/os/net/tls/des.c with 100% similarity]
resources/samples/local/os/net/tls/dhm.c [moved from RtSample/local/os/net/tls/dhm.c with 100% similarity]
resources/samples/local/os/net/tls/ecdh.c [moved from RtSample/local/os/net/tls/ecdh.c with 100% similarity]
resources/samples/local/os/net/tls/ecdsa.c [moved from RtSample/local/os/net/tls/ecdsa.c with 100% similarity]
resources/samples/local/os/net/tls/ecjpake.c [moved from RtSample/local/os/net/tls/ecjpake.c with 100% similarity]
resources/samples/local/os/net/tls/ecp.c [moved from RtSample/local/os/net/tls/ecp.c with 100% similarity]
resources/samples/local/os/net/tls/ecp_curves.c [moved from RtSample/local/os/net/tls/ecp_curves.c with 100% similarity]
resources/samples/local/os/net/tls/entropy.c [moved from RtSample/local/os/net/tls/entropy.c with 100% similarity]
resources/samples/local/os/net/tls/entropy_poll.c [moved from RtSample/local/os/net/tls/entropy_poll.c with 100% similarity]
resources/samples/local/os/net/tls/error.c [moved from RtSample/local/os/net/tls/error.c with 100% similarity]
resources/samples/local/os/net/tls/gcm.c [moved from RtSample/local/os/net/tls/gcm.c with 100% similarity]
resources/samples/local/os/net/tls/gen_cert.c [moved from RtSample/local/os/net/tls/gen_cert.c with 100% similarity]
resources/samples/local/os/net/tls/havege.c [moved from RtSample/local/os/net/tls/havege.c with 100% similarity]
resources/samples/local/os/net/tls/hmac_drbg.c [moved from RtSample/local/os/net/tls/hmac_drbg.c with 100% similarity]
resources/samples/local/os/net/tls/md.c [moved from RtSample/local/os/net/tls/md.c with 100% similarity]
resources/samples/local/os/net/tls/md2.c [moved from RtSample/local/os/net/tls/md2.c with 100% similarity]
resources/samples/local/os/net/tls/md4.c [moved from RtSample/local/os/net/tls/md4.c with 100% similarity]
resources/samples/local/os/net/tls/md5.c [moved from RtSample/local/os/net/tls/md5.c with 100% similarity]
resources/samples/local/os/net/tls/md_wrap.c [moved from RtSample/local/os/net/tls/md_wrap.c with 100% similarity]
resources/samples/local/os/net/tls/memory_buffer_alloc.c [moved from RtSample/local/os/net/tls/memory_buffer_alloc.c with 100% similarity]
resources/samples/local/os/net/tls/net.c [moved from RtSample/local/os/net/tls/net.c with 100% similarity]
resources/samples/local/os/net/tls/oid.c [moved from RtSample/local/os/net/tls/oid.c with 100% similarity]
resources/samples/local/os/net/tls/padlock.c [moved from RtSample/local/os/net/tls/padlock.c with 100% similarity]
resources/samples/local/os/net/tls/pem.c [moved from RtSample/local/os/net/tls/pem.c with 100% similarity]
resources/samples/local/os/net/tls/pk.c [moved from RtSample/local/os/net/tls/pk.c with 100% similarity]
resources/samples/local/os/net/tls/pk_wrap.c [moved from RtSample/local/os/net/tls/pk_wrap.c with 100% similarity]
resources/samples/local/os/net/tls/pkcs11.c [moved from RtSample/local/os/net/tls/pkcs11.c with 100% similarity]
resources/samples/local/os/net/tls/pkcs12.c [moved from RtSample/local/os/net/tls/pkcs12.c with 100% similarity]
resources/samples/local/os/net/tls/pkcs5.c [moved from RtSample/local/os/net/tls/pkcs5.c with 100% similarity]
resources/samples/local/os/net/tls/pkparse.c [moved from RtSample/local/os/net/tls/pkparse.c with 100% similarity]
resources/samples/local/os/net/tls/pkwrite.c [moved from RtSample/local/os/net/tls/pkwrite.c with 100% similarity]
resources/samples/local/os/net/tls/platform.c [moved from RtSample/local/os/net/tls/platform.c with 100% similarity]
resources/samples/local/os/net/tls/ripemd160.c [moved from RtSample/local/os/net/tls/ripemd160.c with 100% similarity]
resources/samples/local/os/net/tls/rsa.c [moved from RtSample/local/os/net/tls/rsa.c with 100% similarity]
resources/samples/local/os/net/tls/see_api.c [moved from RtSample/local/os/net/tls/see_api.c with 100% similarity]
resources/samples/local/os/net/tls/selftest.c [moved from RtSample/local/os/net/tls/selftest.c with 100% similarity]
resources/samples/local/os/net/tls/sha1.c [moved from RtSample/local/os/net/tls/sha1.c with 100% similarity]
resources/samples/local/os/net/tls/sha256.c [moved from RtSample/local/os/net/tls/sha256.c with 100% similarity]
resources/samples/local/os/net/tls/sha512.c [moved from RtSample/local/os/net/tls/sha512.c with 100% similarity]
resources/samples/local/os/net/tls/ssl_cache.c [moved from RtSample/local/os/net/tls/ssl_cache.c with 100% similarity]
resources/samples/local/os/net/tls/ssl_ciphersuites.c [moved from RtSample/local/os/net/tls/ssl_ciphersuites.c with 100% similarity]
resources/samples/local/os/net/tls/ssl_cli.c [moved from RtSample/local/os/net/tls/ssl_cli.c with 100% similarity]
resources/samples/local/os/net/tls/ssl_client1.c [moved from RtSample/local/os/net/tls/ssl_client1.c with 100% similarity]
resources/samples/local/os/net/tls/ssl_cookie.c [moved from RtSample/local/os/net/tls/ssl_cookie.c with 100% similarity]
resources/samples/local/os/net/tls/ssl_server.c [moved from RtSample/local/os/net/tls/ssl_server.c with 100% similarity]
resources/samples/local/os/net/tls/ssl_srv.c [moved from RtSample/local/os/net/tls/ssl_srv.c with 100% similarity]
resources/samples/local/os/net/tls/ssl_ticket.c [moved from RtSample/local/os/net/tls/ssl_ticket.c with 100% similarity]
resources/samples/local/os/net/tls/ssl_tls.c [moved from RtSample/local/os/net/tls/ssl_tls.c with 100% similarity]
resources/samples/local/os/net/tls/threading.c [moved from RtSample/local/os/net/tls/threading.c with 100% similarity]
resources/samples/local/os/net/tls/timing.c [moved from RtSample/local/os/net/tls/timing.c with 100% similarity]
resources/samples/local/os/net/tls/version.c [moved from RtSample/local/os/net/tls/version.c with 100% similarity]
resources/samples/local/os/net/tls/version_features.c [moved from RtSample/local/os/net/tls/version_features.c with 100% similarity]
resources/samples/local/os/net/tls/x509.c [moved from RtSample/local/os/net/tls/x509.c with 100% similarity]
resources/samples/local/os/net/tls/x509_create.c [moved from RtSample/local/os/net/tls/x509_create.c with 100% similarity]
resources/samples/local/os/net/tls/x509_crl.c [moved from RtSample/local/os/net/tls/x509_crl.c with 100% similarity]
resources/samples/local/os/net/tls/x509_crt.c [moved from RtSample/local/os/net/tls/x509_crt.c with 100% similarity]
resources/samples/local/os/net/tls/x509_csr.c [moved from RtSample/local/os/net/tls/x509_csr.c with 100% similarity]
resources/samples/local/os/net/tls/x509write_crt.c [moved from RtSample/local/os/net/tls/x509write_crt.c with 100% similarity]
resources/samples/local/os/net/tls/x509write_csr.c [moved from RtSample/local/os/net/tls/x509write_csr.c with 100% similarity]
resources/samples/local/os/net/tls/xtea.c [moved from RtSample/local/os/net/tls/xtea.c with 100% similarity]
resources/samples/local/os/net/utils/Kconfig [moved from RtSample/local/os/net/utils/Kconfig with 100% similarity]
resources/samples/local/os/net/utils/Make.defs [moved from RtSample/local/os/net/utils/Make.defs with 100% similarity]
resources/samples/local/os/net/utils/net_dsec2tick.c [moved from RtSample/local/os/net/utils/net_dsec2tick.c with 100% similarity]
resources/samples/local/os/net/utils/net_dsec2timeval.c [moved from RtSample/local/os/net/utils/net_dsec2timeval.c with 100% similarity]
resources/samples/local/os/net/utils/net_ipv6_maskcmp.c [moved from RtSample/local/os/net/utils/net_ipv6_maskcmp.c with 100% similarity]
resources/samples/local/os/net/utils/net_ipv6_pref2mask.c [moved from RtSample/local/os/net/utils/net_ipv6_pref2mask.c with 100% similarity]
resources/samples/local/os/net/utils/net_lock.c [moved from RtSample/local/os/net/utils/net_lock.c with 100% similarity]
resources/samples/local/os/net/utils/net_timeval2dsec.c [moved from RtSample/local/os/net/utils/net_timeval2dsec.c with 100% similarity]
resources/samples/local/os/net/utils/utils.h [moved from RtSample/local/os/net/utils/utils.h with 100% similarity]
resources/samples/local/os/pm/Kconfig [moved from RtSample/local/os/pm/Kconfig with 100% similarity]
resources/samples/local/os/pm/Makefile [moved from RtSample/local/os/pm/Makefile with 100% similarity]
resources/samples/local/os/pm/pm.h [moved from RtSample/local/os/pm/pm.h with 100% similarity]
resources/samples/local/os/pm/pm_activity.c [moved from RtSample/local/os/pm/pm_activity.c with 100% similarity]
resources/samples/local/os/pm/pm_changestate.c [moved from RtSample/local/os/pm/pm_changestate.c with 100% similarity]
resources/samples/local/os/pm/pm_checkstate.c [moved from RtSample/local/os/pm/pm_checkstate.c with 100% similarity]
resources/samples/local/os/pm/pm_debug.c [moved from RtSample/local/os/pm/pm_debug.c with 100% similarity]
resources/samples/local/os/pm/pm_debug.h [moved from RtSample/local/os/pm/pm_debug.h with 100% similarity]
resources/samples/local/os/pm/pm_initialize.c [moved from RtSample/local/os/pm/pm_initialize.c with 100% similarity]
resources/samples/local/os/pm/pm_metrics.c [moved from RtSample/local/os/pm/pm_metrics.c with 100% similarity]
resources/samples/local/os/pm/pm_metrics.h [moved from RtSample/local/os/pm/pm_metrics.h with 100% similarity]
resources/samples/local/os/pm/pm_procfs.c [moved from RtSample/local/os/pm/pm_procfs.c with 100% similarity]
resources/samples/local/os/pm/pm_register.c [moved from RtSample/local/os/pm/pm_register.c with 100% similarity]
resources/samples/local/os/pm/pm_test.c [moved from RtSample/local/os/pm/pm_test.c with 100% similarity]
resources/samples/local/os/pm/pm_test.h [moved from RtSample/local/os/pm/pm_test.h with 100% similarity]
resources/samples/local/os/pm/pm_update.c [moved from RtSample/local/os/pm/pm_update.c with 100% similarity]
resources/samples/local/os/syscall/.gitignore [moved from RtSample/local/os/syscall/.gitignore with 100% similarity]
resources/samples/local/os/syscall/Kconfig [moved from RtSample/local/os/syscall/Kconfig with 100% similarity]
resources/samples/local/os/syscall/Makefile [moved from RtSample/local/os/syscall/Makefile with 100% similarity]
resources/samples/local/os/syscall/README.txt [moved from RtSample/local/os/syscall/README.txt with 100% similarity]
resources/samples/local/os/syscall/proxies/.gitignore [moved from RtSample/local/os/syscall/stubs/.gitignore with 100% similarity]
resources/samples/local/os/syscall/proxies/Make.defs [moved from RtSample/local/os/syscall/proxies/Make.defs with 100% similarity]
resources/samples/local/os/syscall/stubs/.gitignore [moved from RtSample/local/os/syscall/proxies/.gitignore with 100% similarity]
resources/samples/local/os/syscall/stubs/Make.defs [moved from RtSample/local/os/syscall/stubs/Make.defs with 100% similarity]
resources/samples/local/os/syscall/syscall.csv [moved from RtSample/local/os/syscall/syscall.csv with 100% similarity]
resources/samples/local/os/syscall/syscall_clock_systimer.c [moved from RtSample/local/os/syscall/syscall_clock_systimer.c with 100% similarity]
resources/samples/local/os/syscall/syscall_funclookup.c [moved from RtSample/local/os/syscall/syscall_funclookup.c with 100% similarity]
resources/samples/local/os/syscall/syscall_lookup.h [moved from RtSample/local/os/syscall/syscall_lookup.h with 100% similarity]
resources/samples/local/os/syscall/syscall_nparms.c [moved from RtSample/local/os/syscall/syscall_nparms.c with 100% similarity]
resources/samples/local/os/syscall/syscall_stublookup.c [moved from RtSample/local/os/syscall/syscall_stublookup.c with 100% similarity]
resources/samples/local/os/tools/.gitignore [moved from RtSample/local/os/tools/.gitignore with 100% similarity]
resources/samples/local/os/tools/Config.mk [moved from RtSample/local/os/tools/Config.mk with 100% similarity]
resources/samples/local/os/tools/Makefile.export [moved from RtSample/local/os/tools/Makefile.export with 100% similarity]
resources/samples/local/os/tools/Makefile.host [moved from RtSample/local/os/tools/Makefile.host with 100% similarity]
resources/samples/local/os/tools/README.txt [moved from RtSample/local/os/tools/README.txt with 100% similarity]
resources/samples/local/os/tools/b16.c [moved from RtSample/local/os/tools/b16.c with 100% similarity]
resources/samples/local/os/tools/cfgdefine.c [moved from RtSample/local/os/tools/cfgdefine.c with 100% similarity]
resources/samples/local/os/tools/cfgdefine.h [moved from RtSample/local/os/tools/cfgdefine.h with 100% similarity]
resources/samples/local/os/tools/cfgparser.c [moved from RtSample/local/os/tools/cfgparser.c with 100% similarity]
resources/samples/local/os/tools/cfgparser.h [moved from RtSample/local/os/tools/cfgparser.h with 100% similarity]
resources/samples/local/os/tools/cmpconfig.c [moved from RtSample/local/os/tools/cmpconfig.c with 100% similarity]
resources/samples/local/os/tools/configure.bat [moved from RtSample/local/os/tools/configure.bat with 100% similarity]
resources/samples/local/os/tools/configure.c [moved from RtSample/local/os/tools/configure.c with 100% similarity]
resources/samples/local/os/tools/configure.sh [moved from RtSample/local/os/tools/configure.sh with 100% similarity]
resources/samples/local/os/tools/copydir.bat [moved from RtSample/local/os/tools/copydir.bat with 100% similarity]
resources/samples/local/os/tools/copydir.sh [moved from RtSample/local/os/tools/copydir.sh with 100% similarity]
resources/samples/local/os/tools/csvparser.c [moved from RtSample/local/os/tools/csvparser.c with 100% similarity]
resources/samples/local/os/tools/csvparser.h [moved from RtSample/local/os/tools/csvparser.h with 100% similarity]
resources/samples/local/os/tools/define.bat [moved from RtSample/local/os/tools/define.bat with 100% similarity]
resources/samples/local/os/tools/define.sh [moved from RtSample/local/os/tools/define.sh with 100% similarity]
resources/samples/local/os/tools/discover.py [moved from RtSample/local/os/tools/discover.py with 100% similarity]
resources/samples/local/os/tools/formatter.sh [moved from RtSample/local/os/tools/formatter.sh with 100% similarity]
resources/samples/local/os/tools/incdir.bat [moved from RtSample/local/os/tools/incdir.bat with 100% similarity]
resources/samples/local/os/tools/incdir.sh [moved from RtSample/local/os/tools/incdir.sh with 100% similarity]
resources/samples/local/os/tools/kconfig.bat [moved from RtSample/local/os/tools/kconfig.bat with 100% similarity]
resources/samples/local/os/tools/kconfig2html.c [moved from RtSample/local/os/tools/kconfig2html.c with 100% similarity]
resources/samples/local/os/tools/link.bat [moved from RtSample/local/os/tools/link.bat with 100% similarity]
resources/samples/local/os/tools/link.sh [moved from RtSample/local/os/tools/link.sh with 100% similarity]
resources/samples/local/os/tools/memstats.py [moved from RtSample/local/os/tools/memstats.py with 100% similarity]
resources/samples/local/os/tools/memstats_gnueabil.py [moved from RtSample/local/os/tools/memstats_gnueabil.py with 100% similarity]
resources/samples/local/os/tools/mkconfig.c [moved from RtSample/local/os/tools/mkconfig.c with 100% similarity]
resources/samples/local/os/tools/mkconfigvars.sh [moved from RtSample/local/os/tools/mkconfigvars.sh with 100% similarity]
resources/samples/local/os/tools/mkctags.sh [moved from RtSample/local/os/tools/mkctags.sh with 100% similarity]
resources/samples/local/os/tools/mkdeps.bat [moved from RtSample/local/os/tools/mkdeps.bat with 100% similarity]
resources/samples/local/os/tools/mkdeps.c [moved from RtSample/local/os/tools/mkdeps.c with 100% similarity]
resources/samples/local/os/tools/mkdeps.sh [moved from RtSample/local/os/tools/mkdeps.sh with 100% similarity]
resources/samples/local/os/tools/mkexport.sh [moved from RtSample/local/os/tools/mkexport.sh with 100% similarity]
resources/samples/local/os/tools/mknulldeps.sh [moved from RtSample/local/os/tools/mknulldeps.sh with 100% similarity]
resources/samples/local/os/tools/mkromfsimg.sh [moved from RtSample/local/os/tools/mkromfsimg.sh with 100% similarity]
resources/samples/local/os/tools/mksmartfsimg.sh [moved from RtSample/local/os/tools/mksmartfsimg.sh with 100% similarity]
resources/samples/local/os/tools/mksymtab.c [moved from RtSample/local/os/tools/mksymtab.c with 100% similarity]
resources/samples/local/os/tools/mksyscall.c [moved from RtSample/local/os/tools/mksyscall.c with 100% similarity]
resources/samples/local/os/tools/mktrximage.sh [moved from RtSample/local/os/tools/mktrximage.sh with 100% similarity]
resources/samples/local/os/tools/mkversion.c [moved from RtSample/local/os/tools/mkversion.c with 100% similarity]
resources/samples/local/os/tools/refresh.sh [moved from RtSample/local/os/tools/refresh.sh with 100% similarity]
resources/samples/local/os/tools/unlink.bat [moved from RtSample/local/os/tools/unlink.bat with 100% similarity]
resources/samples/local/os/tools/unlink.sh [moved from RtSample/local/os/tools/unlink.sh with 100% similarity]
resources/samples/local/os/tools/version.sh [moved from RtSample/local/os/tools/version.sh with 100% similarity]
resources/samples/local/os/tools/xmlrpc_test.py [moved from RtSample/local/os/tools/xmlrpc_test.py with 100% similarity]
resources/samples/local/os/tools/zipme.sh [moved from RtSample/local/os/tools/zipme.sh with 100% similarity]
resources/samples/local/tools/Makefile [moved from RtSample/local/tools/Makefile with 100% similarity]
resources/samples/local/tools/ramdump/ramdump.sh [moved from RtSample/local/tools/ramdump/ramdump.sh with 100% similarity]
resources/samples/local/tools/ramdump/ramdump_protocal.txt [moved from RtSample/local/tools/ramdump/ramdump_protocal.txt with 100% similarity]
resources/samples/local/tools/ramdump/ramdump_tool.c [moved from RtSample/local/tools/ramdump/ramdump_tool.c with 100% similarity]
resources/samples/local/tools/tools.txt [moved from RtSample/local/tools/tools.txt with 100% similarity]
resources/templates/s5jt200/artik_board.jpg [moved from rtosResources/templates/s5jt200/artik_board.jpg with 100% similarity]
resources/templates/s5jt200/desc.xml [moved from rtosResources/templates/s5jt200/desc.xml with 100% similarity]
resources/templates/s5jt200/index.html [moved from rtosResources/templates/s5jt200/index.html with 100% similarity]
resources/templates/s5jt200/project.zip [moved from rtosResources/templates/s5jt200/project.zip with 100% similarity]
resources/templates/s5jt200/thumb.png [moved from rtosResources/templates/s5jt200/thumb.png with 100% similarity]
rt-ide/AUTHORS [new file with mode: 0644]
rt-ide/LICENSE.APLv2 [new file with mode: 0644]
rt-ide/LICENSE.EPLv1 [new file with mode: 0644]
rt-ide/NOTICE [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/CONTRIBUTING [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/admin/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/admin/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/admin/findbugs-exclude.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/admin/pom-build.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/admin/pom-config.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/admin/settings.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/admin/target-defs/eclipse-4.4.x-luna.target [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/admin/target-defs/eclipse-4.5.x-mars.target [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/admin/target-defs/eclipse-4.6.x-neon.target [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/admin/target-defs/eclipse-4.7.x-oxygen.target [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/p2.inf [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/p2.inf [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/p2.inf [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/feature.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/feature.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.classpath [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.options [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.settings/org.eclipse.pde.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/META-INF/p2.inf [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/about.html [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/icons/eview16/terminal_view.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/plugin.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/plugin.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/activator/UIPlugin.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/LocalWizardConfigurationPanel.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/launcher/LocalLauncherDelegate.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/launcher/LocalLauncherHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/launcher/LocalMementoHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.classpath [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.options [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.settings/org.eclipse.pde.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/META-INF/p2.inf [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/about.html [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/plugin.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/plugin.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessConnector.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessLauncherDelegate.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessMonitor.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessSettings.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessSettingsPage.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/activator/UIPlugin.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/help/IContextHelpIds.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/nls/Messages.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/nls/Messages.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.classpath [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.cvsignore [moved from rtosIDE/.gitignore with 100% similarity]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/about.html [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/plugin.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/plugin.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/schema/parsers.exsd [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteSettings.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteTerminalConstants.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteTerminalParser.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/controls/RemoteWizardConfigurationPanel.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/Activator.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/ArgumentParser.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnectionManager.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnector.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettings.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettingsPage.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/preferences/RemoteTerminalPreferenceInitializer.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/preferences/RemoteTerminalPreferencePage.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteLauncherDelegate.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteMementoHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/nls/Messages.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/nls/Messages.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.classpath [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.options [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.settings/org.eclipse.pde.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/about.html [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/plugin.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/plugin.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/pom2.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/activator/UIPlugin.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/ISerialSettings.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialConnectWorker.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialConnector.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialPortHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialProperties.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialSettings.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/controls/SerialConfigurationPanel.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/controls/SerialLinePanel.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/controls/SerialPortAddressDialog.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/interfaces/ITraceIds.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/interfaces/IWireTypeSerial.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/launcher/SerialLauncherDelegate.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/launcher/SerialMementoHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/nls/Messages.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/nls/Messages.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.classpath [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.options [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.settings/org.eclipse.pde.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/about.html [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/plugin.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/plugin.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/activator/UIPlugin.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/ISshConstants.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/ISshSettings.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/KeyboardInteractiveDialog.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshConnection.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshConnector.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshMessages.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshMessages.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshSettings.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshSettingsPage.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/UserValidationDialog.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/controls/SshWizardConfigurationPanel.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/launcher/SshLauncherDelegate.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/launcher/SshMementoHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/nls/Messages.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/nls/Messages.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.classpath [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.options [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.settings/org.eclipse.pde.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/about.html [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/plugin.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/plugin.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/activator/UIPlugin.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/ITelnetSettings.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/NetworkPortMap.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetCodes.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetConnectWorker.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetConnection.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetConnector.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetMessages.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetMessages.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetOption.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetProperties.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetSettings.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetSettingsPage.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/controls/TelnetWizardConfigurationPanel.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/launcher/TelnetLauncherDelegate.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/launcher/TelnetMementoHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/nls/Messages.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/nls/Messages.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.classpath [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.cvsignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.options [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.settings/org.eclipse.core.resources.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/HelpContexts.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/README.txt [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/about.html [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/about.ini [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/about.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/css/org.eclipse.tm.terminal.stylesheet.dark.css [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/icons/clcl16/clear_co.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/icons/dlcl16/clear_co.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/icons/elcl16/clear_co.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/plugin.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/plugin.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/pom2.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/schema/connectors.exsd [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/connector/TerminalConnector.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/connector/TerminalToRemoteInjectionOutputStream.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/CommandInputFieldWithHistory.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ICommandInputField.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalListener.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalListener2.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalMouseListener.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/TerminalViewControlFactory.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/AbstractTerminalAction.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/ActionMessages.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/ActionMessages.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/ImageConsts.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionClearAll.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionCopy.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionCut.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionPaste.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionSelectAll.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/ITerminalControlForText.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/TerminalMessages.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/TerminalMessages.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/TerminalPlugin.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/IVT100EmulatorBackend.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/LoggingOutputStream.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100BackendTraceDecorator.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100Emulator.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackend.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/ISnapshotChanges.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/SnapshotChanges.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/SynchronizedTerminalTextData.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextData.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataFastScroll.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataSnapshot.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataStore.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataWindow.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/preferences/ITerminalConstants.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/preferences/TerminalPreferenceInitializer.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/preferences/TerminalPreferencePage.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/AbstractSettingsPage.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ISettingsPage.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ISettingsStore.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ITerminalConnector.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ITerminalControl.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/Logger.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/NullSettingsStore.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/TerminalConnectorExtension.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/TerminalState.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/provider/TerminalConnectorImpl.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/GridCanvas.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ILinelRenderer.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModelListener.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/PipedInputStream.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/PollingTextCanvasModel.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/StyleMap.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/VirtualCanvas.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/ITerminalTextData.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/ITerminalTextDataReadOnly.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/ITerminalTextDataSnapshot.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/LineSegment.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/Style.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/StyleColor.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/TerminalTextDataFactory.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/tm32.png [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.classpath [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.cvsignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/about.html [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/about.ini [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/about.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/plugin.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/plugin.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/connector/TerminalConnectorFactoryTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/connector/TerminalConnectorPluginTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/connector/TerminalConnectorTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/connector/TerminalToRemoteInjectionOutputStreamTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/emulator/AllTests.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackendTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/AbstractITerminalTextDataTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/AllTests.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/SnapshotChangesTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/SynchronizedTerminalTextDataTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataFastScrollTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataFastScrollTestMaxHeigth.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataPerformanceTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataSnapshotTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataSnapshotWindowTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataStoreTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataWindowTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextTestHelper.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/speedtest/SpeedTestConnection.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/speedtest/SpeedTestConnector.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/speedtest/SpeedTestSettings.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/terminalcanvas/Main.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/terminalcanvas/Snippet48.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/terminalcanvas/TerminalTextCanvas.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/terminalcanvas/VirtualCanvas.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/AbstractLineOrientedDataSource.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/DataReader.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/FastDataSource.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/FileDataSource.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/IDataSource.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/IStatus.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/LineCountingDataSource.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/RandomDataSource.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/TerminalTextUITest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/VT100DataSource.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/textcanvas/PipedInputStreamPerformanceTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/textcanvas/PipedStreamTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/model/AllTests.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/model/StyleColorTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/model/StyleTest.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/test/AutomatedPluginTests.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/test/AutomatedTests.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/teamConfig/Terminal All Unit Tests.launch [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/teamConfig/Terminal AutomatedTests.launch [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/teamConfig/Terminal Plugin Tests.launch [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/tm32.png [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.classpath [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.options [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.settings/org.eclipse.pde.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/about.html [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/about.ini [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/about.mappings [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/about.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/plugin.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/plugin.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/pom2.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/schema/contextPropertiesProviders.exsd [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/TerminalContextPropertiesProviderFactory.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/TerminalServiceFactory.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/activator/CoreBundleActivator.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/ITerminalContextPropertiesProvider.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/ITerminalService.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/ITerminalServiceOutputStreamMonitorListener.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/ITerminalTabListener.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/constants/IContextPropertiesConstants.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/constants/ILineSeparatorConstants.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/constants/ITerminalsConnectorConstants.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/internal/PropertyTester.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/nls/Messages.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/nls/Messages.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/preferences/ScopedEclipsePreferences.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/tracing/TraceHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/utils/Env.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/tm32.png [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.classpath [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.options [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.settings/org.eclipse.pde.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/about.html [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/icons/eview16/terminal_view.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/plugin.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/plugin.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/activator/UIPlugin.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/internal/LaunchTerminalHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/internal/PropertyTester.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/internal/TerminalContextPropertiesProvider.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/nls/Messages.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/nls/Messages.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.classpath [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.gitignore [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.options [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.settings/org.eclipse.pde.prefs [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/about.html [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/build.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/contexts.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/command_input_field.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/lock_co.png [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/lock_co@2x.png [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/new_terminal_view.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/command_input_field.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/disconnect.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/lock_co.png [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/lock_co@2x.png [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/new_terminal_view.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/command_input_field.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/disconnect.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/lock_co.png [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/lock_co@2x.png [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/new_terminal_view.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/eview16/console_view.png [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/eview16/console_view@2x.png [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/eview16/terminal_view.gif [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/plugin.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/plugin.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/pom2.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/schema/launcherDelegates.exsd [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/AbstractAction.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/NewTerminalViewAction.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/SelectEncodingAction.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/TabScrollLockAction.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/ToggleCommandFieldAction.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/activator/UIPlugin.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/controls/ConfigurationPanelControl.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/controls/NoteCompositeHelper.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/help/IContextHelpIds.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IConfigurationPanel.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IConfigurationPanelContainer.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IExternalExecutablesProperties.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/ILauncherDelegate.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IMementoHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IPreferenceKeys.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/ITerminalsView.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IUIConstants.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/ImageConsts.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/tracing/ITraceIds.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/ExternalExecutablesState.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/PropertyTester.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/SettingsStore.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/EncodingSelectionDialog.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/LaunchTerminalSettingsDialog.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/AbstractTriggerCommandHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/DisconnectTerminalCommandHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/LaunchTerminalCommandHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/MaximizeViewHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/NewTerminalViewHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/QuickAccessHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/launcher/AbstractLauncherDelegate.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/launcher/LauncherDelegateManager.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/listeners/AbstractWindowListener.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/listeners/WorkbenchPartListener.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/listeners/WorkbenchWindowListener.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/DynamicContributionItems.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/ExternalExecutablesDialog.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/ExternalExecutablesManager.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/manager/ConsoleManager.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.properties [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/panels/AbstractConfigurationPanel.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/panels/AbstractExtendedConfigurationPanel.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/preferences/PreferencePage.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/preferences/PreferencesInitializer.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/services/TerminalService.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/AbstractStreamsConnector.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/InputStreamMonitor.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/OutputStreamMonitor.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/StreamsConnector.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/StreamsLauncherDelegate.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/StreamsSettings.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabCommandFieldHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabDisposeListener.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderManager.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderMenuHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderSelectionListener.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderToolbarHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabTerminalListener.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/view/OldTerminalsViewHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/view/TerminalsView.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/view/TerminalsViewMementoHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/view/showin/GitShowInContextHandler.java [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/pom.xml_bak [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/readme.txt [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/repos/org.eclipse.tm.terminal.repo/.project [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/repos/org.eclipse.tm.terminal.repo/category.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/repos/org.eclipse.tm.terminal.repo/pom.xml [new file with mode: 0644]
rt-ide/org.eclipse.tm.terminal/terminals.psf [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/.classpath [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/.project [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/OSGI-INF/l10n/bundle.properties [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/Activator.class [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererSeparatorSWTHandler.class [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererUnderlineSWTHandler.class [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/CSSPropertySashWidthSWTHandler.class [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/ReflectionUtil.class [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/build.properties [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/plugin.xml [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/pom.xml [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/css/basestyle.css [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/css/tizen_linux.css [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/css/tizen_macosx.css [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/css/tizen_windows.css [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/dragHandle.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/gtkHandle.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/gtkTSFrame.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/macGrey.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/macHandle.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/macTSFrame.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/tizenDragHandle.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/win7.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/win7Handle.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/win7TSFrame.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/winClassicHandle.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/winClassicTSFrame.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/winXPBluHandle.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/winXPBluTSFrame.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/winXPBlue.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/winXPHandle.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/winXPOlive.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/resources/images/winXPTSFrame.png [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/Activator.java [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererSeparatorSWTHandler.java [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererUnderlineSWTHandler.java [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/properties/custom/CSSPropertySashWidthSWTHandler.java [new file with mode: 0644]
rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/properties/custom/ReflectionUtil.java [new file with mode: 0644]
rt-ide/package/addingFiles/IDE.bat [new file with mode: 0644]
rt-ide/package/addingFiles/TizenStudio.bat [new file with mode: 0644]
rt-ide/package/addingFiles/TizenStudio.exe [new file with mode: 0644]
rt-ide/package/addingFiles/TizenStudio.sh [new file with mode: 0644]
rt-ide/package/addingFiles/base-ide-product/removeSite.xml [new file with mode: 0644]
rt-ide/package/addingFiles/base-web-ide-product/dropins/org.eclipse.jst.j2ee.ejb_1.1.700.v201305012100.jar [new file with mode: 0644]
rt-ide/package/addingFiles/executable/windows/win32/eclipse_32.exe [new file with mode: 0644]
rt-ide/package/addingFiles/executable/windows/win64/eclipse_64.exe [new file with mode: 0644]
rt-ide/package/addingFiles/resources/icons/tizen_studio.ico [new file with mode: 0644]
rt-ide/package/addingFiles/resources/icons/tizen_studio_128.png [new file with mode: 0644]
rt-ide/package/addingFiles/resources/icons/tizen_studio_256.png [new file with mode: 0644]
rt-ide/package/ant-contrib.jar [new file with mode: 0644]
rt-ide/package/ant-product.xml [new file with mode: 0644]
rt-ide/package/build.linux [new file with mode: 0644]
rt-ide/package/changelog [new file with mode: 0644]
rt-ide/package/pkginfo.manifest [new file with mode: 0644]
rt-ide/package/rt-ide-product.install.linux [new file with mode: 0644]
rt-ide/package/rt-ide-product.install.macos [new file with mode: 0644]
rt-ide/package/rt-ide-product.install.windows [new file with mode: 0644]
rt-ide/package/rt-ide-product.remove.linux [new file with mode: 0644]
rt-ide/package/rt-ide-product.remove.macos [new file with mode: 0644]
rt-ide/package/rt-ide-product.remove.windows [new file with mode: 0644]
rt-ide/tizen.rt.parent/.project [new file with mode: 0644]
rt-ide/tizen.rt.parent/pom.xml [new file with mode: 0644]
rt-ide/tizen.rt.product.feature/.project [new file with mode: 0644]
rt-ide/tizen.rt.product.feature/LICENSE-2.0.htm [new file with mode: 0644]
rt-ide/tizen.rt.product.feature/build.properties [new file with mode: 0644]
rt-ide/tizen.rt.product.feature/feature.xml [new file with mode: 0644]
rt-ide/tizen.rt.product.feature/license.html [new file with mode: 0644]
rt-ide/tizen.rt.product.feature/pom.xml [new file with mode: 0644]
rt-ide/tizen.rt.product.feature/target/feature.xml [new file with mode: 0644]
rt-ide/tizen.rt.product.feature/target/local-artifacts.properties [new file with mode: 0644]
rt-ide/tizen.rt.product.feature/target/org.tizen.rt.feature-2.0.0-SNAPSHOT.jar [new file with mode: 0644]
rt-ide/tizen.rt.product.feature/target/p2artifacts.xml [new file with mode: 0644]
rt-ide/tizen.rt.product.feature/target/p2content.xml [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/.classpath [moved from rtosIDE/.classpath with 100% similarity]
rt-ide/tizen.rt.product.plugin/.gitignore [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/.project [moved from rtosIDE/.project with 100% similarity]
rt-ide/tizen.rt.product.plugin/META-INF/MANIFEST.MF [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/OSGI-INF/l10n/bundle.properties [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/about.html [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/about.ini [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/about.mappings [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/about.properties [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/build.properties [moved from rtosIDE/build.properties with 100% similarity]
rt-ide/tizen.rt.product.plugin/icons/buildSample.gif [moved from rtosIDE/icons/buildSample.gif with 100% similarity]
rt-ide/tizen.rt.product.plugin/icons/flashSample.gif [moved from rtosIDE/icons/flashSample.gif with 100% similarity]
rt-ide/tizen.rt.product.plugin/icons/ic.png [moved from rtosIDE/icons/ic.png with 100% similarity]
rt-ide/tizen.rt.product.plugin/icons/releng_gears.gif [moved from rtosIDE/icons/releng_gears.gif with 100% similarity]
rt-ide/tizen.rt.product.plugin/icons/sample.gif [moved from rtosIDE/icons/sample.gif with 100% similarity]
rt-ide/tizen.rt.product.plugin/lib/log4j-1.2.17.jar [moved from rtosIDE/lib/log4j-1.2.17.jar with 100% similarity]
rt-ide/tizen.rt.product.plugin/lib/slf4j-api-1.6.4.jar [moved from rtosIDE/lib/slf4j-api-1.6.4.jar with 100% similarity]
rt-ide/tizen.rt.product.plugin/lib/slf4j-log4j12-1.6.4.jar [moved from rtosIDE/lib/slf4j-log4j12-1.6.4.jar with 100% similarity]
rt-ide/tizen.rt.product.plugin/os/win32/x86_64/rxtxParallel.dll [moved from rtosIDE/os/win32/x86_64/rxtxParallel.dll with 100% similarity]
rt-ide/tizen.rt.product.plugin/os/win32/x86_64/rxtxSerial.dll [moved from rtosIDE/os/win32/x86_64/rxtxSerial.dll with 100% similarity]
rt-ide/tizen.rt.product.plugin/plugin.xml [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/plugin_customization.ini [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/pom.xml [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/css/basestyle.css [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/css/tizen_linux.css [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/css/tizen_macosx.css [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/css/tizen_windows.css [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/dragHandle.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/gtkHandle.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/gtkTSFrame.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/macGrey.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/macHandle.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/macTSFrame.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/tizenDragHandle.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/win7.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/win7Handle.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/win7TSFrame.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/winClassicHandle.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/winClassicTSFrame.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/winXPBluHandle.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/winXPBluTSFrame.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/winXPBlue.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/winXPHandle.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/winXPOlive.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/resources/images/winXPTSFrame.png [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/splash.bmp [moved from rtosIDE/splash.bmp with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/eclipse/egit/ui/internal/clone/RtGitImportWizard.java [moved from rtosIDE/src/org/eclipse/egit/ui/internal/clone/RtGitImportWizard.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage.java [moved from rtosIDE/src/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage.java [moved from rtosIDE/src/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/Activator.java [moved from rtosIDE/src/org/tizen/rt/ide/Activator.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/LinuxBuildCommand.java [moved from rtosIDE/src/org/tizen/rt/ide/LinuxBuildCommand.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/LinuxFlashCommand.java [moved from rtosIDE/src/org/tizen/rt/ide/LinuxFlashCommand.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/Messages.java [moved from rtosIDE/src/org/tizen/rt/ide/Messages.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/ResourceManager.java [moved from rtosIDE/src/org/tizen/rt/ide/ResourceManager.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/RtosCommandManager.java [moved from rtosIDE/src/org/tizen/rt/ide/RtosCommandManager.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/Win32BuildCommand.java [moved from rtosIDE/src/org/tizen/rt/ide/Win32BuildCommand.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/Win32FlashCommand.java [moved from rtosIDE/src/org/tizen/rt/ide/Win32FlashCommand.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/build/BuildBuilder.java [moved from rtosIDE/src/org/tizen/rt/ide/build/BuildBuilder.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/build/BuildOption.java [moved from rtosIDE/src/org/tizen/rt/ide/build/BuildOption.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/build/RtosBuildDialogPage.java [moved from rtosIDE/src/org/tizen/rt/ide/build/RtosBuildDialogPage.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/build/RtosBuildWizard.java [moved from rtosIDE/src/org/tizen/rt/ide/build/RtosBuildWizard.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/build/RtosBuildWizardDialog.java [moved from rtosIDE/src/org/tizen/rt/ide/build/RtosBuildWizardDialog.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/console/ConsoleManager.java [moved from rtosIDE/src/org/tizen/rt/ide/console/ConsoleManager.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/flash/FlashBuilder.java [moved from rtosIDE/src/org/tizen/rt/ide/flash/FlashBuilder.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/flash/FlashOption.java [moved from rtosIDE/src/org/tizen/rt/ide/flash/FlashOption.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/flash/RtosFlashDialogPage.java [moved from rtosIDE/src/org/tizen/rt/ide/flash/RtosFlashDialogPage.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/flash/RtosFlashWizard.java [moved from rtosIDE/src/org/tizen/rt/ide/flash/RtosFlashWizard.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/flash/RtosFlashWizardDialog.java [moved from rtosIDE/src/org/tizen/rt/ide/flash/RtosFlashWizardDialog.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/handlers/BuildHandler.java [moved from rtosIDE/src/org/tizen/rt/ide/handlers/BuildHandler.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/handlers/FlashHandler.java [moved from rtosIDE/src/org/tizen/rt/ide/handlers/FlashHandler.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/handlers/TerminalHandler.java [moved from rtosIDE/src/org/tizen/rt/ide/handlers/TerminalHandler.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/log4j.properties [moved from rtosIDE/src/org/tizen/rt/ide/log4j.properties with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/messages.properties [moved from rtosIDE/src/org/tizen/rt/ide/messages.properties with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/perspectives/TizenRTPerspective.java [moved from rtosIDE/src/org/tizen/rt/ide/perspectives/TizenRTPerspective.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/util/IReporter.java [moved from rtosIDE/src/org/tizen/rt/ide/util/IReporter.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/util/OSChecker.java [moved from rtosIDE/src/org/tizen/rt/ide/util/OSChecker.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/util/ProcUtil.java [moved from rtosIDE/src/org/tizen/rt/ide/util/ProcUtil.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/util/Util.java [moved from rtosIDE/src/org/tizen/rt/ide/util/Util.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/util/XMLUtil.java [moved from rtosIDE/src/org/tizen/rt/ide/util/XMLUtil.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/util/ZipUtil.java [moved from rtosIDE/src/org/tizen/rt/ide/util/ZipUtil.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/wizards/NewArtikProjectWizard.java [moved from rtosIDE/src/org/tizen/rt/ide/wizards/NewArtikProjectWizard.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage.java [moved from rtosIDE/src/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2.java [moved from rtosIDE/src/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/wizards/NewMakeDefsWizard.java [moved from rtosIDE/src/org/tizen/rt/ide/wizards/NewMakeDefsWizard.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage.java [moved from rtosIDE/src/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/ide/wizards/TemplateData.java [moved from rtosIDE/src/org/tizen/rt/ide/wizards/TemplateData.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/src/org/tizen/rt/product/RtProjectNature.java [moved from rtosIDE/src/org/tizen/rt/product/RtProjectNature.java with 100% similarity]
rt-ide/tizen.rt.product.plugin/target/MANIFEST.MF [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/about.mappings [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$1$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$10.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$2.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$3.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$4.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$5.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$6.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$7.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$8.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$9.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$2.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$3.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$4.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$5.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$6.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$7.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$8$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$8.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$ProjectLabelProvider.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage$2.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Activator.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/LinuxBuildCommand.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/LinuxFlashCommand.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Messages.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/ResourceManager.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/RtosCommandManager$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/RtosCommandManager.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32BuildCommand$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32BuildCommand$2.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32BuildCommand.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32FlashCommand$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32FlashCommand.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/BuildBuilder.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/BuildOption.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage$2.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage$TableViewerProvider.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizard$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizard.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizardDialog$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizardDialog.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager$2.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager$ConsoleSettingThread.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/FlashBuilder.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/FlashOption.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage$2.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage$TableViewerProvider.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizard$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizard.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizardDialog$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizardDialog.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/BuildHandler$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/BuildHandler.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/FlashHandler$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/FlashHandler.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/TerminalHandler.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/log4j.properties [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/messages.properties [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/perspectives/TizenRTPerspective.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/IReporter.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/OSChecker.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/ProcUtil.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/Util.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/XMLUtil$UniversalNamespaceResolver.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/XMLUtil.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/ZipUtil.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizard$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizard.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2$2.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizard$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizard$2.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizard.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage$1.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage$2.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage$3.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/TemplateData.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/product/RtProjectNature.class [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/local-artifacts.properties [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/maven-archiver/pom.properties [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/org.tizen.rt.product.plugin-3.0.0-SNAPSHOT.jar [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/p2artifacts.xml [new file with mode: 0644]
rt-ide/tizen.rt.product.plugin/target/p2content.xml [new file with mode: 0644]
rt-ide/tizen.rt.product/.DS_Store [new file with mode: 0644]
rt-ide/tizen.rt.product/.project [new file with mode: 0644]
rt-ide/tizen.rt.product/icons/tizen_studio.icns [new file with mode: 0644]
rt-ide/tizen.rt.product/icons/tizen_studio.ico [new file with mode: 0644]
rt-ide/tizen.rt.product/icons/tizen_studio_256.xpm [new file with mode: 0644]
rt-ide/tizen.rt.product/plugin_customization.ini [new file with mode: 0644]
rt-ide/tizen.rt.product/pom.xml [new file with mode: 0644]
rt-ide/tizen.rt.product/tizen.p2.inf [new file with mode: 0644]
rt-ide/tizen.rt.product/tizen.product [new file with mode: 0644]
rt-ide/tizen.rt.releng.prereqs/.project [new file with mode: 0644]
rt-ide/tizen.rt.releng.prereqs/backup [new file with mode: 0644]
rt-ide/tizen.rt.releng.prereqs/pom.xml [new file with mode: 0644]
rt-ide/tizen.rt.releng.prereqs/tizen-releng-prereqs.tpd [new file with mode: 0644]
rt-ide/tizen.rt.releng.prereqs/tizen-rt-releng-prereqs.target [new file with mode: 0644]
rt-ide/tizen.rt.releng.prereqs/tizen-rt-releng-prereqs2.target [new file with mode: 0644]
rt-ide/tizen.rt.releng/.project [new file with mode: 0644]
rt-ide/tizen.rt.releng/pom.xml [new file with mode: 0644]
rt-ide/tizen.rt.releng/workspace/.metadata/.log [new file with mode: 0644]
rt-ide/tizen.rt.upstream.patches/.DS_Store [new file with mode: 0644]
rt-ide/tizen.rt.upstream.patches/.project [new file with mode: 0644]
rt-ide/tizen.rt.upstream.patches/pom.xml [new file with mode: 0644]
rtosIDE/META-INF/MANIFEST.MF [deleted file]
rtosIDE/plugin.xml [deleted file]
rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/BUILD_INFO.txt [new file with mode: 0644]
rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/META-INF/MANIFEST.MF [new file with mode: 0644]
rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/META-INF/eclipse.inf [new file with mode: 0644]
rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/about.html [new file with mode: 0644]
rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/about_files/lgpl.txt [new file with mode: 0644]
rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/fragment.properties [new file with mode: 0644]
rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/os/linux/x86_64/librxtxParallel.so [new file with mode: 0644]
rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/os/linux/x86_64/librxtxSerial.so [new file with mode: 0644]
rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/META-INF/MANIFEST.MF [new file with mode: 0644]
rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/META-INF/eclipse.inf [new file with mode: 0644]
rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/about.html [new file with mode: 0644]
rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/plugin.properties [new file with mode: 0644]
rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/plugin.xml [new file with mode: 0644]
rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/src/gnu.io.rxtx_2.1.7.4_v20071016/about.html [new file with mode: 0644]
rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/src/gnu.io.rxtx_2.1.7.4_v20071016/about_files/lgpl.txt [new file with mode: 0644]
rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/src/gnu.io.rxtx_2.1.7.4_v20071016/src.zip [new file with mode: 0644]
rxtx/gnu.io.rxtx_2.1.7.4_v20071016.jar [new file with mode: 0644]
rxtx/gnu.io.rxtx_2.1.7.4_v20071016/about.html [new file with mode: 0644]
rxtx/gnu.io.rxtx_2.1.7.4_v20071016/about_files/lgpl.txt [new file with mode: 0644]
rxtx/gnu.io.rxtx_2.1.7.4_v20071016/src.zip [new file with mode: 0644]
rxtx/librxtxParallel.so [new file with mode: 0644]
rxtx/librxtxSerial.so [new file with mode: 0644]

diff --git a/rt-ide/AUTHORS b/rt-ide/AUTHORS
new file mode 100644 (file)
index 0000000..ced2a29
--- /dev/null
@@ -0,0 +1,3 @@
+Sangho Park <sangho.p@samsung.com>
+Hyeongseok Heo <hyeongseok.heo@samsung.com>
+YoonKi Park <yoonki.park@samsung.com>
diff --git a/rt-ide/LICENSE.APLv2 b/rt-ide/LICENSE.APLv2
new file mode 100644 (file)
index 0000000..9f962cd
--- /dev/null
@@ -0,0 +1,206 @@
+Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.\r
+\r
+                                 Apache License\r
+                           Version 2.0, January 2004\r
+                        http://www.apache.org/licenses/\r
+\r
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r
+\r
+   1. Definitions.\r
+\r
+      "License" shall mean the terms and conditions for use, reproduction,\r
+      and distribution as defined by Sections 1 through 9 of this document.\r
+\r
+      "Licensor" shall mean the copyright owner or entity authorized by\r
+      the copyright owner that is granting the License.\r
+\r
+      "Legal Entity" shall mean the union of the acting entity and all\r
+      other entities that control, are controlled by, or are under common\r
+      control with that entity. For the purposes of this definition,\r
+      "control" means (i) the power, direct or indirect, to cause the\r
+      direction or management of such entity, whether by contract or\r
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r
+      outstanding shares, or (iii) beneficial ownership of such entity.\r
+\r
+      "You" (or "Your") shall mean an individual or Legal Entity\r
+      exercising permissions granted by this License.\r
+\r
+      "Source" form shall mean the preferred form for making modifications,\r
+      including but not limited to software source code, documentation\r
+      source, and configuration files.\r
+\r
+      "Object" form shall mean any form resulting from mechanical\r
+      transformation or translation of a Source form, including but\r
+      not limited to compiled object code, generated documentation,\r
+      and conversions to other media types.\r
+\r
+      "Work" shall mean the work of authorship, whether in Source or\r
+      Object form, made available under the License, as indicated by a\r
+      copyright notice that is included in or attached to the work\r
+      (an example is provided in the Appendix below).\r
+\r
+      "Derivative Works" shall mean any work, whether in Source or Object\r
+      form, that is based on (or derived from) the Work and for which the\r
+      editorial revisions, annotations, elaborations, or other modifications\r
+      represent, as a whole, an original work of authorship. For the purposes\r
+      of this License, Derivative Works shall not include works that remain\r
+      separable from, or merely link (or bind by name) to the interfaces of,\r
+      the Work and Derivative Works thereof.\r
+\r
+      "Contribution" shall mean any work of authorship, including\r
+      the original version of the Work and any modifications or additions\r
+      to that Work or Derivative Works thereof, that is intentionally\r
+      submitted to Licensor for inclusion in the Work by the copyright owner\r
+      or by an individual or Legal Entity authorized to submit on behalf of\r
+      the copyright owner. For the purposes of this definition, "submitted"\r
+      means any form of electronic, verbal, or written communication sent\r
+      to the Licensor or its representatives, including but not limited to\r
+      communication on electronic mailing lists, source code control systems,\r
+      and issue tracking systems that are managed by, or on behalf of, the\r
+      Licensor for the purpose of discussing and improving the Work, but\r
+      excluding communication that is conspicuously marked or otherwise\r
+      designated in writing by the copyright owner as "Not a Contribution."\r
+\r
+      "Contributor" shall mean Licensor and any individual or Legal Entity\r
+      on behalf of whom a Contribution has been received by Licensor and\r
+      subsequently incorporated within the Work.\r
+\r
+   2. Grant of Copyright License. Subject to the terms and conditions of\r
+      this License, each Contributor hereby grants to You a perpetual,\r
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
+      copyright license to reproduce, prepare Derivative Works of,\r
+      publicly display, publicly perform, sublicense, and distribute the\r
+      Work and such Derivative Works in Source or Object form.\r
+\r
+   3. Grant of Patent License. Subject to the terms and conditions of\r
+      this License, each Contributor hereby grants to You a perpetual,\r
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
+      (except as stated in this section) patent license to make, have made,\r
+      use, offer to sell, sell, import, and otherwise transfer the Work,\r
+      where such license applies only to those patent claims licensable\r
+      by such Contributor that are necessarily infringed by their\r
+      Contribution(s) alone or by combination of their Contribution(s)\r
+      with the Work to which such Contribution(s) was submitted. If You\r
+      institute patent litigation against any entity (including a\r
+      cross-claim or counterclaim in a lawsuit) alleging that the Work\r
+      or a Contribution incorporated within the Work constitutes direct\r
+      or contributory patent infringement, then any patent licenses\r
+      granted to You under this License for that Work shall terminate\r
+      as of the date such litigation is filed.\r
+\r
+   4. Redistribution. You may reproduce and distribute copies of the\r
+      Work or Derivative Works thereof in any medium, with or without\r
+      modifications, and in Source or Object form, provided that You\r
+      meet the following conditions:\r
+\r
+      (a) You must give any other recipients of the Work or\r
+          Derivative Works a copy of this License; and\r
+\r
+      (b) You must cause any modified files to carry prominent notices\r
+          stating that You changed the files; and\r
+\r
+      (c) You must retain, in the Source form of any Derivative Works\r
+          that You distribute, all copyright, patent, trademark, and\r
+          attribution notices from the Source form of the Work,\r
+          excluding those notices that do not pertain to any part of\r
+          the Derivative Works; and\r
+\r
+      (d) If the Work includes a "NOTICE" text file as part of its\r
+          distribution, then any Derivative Works that You distribute must\r
+          include a readable copy of the attribution notices contained\r
+          within such NOTICE file, excluding those notices that do not\r
+          pertain to any part of the Derivative Works, in at least one\r
+          of the following places: within a NOTICE text file distributed\r
+          as part of the Derivative Works; within the Source form or\r
+          documentation, if provided along with the Derivative Works; or,\r
+          within a display generated by the Derivative Works, if and\r
+          wherever such third-party notices normally appear. The contents\r
+          of the NOTICE file are for informational purposes only and\r
+          do not modify the License. You may add Your own attribution\r
+          notices within Derivative Works that You distribute, alongside\r
+          or as an addendum to the NOTICE text from the Work, provided\r
+          that such additional attribution notices cannot be construed\r
+          as modifying the License.\r
+\r
+      You may add Your own copyright statement to Your modifications and\r
+      may provide additional or different license terms and conditions\r
+      for use, reproduction, or distribution of Your modifications, or\r
+      for any such Derivative Works as a whole, provided Your use,\r
+      reproduction, and distribution of the Work otherwise complies with\r
+      the conditions stated in this License.\r
+\r
+   5. Submission of Contributions. Unless You explicitly state otherwise,\r
+      any Contribution intentionally submitted for inclusion in the Work\r
+      by You to the Licensor shall be under the terms and conditions of\r
+      this License, without any additional terms or conditions.\r
+      Notwithstanding the above, nothing herein shall supersede or modify\r
+      the terms of any separate license agreement you may have executed\r
+      with Licensor regarding such Contributions.\r
+\r
+   6. Trademarks. This License does not grant permission to use the trade\r
+      names, trademarks, service marks, or product names of the Licensor,\r
+      except as required for reasonable and customary use in describing the\r
+      origin of the Work and reproducing the content of the NOTICE file.\r
+\r
+   7. Disclaimer of Warranty. Unless required by applicable law or\r
+      agreed to in writing, Licensor provides the Work (and each\r
+      Contributor provides its Contributions) on an "AS IS" BASIS,\r
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r
+      implied, including, without limitation, any warranties or conditions\r
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r
+      PARTICULAR PURPOSE. You are solely responsible for determining the\r
+      appropriateness of using or redistributing the Work and assume any\r
+      risks associated with Your exercise of permissions under this License.\r
+\r
+   8. Limitation of Liability. In no event and under no legal theory,\r
+      whether in tort (including negligence), contract, or otherwise,\r
+      unless required by applicable law (such as deliberate and grossly\r
+      negligent acts) or agreed to in writing, shall any Contributor be\r
+      liable to You for damages, including any direct, indirect, special,\r
+      incidental, or consequential damages of any character arising as a\r
+      result of this License or out of the use or inability to use the\r
+      Work (including but not limited to damages for loss of goodwill,\r
+      work stoppage, computer failure or malfunction, or any and all\r
+      other commercial damages or losses), even if such Contributor\r
+      has been advised of the possibility of such damages.\r
+\r
+   9. Accepting Warranty or Additional Liability. While redistributing\r
+      the Work or Derivative Works thereof, You may choose to offer,\r
+      and charge a fee for, acceptance of support, warranty, indemnity,\r
+      or other liability obligations and/or rights consistent with this\r
+      License. However, in accepting such obligations, You may act only\r
+      on Your own behalf and on Your sole responsibility, not on behalf\r
+      of any other Contributor, and only if You agree to indemnify,\r
+      defend, and hold each Contributor harmless for any liability\r
+      incurred by, or claims asserted against, such Contributor by reason\r
+      of your accepting any such warranty or additional liability.\r
+\r
+   END OF TERMS AND CONDITIONS\r
+\r
+   APPENDIX: How to apply the Apache License to your work.\r
+\r
+      To apply the Apache License to your work, attach the following\r
+      boilerplate notice, with the fields enclosed by brackets "[]"\r
+      replaced with your own identifying information. (Don't include\r
+      the brackets!)  The text should be enclosed in the appropriate\r
+      comment syntax for the file format. We also recommend that a\r
+      file or class name and description of purpose be included on the\r
+      same "printed page" as the copyright notice for easier\r
+      identification within third-party archives.\r
+\r
+   Copyright [yyyy] [name of copyright owner]\r
+\r
+   Licensed under the Apache License, Version 2.0 (the "License");\r
+   you may not use this file except in compliance with the License.\r
+   You may obtain a copy of the License at\r
+\r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
+\r
+\r
+\r
diff --git a/rt-ide/LICENSE.EPLv1 b/rt-ide/LICENSE.EPLv1
new file mode 100644 (file)
index 0000000..d5cdecf
--- /dev/null
@@ -0,0 +1,86 @@
+Eclipse Public License - v 1.0(EPLv1)\r
+\r
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC\r
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT¡¯S ACCEPTANCE OF THIS AGREEMENT.\r
+\r
+1. DEFINITIONS\r
+\r
+"Contribution" means:\r
+\r
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and\r
+b) in the case of each subsequent Contributor:\r
+\r
+i) changes to the Program, and\r
+\r
+ii) additions to the Program;\r
+\r
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor¡¯s behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.\r
+\r
+"Contributor" means any person or entity that distributes the Program.\r
+\r
+"Licensed Patents¡± mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.\r
+\r
+"Program" means the Contributions distributed in accordance with this Agreement.\r
+\r
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.\r
+\r
+2. GRANT OF RIGHTS\r
+\r
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.\r
+\r
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.\r
+\r
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient¡¯s responsibility to acquire that license before distributing the Program.\r
+\r
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.\r
+\r
+3. REQUIREMENTS\r
+\r
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:\r
+\r
+a) it complies with the terms and conditions of this Agreement; and\r
+\r
+b) its license agreement:\r
+\r
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;\r
+\r
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;\r
+\r
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and\r
+\r
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.\r
+\r
+When the Program is made available in source code form:\r
+\r
+a) it must be made available under this Agreement; and\r
+b) a copy of this Agreement must be included with each copy of the Program.\r
+\r
+Contributors may not remove or alter any copyright notices contained within the Program.\r
+\r
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.\r
+\r
+4. COMMERCIAL DISTRIBUTION\r
+\r
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.\r
+\r
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor¡¯s responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.\r
+\r
+5. NO WARRANTY\r
+\r
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. \r
+\r
+6. DISCLAIMER OF LIABILITY\r
+\r
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
+\r
+7. GENERAL\r
+\r
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.\r
+\r
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient¡¯s patent(s), then such Recipient¡¯s rights granted under Section 2(b) shall terminate as of the date such litigation is filed. \r
+\r
+All Recipients¡¯ rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipients¡¯ rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient¡¯s obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.\r
+\r
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppels or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.\r
+\r
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.\r
diff --git a/rt-ide/NOTICE b/rt-ide/NOTICE
new file mode 100644 (file)
index 0000000..235672e
--- /dev/null
@@ -0,0 +1,3 @@
+Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved.\r
+Except as noted, this software is licensed under Apache License, Version 2.\r
+Please, see the LICENSE.APLv2 file for Apache License terms and conditions.\r
diff --git a/rt-ide/org.eclipse.tm.terminal/.gitignore b/rt-ide/org.eclipse.tm.terminal/.gitignore
new file mode 100644 (file)
index 0000000..6d21f73
--- /dev/null
@@ -0,0 +1,11 @@
+bin/
+target/
+workspace/
+debug-workspace/
+
+# ignore various emacs droppings
+*~
+\#*\#
+
+# MacOSX
+.DS_Store
diff --git a/rt-ide/org.eclipse.tm.terminal/.project b/rt-ide/org.eclipse.tm.terminal/.project
new file mode 100644 (file)
index 0000000..6adc60b
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+       </buildSpec>
+       <natures>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/CONTRIBUTING b/rt-ide/org.eclipse.tm.terminal/CONTRIBUTING
new file mode 100644 (file)
index 0000000..871327d
--- /dev/null
@@ -0,0 +1,50 @@
+Contributing to Target Management Terminal
+==========================================
+
+Thanks for your interest in this project.
+
+Project description:
+--------------------
+
+The Target Management Terminal is a lightweight VT100 terminal implementation. The project provides a re-usable terminal widget,
+a set of predefined terminal connectors (i.e. SSH and local shell) and a view managing the terminal sessions.
+
+Developer resources:
+--------------------
+
+Source Repositories:
+
+You can use the code from these repositories to experiment, test, build, create patches, issue pull requests, etc. This project uses Gerrit Code Review; please see contributing via Gerrit (https://wiki.eclipse.org/Gerrit).
+
+tm/org.eclipse.tm.terminal - Target Management Terminal
+    Clone: https://git.eclipse.org/r/tm/org.eclipse.tm.terminal
+    Browse Repository: http://git.eclipse.org/c/tm/org.eclipse.tm.terminal.git
+    Review with Gerrit: https://git.eclipse.org/r/p/tm/org.eclipse.tm.terminal
+
+Contributor License Agreement:
+------------------------------
+
+Before your contribution can be accepted by the project, you need to create and electronically sign the Eclipse Foundation Contributor License Agreement (CLA).
+
+- http://www.eclipse.org/legal/CLA.php
+
+Contact:
+--------
+
+Contact the project developers via the project's "dev" list.
+
+- https://dev.eclipse.org/mailman/listinfo/tm-dev
+
+Search for bugs:
+----------------
+
+This project uses Bugzilla to track ongoing development and issues.
+
+- https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&classification=Tools&component=Terminal&list_id=11564722&product=Target%20Management&query_format=advanced
+
+Create a new bug:
+-----------------
+
+Be sure to search for existing bugs before you create another one. Remember that contributions are always welcome!
+
+- https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Target%20Management&component=Terminal
diff --git a/rt-ide/org.eclipse.tm.terminal/admin/.gitignore b/rt-ide/org.eclipse.tm.terminal/admin/.gitignore
new file mode 100644 (file)
index 0000000..ea8c4bf
--- /dev/null
@@ -0,0 +1 @@
+/target
diff --git a/rt-ide/org.eclipse.tm.terminal/admin/.project b/rt-ide/org.eclipse.tm.terminal/admin/.project
new file mode 100644 (file)
index 0000000..fd60036
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>Administration (TM Terminal)</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+       </buildSpec>
+       <natures>
+       </natures>
+       <linkedResources>
+               <link>
+                       <name>CONTRIBUTING</name>
+                       <type>1</type>
+                       <locationURI>PARENT-1-PROJECT_LOC/CONTRIBUTING</locationURI>
+               </link>
+               <link>
+                       <name>pom.xml</name>
+                       <type>1</type>
+                       <locationURI>PARENT-1-PROJECT_LOC/pom.xml</locationURI>
+               </link>
+               <link>
+                       <name>readme.txt</name>
+                       <type>1</type>
+                       <locationURI>PARENT-1-PROJECT_LOC/readme.txt</locationURI>
+               </link>
+               <link>
+                       <name>terminals.psf</name>
+                       <type>1</type>
+                       <locationURI>PARENT-1-PROJECT_LOC/terminals.psf</locationURI>
+               </link>
+               <link>
+                       <name>toplevel.gitignore</name>
+                       <type>1</type>
+                       <locationURI>PARENT-1-PROJECT_LOC/.gitignore</locationURI>
+               </link>
+       </linkedResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/admin/findbugs-exclude.xml b/rt-ide/org.eclipse.tm.terminal/admin/findbugs-exclude.xml
new file mode 100644 (file)
index 0000000..043085b
--- /dev/null
@@ -0,0 +1,92 @@
+<FindBugsFilter>
+    <!-- Ignore all Terminal Tests -->
+    <Match>
+        <Package name="~org\.eclipse\.tm\.internal\.terminal\.test..*"/>
+    </Match>
+    
+       <!-- Set maximum rank level to 16 -->
+       <Match>
+               <Rank value="17"/>
+       </Match>
+
+       <!-- Ignore all I18N Internationalization bugs -->
+       <Match>
+               <Bug category="I18N"/>
+       </Match>
+       
+       <!-- Ignore all NM_SAME_SIMPLE_NAME_AS_SUPERCLASS or NM_SAME_SIMPLE_NAME_AS_INTERFACE violations -->
+       <Match>
+               <Bug pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS"/>
+       </Match>
+       <Match>
+               <Bug pattern="NM_SAME_SIMPLE_NAME_AS_INTERFACE"/>
+       </Match>
+
+       <!-- Ignore all SF_SWITCH_NO_DEFAULT violations -->
+       <Match>
+               <Bug pattern="SF_SWITCH_NO_DEFAULT"/>
+       </Match>
+
+       <!-- Ignore all serialization violations -->
+       <Match>
+               <Or>
+                       <Bug pattern="SE_BAD_FIELD"/>
+                       <Bug pattern="SE_BAD_FIELD_INNER_CLASS"/>
+                       <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE"/>
+               </Or>
+       </Match>
+       
+       <!-- Ignore all inner class should be static violations -->
+       <Match>
+               <Or>
+                       <Bug pattern="SIC_INNER_SHOULD_BE_STATIC"/>
+                       <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON"/>
+                       <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS"/>
+               </Or>
+       </Match>
+       
+       <!-- Ignore all REC_CATCH_EXCEPTION -->
+       <Match>
+               <Bug pattern="REC_CATCH_EXCEPTION"/>
+       </Match>
+       
+       <!-- Ignore all STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE -->
+       <Match>
+               <Bug pattern="STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE"/>
+       </Match>
+       
+       <!-- Ignore ES_COMPARING_PARAMETER_STRING_WITH_EQ -->
+       <Match>
+               <Bug pattern="ES_COMPARING_PARAMETER_STRING_WITH_EQ"/>
+               <Class name="org.eclipse.tm.terminal.view.ui.manager.ConsoleManager"/>
+       </Match>
+       
+       <!-- Ignore all ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD violations in bundle activators -->
+       <Match>
+               <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD"/>
+               <Or>
+                       <Method name="start" params="org.osgi.framework.BundleContext" returns="void"/>
+                       <Method name="stop" params="org.osgi.framework.BundleContext" returns="void"/>
+                       <Class name="~.*\.Activator"/>
+                       <Class name="~.*\..*Plugin"/>
+               </Or>
+       </Match>
+       
+       <!-- Ignore RV_RETURN_VALUE_IGNORED_BAD_PRACTICE -->
+       <Match>
+               <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE"/>
+        <Class name="org.eclipse.tm.terminal.connector.local.showin.ExternalExecutablesManager"/>
+       </Match>
+
+       <!-- Ignore RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE -->
+       <Match>
+               <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE"/>
+       </Match>
+
+       <!-- Ignore NP_LOAD_OF_KNOWN_NULL_VALUE -->
+       <Match>
+               <Bug pattern="NP_LOAD_OF_KNOWN_NULL_VALUE"/>
+        <Class name="org.eclipse.tm.terminal.connector.local.showin.ExternalExecutablesDialog"/>
+       </Match>
+
+</FindBugsFilter>
diff --git a/rt-ide/org.eclipse.tm.terminal/admin/pom-build.xml b/rt-ide/org.eclipse.tm.terminal/admin/pom-build.xml
new file mode 100644 (file)
index 0000000..1b3f50b
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.eclipse.tm.terminal</groupId>
+        <artifactId>org.eclipse.tm.terminal.maven-config</artifactId>
+        <version>4.2.0-SNAPSHOT</version>
+        <relativePath>pom-config.xml</relativePath>
+    </parent>
+
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <name>TM Terminal, Maven Build Master</name>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.eclipse.tycho</groupId>
+                <artifactId>tycho-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.eclipse.tycho</groupId>
+                <artifactId>target-platform-configuration</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.eclipse.tycho</groupId>
+                <artifactId>tycho-source-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>sign</id>
+            <!-- Uses the new jarsigner from the CBI platform     -->
+            <!-- Works only if the build runs at a Eclipse build server -->
+            
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.eclipse.tycho.extras</groupId>
+                        <artifactId>tycho-pack200a-plugin</artifactId>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.eclipse.cbi.maven.plugins</groupId>
+                        <artifactId>eclipse-jarsigner-plugin</artifactId>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.eclipse.tycho.extras</groupId>
+                        <artifactId>tycho-pack200b-plugin</artifactId>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.eclipse.tycho</groupId>
+                        <artifactId>tycho-p2-plugin</artifactId>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        
+        <profile>
+            <id>findbugs</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>findbugs-maven-plugin</artifactId>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>tests</id>
+            
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.eclipse.tycho</groupId>
+                        <artifactId>tycho-surefire-plugin</artifactId>
+                        <version>${tycho-version}</version>
+                        <configuration>
+                            <useUIHarness>true</useUIHarness>
+                            <useUIThread>true</useUIThread>
+                            <failIfNoTests>false</failIfNoTests>
+                            <dependencies>
+                                <dependency>
+                                    <type>p2-installable-unit</type>
+                                    <artifactId>org.eclipse.sdk.feature.group</artifactId>
+                                    <version>${sdk-version}</version>
+                                </dependency>
+                            </dependencies>
+                            <product>org.eclipse.sdk.ide</product>
+                            <argLine>-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=256m -Drse.enableSecureStoreAccess=false -Dorg.eclipse.swt.browser.UseWebKitGTK=true</argLine>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        
+    </profiles>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/admin/pom-config.xml b/rt-ide/org.eclipse.tm.terminal/admin/pom-config.xml
new file mode 100644 (file)
index 0000000..4daa699
--- /dev/null
@@ -0,0 +1,440 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+
+    <prerequisites>
+        <maven>3.0</maven>
+    </prerequisites>
+
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-config</artifactId>
+    <version>4.2.0-SNAPSHOT</version> 
+    <packaging>pom</packaging>
+    <name>TM Terminal, Maven Configuration Master</name>
+
+    <licenses>
+        <license>
+            <name>Eclipse Public License</name>
+            <url>http://www.eclipse.org/legal/epl-v10.html</url>
+            <distribution>repo</distribution>
+            <comments>
+            All rights reserved.
+
+            This program and the accompanying materials are made
+            available under the terms of the Eclipse Public License v1.0
+            which accompanies this distribution, and is available at
+            http://www.eclipse.org/legal/epl-v10.htm
+            </comments>
+        </license>
+    </licenses>
+
+    <organization>
+        <name>Eclipse Foundation</name>
+        <url>http://www.eclipse.org/</url>
+    </organization>
+    
+    <properties>
+        <!-- Define version id's to be used in the plugins section -->
+        <tycho-version>0.22.0</tycho-version>
+        <tycho-extras-version>0.22.0</tycho-extras-version>
+        <maven-resources-version>2.7</maven-resources-version>
+        <maven-antrun-version>1.8</maven-antrun-version>
+        <gmaven-version>1.5</gmaven-version>
+        <!-- Stick to Findbugs 2.5.2 until newer versions are supported by hudson.eclipse.org -->
+        <findbugs-version>2.5.2</findbugs-version>
+        <eclipse-jarsigner-version>1.1.2</eclipse-jarsigner-version>
+
+        <!-- Common global properties -->
+        <adminDir>${env.WORKSPACE}/admin</adminDir>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+
+        <tycho.scmUrl>scm:git:git://git.eclipse.org/gitroot/tm/org.eclipse.tm.terminal.git</tycho.scmUrl>
+
+        <terminal-stream>development</terminal-stream>
+        <terminal-zipfile>${project.artifactId}.zip</terminal-zipfile>
+        <terminal-install>/home/data/httpd/download.eclipse.org/tm/terminal/builds/${terminal-stream}/nightly</terminal-install>
+        <sdk-version>4.5</sdk-version>
+        
+        <!-- Set up the default target platform to build against -->
+        <license-site>http://download.eclipse.org/cbi/updates/license</license-site>
+        <platform-site>http://download.eclipse.org/eclipse/updates/4.7milestones</platform-site>
+        <platform-release-site>http://download.eclipse.org/staging/oxygen</platform-release-site>
+               <orbit-site>http://download.eclipse.org/tools/orbit/downloads/drops/R20160520211859/repository</orbit-site>
+        <cdt-site>http://download.eclipse.org/tools/cdt/builds/neon/milestones</cdt-site>
+        <rse-site>http://download.eclipse.org/tm/updates/4.1milestones</rse-site>
+        <remote-site>http://download.eclipse.org/tools/ptp/builds/remote/oxygen/milestones</remote-site>
+        <swtbot-site>http://download.eclipse.org/technology/swtbot/releases/latest/</swtbot-site>
+        <rxtx-site>http://archive.eclipse.org/tm/updates/rxtx</rxtx-site>
+      </properties>
+
+    <repositories>
+        <repository>
+            <id>license-feature</id>
+            <url>${license-site}</url>
+            <layout>p2</layout>
+        </repository>    
+        <repository>
+            <id>platform</id>
+            <url>${platform-site}</url>
+            <layout>p2</layout>
+        </repository>
+        <repository>
+            <id>platform-release</id>
+            <url>${platform-release-site}</url>
+            <layout>p2</layout>
+        </repository>
+        <repository>
+            <id>orbit</id>
+            <url>${orbit-site}</url>
+            <layout>p2</layout>
+        </repository>
+        <repository>
+            <id>cdt</id>
+            <url>${cdt-site}</url>
+            <layout>p2</layout>
+        </repository>
+        <repository>
+            <id>rse</id>
+            <url>${rse-site}</url>
+            <layout>p2</layout>
+        </repository>
+        <repository>
+            <id>remote</id>
+            <url>${remote-site}</url>
+            <layout>p2</layout>
+        </repository>
+        <repository>
+            <id>swtbot</id>
+            <url>${swtbot-site}</url>
+            <layout>p2</layout>
+        </repository>
+        <repository>
+            <id>rxtx</id>
+            <url>${rxtx-site}</url>
+            <layout>p2</layout>
+        </repository>
+    </repositories>
+
+    <pluginRepositories>
+        <pluginRepository>
+            <id>sonatype</id>
+            <url>https://oss.sonatype.org/content/repositories/public</url>
+              <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+        </pluginRepository>
+        <pluginRepository>                                                                                         
+            <id>cbi</id>                                                                                         
+            <url>https://repo.eclipse.org/content/repositories/cbi-releases/</url>                                             
+        </pluginRepository>
+               <pluginRepository>
+                       <id>cbi-snapshots</id>
+                       <url>https://repo.eclipse.org/content/repositories/cbi-snapshots/</url>
+               </pluginRepository>
+    </pluginRepositories>
+
+    <profiles>
+        <profile>
+            <!-- Eclipse 3.8.x (Juno) -->
+            <id>juno</id>
+            
+            <properties>
+                <terminal-stream>juno</terminal-stream>
+                <sdk-version>3.8</sdk-version>
+                <platform-site>http://download.eclipse.org/eclipse/updates/${sdk-version}</platform-site>
+                <platform-release-site>http://download.eclipse.org/releases/${terminal-stream}</platform-release-site>
+                <cdt-site>http://download.eclipse.org/tools/cdt/releases/8.4</cdt-site>
+            </properties>
+        </profile>
+        <profile>
+            <!-- Eclipse 4.3.x (Kepler) -->
+            <id>kepler</id>
+            
+            <properties>
+                <terminal-stream>kepler</terminal-stream>
+                <sdk-version>4.3</sdk-version>
+                <platform-site>http://download.eclipse.org/eclipse/updates/${sdk-version}</platform-site>
+                <platform-release-site>http://download.eclipse.org/releases/${terminal-stream}</platform-release-site>
+                <cdt-site>http://download.eclipse.org/tools/cdt/releases/8.4</cdt-site>
+            </properties>
+        </profile>
+        <profile>
+            <!-- Eclipse 4.4.x (Luna) -->
+            <id>luna</id>
+            
+            <properties>
+                <terminal-stream>luna</terminal-stream>
+                <sdk-version>4.4</sdk-version>
+                <platform-site>http://download.eclipse.org/eclipse/updates/${sdk-version}</platform-site>
+                <platform-release-site>http://download.eclipse.org/releases/${terminal-stream}</platform-release-site>
+                <cdt-site>http://download.eclipse.org/tools/cdt/releases/8.5</cdt-site>
+            </properties>
+        </profile>
+        <profile>
+            <!-- Eclipse 4.5.x (Mars) -->
+            <id>mars</id>
+            
+            <properties>
+                <terminal-stream>mars</terminal-stream>
+                <sdk-version>4.5</sdk-version>
+                <platform-site>http://download.eclipse.org/eclipse/updates/${sdk-version}</platform-site>
+                <platform-release-site>http://download.eclipse.org/releases/${terminal-stream}</platform-release-site>
+                <cdt-site>http://download.eclipse.org/tools/cdt/releases/8.7</cdt-site>
+            </properties>
+        </profile>
+        <profile>
+            <!-- Eclipse 4.6.x (Neon) -->
+            <id>neon</id>
+            
+            <properties>
+                <terminal-stream>neon</terminal-stream>
+                <sdk-version>4.6</sdk-version>
+                <!-- Replace with updates/4.6 after Neon.2 -->
+                <platform-site>http://download.eclipse.org/eclipse/updates/4.6-M-builds</platform-site>
+                <!-- Replace with releases/neon after Neon.2 -->
+                <platform-release-site>http://download.eclipse.org/staging/${terminal-stream}</platform-release-site>
+                <!-- Replace with cdt/releases/9.0 (or 9.1 or 9.2) after Neon.2 -->
+                <cdt-site>http://download.eclipse.org/tools/cdt/builds/neon/milestones</cdt-site>
+            </properties>
+        </profile>
+    </profiles>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.eclipse.tycho</groupId>
+                <artifactId>tycho-maven-plugin</artifactId>
+                <version>${tycho-version}</version>
+                <extensions>true</extensions>
+            </plugin>
+        </plugins>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.eclipse.tycho</groupId>
+                    <artifactId>tycho-maven-plugin</artifactId>
+                    <version>${tycho-version}</version>
+                    <extensions>true</extensions>
+                </plugin>
+                <plugin>
+                    <groupId>org.eclipse.tycho</groupId>
+                    <artifactId>target-platform-configuration</artifactId>
+                    <version>${tycho-version}</version>
+                    <configuration>
+                        <environments>
+                            <environment>
+                                <os>linux</os>
+                                <ws>gtk</ws>
+                                <arch>x86</arch>
+                            </environment>
+                            <environment>
+                                <os>linux</os>
+                                <ws>gtk</ws>
+                                <arch>x86_64</arch>
+                            </environment>
+                            <environment>
+                                <os>win32</os>
+                                <ws>win32</ws>
+                                <arch>x86</arch>
+                            </environment>
+                            <environment>
+                                <os>win32</os>
+                                <ws>win32</ws>
+                                <arch>x86_64</arch>
+                            </environment>
+                            <environment>
+                                <os>macosx</os>
+                                <ws>cocoa</ws>
+                                <arch>x86_64</arch>
+                            </environment>
+                        </environments>
+                        <resolver>p2</resolver>
+                        <ignoreTychoRepositories>true</ignoreTychoRepositories>
+                        <includePackedArtifacts>true</includePackedArtifacts>
+                        <pomDependencies>consider</pomDependencies>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.eclipse.tycho</groupId>
+                    <artifactId>tycho-compiler-plugin</artifactId>
+                    <version>${tycho-version}</version>
+                    <configuration>
+                        <encoding>UTF-8</encoding>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.eclipse.tycho</groupId>
+                    <artifactId>tycho-source-plugin</artifactId>
+                    <version>${tycho-version}</version>
+                    <configuration>
+                        <encoding>UTF-8</encoding>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <id>plugin-source</id>
+                            <goals>
+                                <goal>plugin-source</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.eclipse.tycho</groupId>
+                    <artifactId>tycho-packaging-plugin</artifactId>
+                    <version>${tycho-version}</version>
+                    <dependencies>
+                        <dependency>
+                            <groupId>org.eclipse.tycho.extras</groupId>
+                            <artifactId>tycho-buildtimestamp-jgit</artifactId>
+                            <version>${tycho-version}</version>
+                        </dependency>
+                        <dependency>
+                            <groupId>org.eclipse.tycho.extras</groupId>
+                            <artifactId>tycho-sourceref-jgit</artifactId>
+                            <version>${tycho-extras-version}</version>
+                        </dependency>
+                    </dependencies>
+                    <configuration>
+                        <strictBinIncludes>false</strictBinIncludes>
+                        <timestampProvider>jgit</timestampProvider>
+                        <jgit.ignore>pom.xml</jgit.ignore>
+                        <jgit.dirtyWorkingTree>ignore</jgit.dirtyWorkingTree>
+                        <sourceReferences>
+                            <generate>true</generate>
+                        </sourceReferences>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.eclipse.tycho</groupId>
+                    <artifactId>tycho-p2-repository-plugin</artifactId>
+                    <version>${tycho-version}</version>
+                    <configuration>
+                        <finalName>${project.artifactId}</finalName>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-resources-plugin</artifactId>
+                    <version>${maven-resources-version}</version>
+                    <configuration>
+                        <encoding>UTF-8</encoding>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-antrun-plugin</artifactId>
+                    <version>${maven-antrun-version}</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.codehaus.gmaven</groupId>
+                    <artifactId>gmaven-plugin</artifactId>
+                    <version>${gmaven-version}</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>findbugs-maven-plugin</artifactId>
+                    <version>${findbugs-version}</version>
+                    <configuration>
+                        <encoding>UTF-8</encoding>
+                        <effort>Max</effort>
+                        <threshold>Low</threshold>
+                        <xmlOutput>true</xmlOutput>
+                        <failOnError>false</failOnError>
+                        <excludeFilterFile>${adminDir}/findbugs-exclude.xml</excludeFilterFile>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <goals>
+                                <goal>check</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>      
+                    <groupId>org.jacoco</groupId>
+                    <artifactId>jacoco-maven-plugin</artifactId>
+                    <version>${jacoco-version}</version>
+                </plugin>
+                
+                <!-- Pack200 and Signing -->
+                <plugin>
+                    <groupId>org.eclipse.tycho.extras</groupId>
+                    <artifactId>tycho-pack200a-plugin</artifactId>
+                    <version>${tycho-version}</version>
+                    <executions>
+                        <execution>
+                            <id>pack200-normalize</id>
+                            <phase>verify</phase>
+                            <goals>
+                                <goal>normalize</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.eclipse.cbi.maven.plugins</groupId>
+                    <artifactId>eclipse-jarsigner-plugin</artifactId>
+                    <version>${eclipse-jarsigner-version}</version>
+                    <executions>
+                        <execution>
+                            <id>sign</id>
+                            <phase>verify</phase>
+                            <goals>
+                                <goal>sign</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.eclipse.tycho.extras</groupId>
+                    <artifactId>tycho-pack200b-plugin</artifactId>
+                    <version>${tycho-version}</version>
+                    <executions>
+                        <execution>
+                            <id>pack200-pack</id>
+                            <phase>verify</phase>
+                            <goals>
+                                <goal>pack</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <!-- Keep the tycho-p2-plugin after the tycho-pack200b-plugin -->
+                <!-- Tycho p2 metadata generation shall happen _after_ the JAR has been packed. -->
+                <plugin>
+                    <groupId>org.eclipse.tycho</groupId>
+                    <artifactId>tycho-p2-plugin</artifactId>
+                    <version>${tycho-version}</version>
+                    <!-- Signing appears to mess with the baseline repository logic.
+                         Disable the baseline repository until we've figured out what is going on. -->
+                    <!--                    
+                    <configuration>
+                        <baselineRepositories>
+                            <repository>
+                                <url>http://download.eclipse.org/tools/tm/terminal/builds/${terminal-stream}/nightly</url>
+                            </repository>
+                        </baselineRepositories>
+                    </configuration>
+                    -->
+                    <executions>
+                        <execution>
+                            <id>p2-metadata</id>
+                            <phase>package</phase>
+                            <goals>
+                                <goal>p2-metadata</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                    <configuration>
+                        <defaultP2Metadata>false</defaultP2Metadata>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/admin/settings.xml b/rt-ide/org.eclipse.tm.terminal/admin/settings.xml
new file mode 100644 (file)
index 0000000..c5cb82d
--- /dev/null
@@ -0,0 +1,10 @@
+<settings>
+  <mirrors>
+    <mirror>
+      <id>eclipse-maven-central</id>
+      <name>Eclipse Maven Central</name>
+      <url>https://repo.eclipse.org/content/repositories/maven_central/</url>
+      <mirrorOf>central</mirrorOf>
+    </mirror>
+  </mirrors>
+</settings>
diff --git a/rt-ide/org.eclipse.tm.terminal/admin/target-defs/eclipse-4.4.x-luna.target b/rt-ide/org.eclipse.tm.terminal/admin/target-defs/eclipse-4.4.x-luna.target
new file mode 100644 (file)
index 0000000..f027b3d
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?><target name="Terminals Eclipse 4.4.x (Luna)" sequenceNumber="71">
+<locations>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.license.feature.group" version="1.0.1.v20140414-1359"/>
+<repository location="http://download.eclipse.org/cbi/updates/license"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="gnu.io.rxtx.sdk.feature.group" version="2.1.7.4_v20071016-417C7DP1Bh_eEaQJBrHBHg"/>
+<repository location="http://archive.eclipse.org/tm/updates/rxtx"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.sdk.ide" version="4.4.2.M20150204-1700"/>
+<repository location="http://download.eclipse.org/eclipse/updates/4.4"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.cdt.native.source.feature.group" version="8.5.0.201409172108"/>
+<unit id="org.eclipse.cdt.native.feature.group" version="8.5.0.201409172108"/>
+<repository location="http://download.eclipse.org/tools/cdt/releases/8.5"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.rse.sdk.feature.group" version="3.7.0.201502160819"/>
+<repository location="http://download.eclipse.org/tm/updates/3.7"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.emf.sdk.feature.group" version="2.10.2.v20150123-0452"/>
+<repository location="http://download.eclipse.org/releases/luna"/>
+</location>
+</locations>
+</target>
diff --git a/rt-ide/org.eclipse.tm.terminal/admin/target-defs/eclipse-4.5.x-mars.target b/rt-ide/org.eclipse.tm.terminal/admin/target-defs/eclipse-4.5.x-mars.target
new file mode 100644 (file)
index 0000000..d7202f7
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?><target name="Terminals Eclipse 4.5.x (Mars)" sequenceNumber="95">
+<locations>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.license.feature.group" version="1.0.1.v20140414-1359"/>
+<repository location="http://download.eclipse.org/cbi/updates/license"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="gnu.io.rxtx.sdk.feature.group" version="2.1.7.4_v20071016-417C7DP1Bh_eEaQJBrHBHg"/>
+<repository location="http://archive.eclipse.org/tm/updates/rxtx"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.rse.sdk.feature.group" version="3.7.0.201505221634"/>
+<repository location="http://download.eclipse.org/tm/updates/4.0"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.test.feature.group" version="3.7.0.v20150428-2048"/>
+<unit id="org.eclipse.sdk.ide" version="4.5.2.M20160212-1500"/>
+<repository location="http://download.eclipse.org/eclipse/updates/4.5"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.jgit.feature.group" version="4.1.1.201511131810-r"/>
+<unit id="org.eclipse.egit.feature.group" version="4.1.1.201511131810-r"/>
+<unit id="org.eclipse.cdt.sdk.feature.group" version="8.8.1.201602051005"/>
+<unit id="org.eclipse.emf.sdk.feature.group" version="2.11.2.v20160208-0841"/>
+<repository location="http://download.eclipse.org/releases/mars"/>
+</location>
+</locations>
+</target>
diff --git a/rt-ide/org.eclipse.tm.terminal/admin/target-defs/eclipse-4.6.x-neon.target b/rt-ide/org.eclipse.tm.terminal/admin/target-defs/eclipse-4.6.x-neon.target
new file mode 100644 (file)
index 0000000..0ecd7d3
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?><target name="Terminals Eclipse 4.6.x (Neon)" sequenceNumber="104">
+<locations>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.license.feature.group" version="1.0.1.v20140414-1359"/>
+<repository location="http://download.eclipse.org/cbi/updates/license"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="gnu.io.rxtx.sdk.feature.group" version="2.1.7.4_v20071016-417C7DP1Bh_eEaQJBrHBHg"/>
+<repository location="http://archive.eclipse.org/tm/updates/rxtx"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.test.feature.group" version="3.7.100.v20160503-1715"/>
+<unit id="org.eclipse.sdk.ide" version="4.6.0.I20160606-1100"/>
+<repository location="http://download.eclipse.org/eclipse/updates/4.6"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.rse.sdk.feature.group" version="3.7.0.201505221634"/>
+<repository location="http://download.eclipse.org/tm/updates/4.0"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.jgit.feature.group" version="4.4.0.201606070830-r"/>
+<unit id="org.eclipse.egit.feature.group" version="4.4.0.201606070830-r"/>
+<unit id="org.eclipse.cdt.sdk.feature.group" version="9.0.0.201606062011"/>
+<unit id="org.eclipse.emf.sdk.feature.group" version="2.12.0.v20160526-0356"/>
+<repository location="http://download.eclipse.org/releases/neon"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.remote.feature.group" version="2.1.0.201605242106"/>
+<unit id="org.eclipse.remote.source.feature.group" version="2.1.0.201605242106"/>
+<repository location="http://download.eclipse.org/tools/ptp/builds/remote/2.1.0"/>
+</location>
+</locations>
+</target>
diff --git a/rt-ide/org.eclipse.tm.terminal/admin/target-defs/eclipse-4.7.x-oxygen.target b/rt-ide/org.eclipse.tm.terminal/admin/target-defs/eclipse-4.7.x-oxygen.target
new file mode 100644 (file)
index 0000000..2283bb7
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?><target name="Terminals Eclipse 4.7.x (Oxygen)" sequenceNumber="4">
+<locations>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.license.feature.group" version="1.0.1.v20140414-1359"/>
+<repository location="http://download.eclipse.org/cbi/updates/license"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="gnu.io.rxtx.sdk.feature.group" version="2.1.7.4_v20071016-417C7DP1Bh_eEaQJBrHBHg"/>
+<repository location="http://archive.eclipse.org/tm/updates/rxtx"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.test.feature.group" version="3.7.100.v20160912-1145"/>
+<unit id="org.eclipse.sdk.ide" version="4.7.0.I20160915-0230"/>
+<repository location="http://download.eclipse.org/eclipse/updates/4.7milestones"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.rse.sdk.feature.group" version="3.7.1.201603211627"/>
+<repository location="http://download.eclipse.org/tm/updates/4.1milestones"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.jgit.feature.group" version="4.4.1.201607150455-r"/>
+<unit id="org.eclipse.egit.feature.group" version="4.4.1.201607150455-r"/>
+<unit id="org.eclipse.cdt.sdk.feature.group" version="9.0.0.201606062011"/>
+<unit id="org.eclipse.emf.sdk.feature.group" version="2.12.0.v20160526-0356"/>
+<repository location="http://download.eclipse.org/staging/oxygen"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.remote.feature.group" version="2.1.0.201605242106"/>
+<unit id="org.eclipse.remote.source.feature.group" version="2.1.0.201605242106"/>
+<repository location="http://download.eclipse.org/tools/ptp/builds/remote/oxygen/milestones"/>
+</location>
+</locations>
+</target>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/.project
new file mode 100644 (file)
index 0000000..2b17792
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.local.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/build.properties
new file mode 100644 (file)
index 0000000..400f7fd
--- /dev/null
@@ -0,0 +1,13 @@
+################################################################################
+# Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Michael Scharf (Wind River) - initial API and implementation 
+# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+################################################################################
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/feature.properties
new file mode 100644 (file)
index 0000000..811064b
--- /dev/null
@@ -0,0 +1,36 @@
+###############################################################################
+# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+# Martin Oberhuber (Wind River) - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal Local Connector Extensions
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=A connector implementation for the Local Terminal.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2003, 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/feature.xml
new file mode 100644 (file)
index 0000000..39d7841
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2015, 2016 Wind River Systems, Inc. and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         Wind River - initial API and implementation
+ -->
+<feature
+      id="org.eclipse.tm.terminal.connector.local.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.core.expressions" version="3.4.400" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.core.runtime" version="3.8.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.core.variables" version="3.2.600" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.tm.terminal.connector.process" version="4.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.tm.terminal.control" version="4.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui" version="3.8.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.control.feature" version="4.0.0" match="compatible"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.connector.local"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.tm.terminal.connector.process"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/p2.inf b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/p2.inf
new file mode 100644 (file)
index 0000000..ea454dd
--- /dev/null
@@ -0,0 +1,22 @@
+###############################################################################
+# Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+
+# Make the org.eclipse.cdt.native feature dependency "optional" since it didn't
+# exist in CDT 8.3 and we can also work on top of CDT 8.3.
+
+# The real dependencies are all properly managed via p2.inf in the
+# org.eclipse.tm.terminal.connector.process/META-INF/p2.inf file.
+# The only benefit of requesting the feature here is that it allow pulling in
+# additional fragments that we are not aware of in the bundle's p2.inf.
+
+requires.0.namespace = org.eclipse.equinox.p2.iu
+requires.0.name = org.eclipse.cdt.native.feature.group
+requires.0.greedy = true
+requires.0.optional = true
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.feature/pom.xml
new file mode 100644 (file)
index 0000000..ffed438
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.local.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  
+  <properties>
+       <jacoco.skip>true</jacoco.skip>
+  </properties>
+  
+  <build>
+       <pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-packaging-plugin</artifactId>
+                               <version>${tycho-version}</version>
+                               <configuration>
+                                       <timestampProvider>default</timestampProvider>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </pluginManagement>
+  </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/.project
new file mode 100644 (file)
index 0000000..e85d50f
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.local.sdk.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/build.properties
new file mode 100644 (file)
index 0000000..400f7fd
--- /dev/null
@@ -0,0 +1,13 @@
+################################################################################
+# Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Michael Scharf (Wind River) - initial API and implementation 
+# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+################################################################################
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/feature.properties
new file mode 100644 (file)
index 0000000..78b194b
--- /dev/null
@@ -0,0 +1,36 @@
+###############################################################################
+# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+# Martin Oberhuber (Wind River) - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal Local Connector Extensions, SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=A connector implementation for the Local Terminal.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2003, 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/feature.xml
new file mode 100644 (file)
index 0000000..c696c8c
--- /dev/null
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2015, 2016 Wind River Systems, Inc. and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         Wind River - initial API and implementation
+ -->
+<feature
+      id="org.eclipse.tm.terminal.connector.local.sdk.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <includes
+         id="org.eclipse.tm.terminal.connector.local.feature"
+         version="0.0.0"/>
+
+   <requires>
+      <import feature="org.eclipse.tm.terminal.control.sdk.feature" version="4.0.0" match="compatible"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.connector.local.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.tm.terminal.connector.process.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.local.sdk.feature/pom.xml
new file mode 100644 (file)
index 0000000..e29dbc4
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.local.sdk.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  
+  <properties>
+       <jacoco.skip>true</jacoco.skip>
+  </properties>
+  
+  <build>
+       <pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-packaging-plugin</artifactId>
+                               <version>${tycho-version}</version>
+                               <configuration>
+                                       <timestampProvider>default</timestampProvider>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </pluginManagement>
+  </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/.project
new file mode 100644 (file)
index 0000000..678a8ee
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.remote.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/build.properties
new file mode 100644 (file)
index 0000000..cd19ac2
--- /dev/null
@@ -0,0 +1,9 @@
+###############################################################################
+# Copyright (c) 2015 IBM Corp. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/feature.properties
new file mode 100644 (file)
index 0000000..bebe415
--- /dev/null
@@ -0,0 +1,33 @@
+###############################################################################
+# Copyright (c) 2015, 2016 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal via Remote API Connector Extensions
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=A Terminal Connector using the org.eclipse.remote API.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2015, 2016 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/feature.xml
new file mode 100644 (file)
index 0000000..99fc63a
--- /dev/null
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2015 IBM Corporation and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         IBM Corporation - initial API and implementation
+ -->
+<feature
+      id="org.eclipse.tm.terminal.connector.remote.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.ui"/>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.eclipse.tm.terminal.control"/>
+      <import plugin="org.eclipse.remote.core"/>
+      <import plugin="org.eclipse.remote.ui"/>
+      <import plugin="org.eclipse.core.resources"/>
+      <import plugin="org.eclipse.swt"/>
+      <import plugin="org.eclipse.jface"/>
+      <import plugin="org.eclipse.ui.ide"/>
+      <import feature="org.eclipse.tm.terminal.control.feature" version="4.0.0" match="compatible"/>
+      <import plugin="org.eclipse.core.expressions"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.connector.remote"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.feature/pom.xml
new file mode 100644 (file)
index 0000000..d847ea3
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.remote.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  
+  <properties>
+       <jacoco.skip>true</jacoco.skip>
+  </properties>
+  
+  <build>
+       <pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-packaging-plugin</artifactId>
+                               <version>${tycho-version}</version>
+                               <configuration>
+                                       <timestampProvider>default</timestampProvider>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </pluginManagement>
+  </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/.project
new file mode 100644 (file)
index 0000000..f63833f
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.remote.sdk.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/build.properties
new file mode 100644 (file)
index 0000000..6496f1d
--- /dev/null
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2015 IBM Corp. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+
+bin.includes = feature.xml,\
+               feature.properties
+
+generate.plugin@org.eclipse.tm.terminal.remote.source=org.eclipse.tm.terminal.remote
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/feature.properties
new file mode 100644 (file)
index 0000000..5f882d8
--- /dev/null
@@ -0,0 +1,33 @@
+###############################################################################
+# Copyright (c) 2015, 2016 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal via Remote API Connector Extensions, SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=An remote connector implementation for the Terminal.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2015, 2016 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/feature.xml
new file mode 100644 (file)
index 0000000..658365b
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2015 IBM Corporation and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         IBM Corporation - initial API and implementation
+ -->
+<feature
+      id="org.eclipse.tm.terminal.connector.remote.sdk.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <includes
+         id="org.eclipse.tm.terminal.connector.remote.feature"
+         version="0.0.0"/>
+
+   <requires>
+      <import feature="org.eclipse.tm.terminal.control.sdk.feature" version="4.0.0" match="compatible"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.connector.remote.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.remote.sdk.feature/pom.xml
new file mode 100644 (file)
index 0000000..9b9b2f0
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.remote.sdk.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  
+  <properties>
+       <jacoco.skip>true</jacoco.skip>
+  </properties>
+  
+  <build>
+       <pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-packaging-plugin</artifactId>
+                               <version>${tycho-version}</version>
+                               <configuration>
+                                       <timestampProvider>default</timestampProvider>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </pluginManagement>
+  </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/.project
new file mode 100644 (file)
index 0000000..cf695db
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.serial.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/build.properties
new file mode 100644 (file)
index 0000000..400f7fd
--- /dev/null
@@ -0,0 +1,13 @@
+################################################################################
+# Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Michael Scharf (Wind River) - initial API and implementation 
+# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+################################################################################
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/feature.properties
new file mode 100644 (file)
index 0000000..3256dc7
--- /dev/null
@@ -0,0 +1,36 @@
+###############################################################################
+# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+# Martin Oberhuber (Wind River) - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal Serial Connector Extensions
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=A serial line connector for the Terminal using RXTX API
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2003, 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/feature.xml
new file mode 100644 (file)
index 0000000..b1789aa
--- /dev/null
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2006 - 2015 Wind River Systems, Inc. and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         Wind River - initial API and implementation
+         Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+ -->
+<feature
+      id="org.eclipse.tm.terminal.connector.serial.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.tm.terminal.control" version="4.0.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.control.feature" version="4.0.0" match="compatible"/>
+      <import plugin="org.eclipse.core.expressions" version="3.4.400" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.core.runtime" version="3.8.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.equinox.security" version="1.1.100" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui" version="3.8.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.connector.serial"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.feature/pom.xml
new file mode 100644 (file)
index 0000000..3e34387
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.serial.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  
+  <properties>
+       <jacoco.skip>true</jacoco.skip>
+  </properties>
+  
+  <build>
+       <pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-packaging-plugin</artifactId>
+                               <version>${tycho-version}</version>
+                               <configuration>
+                                       <timestampProvider>default</timestampProvider>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </pluginManagement>
+  </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/.project
new file mode 100644 (file)
index 0000000..2015b76
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.serial.sdk.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/build.properties
new file mode 100644 (file)
index 0000000..400f7fd
--- /dev/null
@@ -0,0 +1,13 @@
+################################################################################
+# Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Michael Scharf (Wind River) - initial API and implementation 
+# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+################################################################################
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/feature.properties
new file mode 100644 (file)
index 0000000..97e0b03
--- /dev/null
@@ -0,0 +1,36 @@
+###############################################################################
+# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+# Martin Oberhuber (Wind River) - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal Serial Connector Extensions, SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=A serial line connector for the Terminal using RXTX API
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2003, 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/feature.xml
new file mode 100644 (file)
index 0000000..87e312f
--- /dev/null
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2006, 2014 Wind River Systems, Inc. and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         Wind River - initial API and implementation
+         Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+ -->
+<feature
+      id="org.eclipse.tm.terminal.connector.serial.sdk.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <includes
+         id="org.eclipse.tm.terminal.connector.serial.feature"
+         version="0.0.0"/>
+
+   <requires>
+      <import feature="org.eclipse.tm.terminal.control.sdk.feature" version="4.0.0" match="compatible"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.connector.serial.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.serial.sdk.feature/pom.xml
new file mode 100644 (file)
index 0000000..77ba6a5
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.serial.sdk.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  
+  <properties>
+       <jacoco.skip>true</jacoco.skip>
+  </properties>
+  
+  <build>
+       <pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-packaging-plugin</artifactId>
+                               <version>${tycho-version}</version>
+                               <configuration>
+                                       <timestampProvider>default</timestampProvider>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </pluginManagement>
+  </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/.project
new file mode 100644 (file)
index 0000000..c96f85d
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.ssh.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/build.properties
new file mode 100644 (file)
index 0000000..bd43ebc
--- /dev/null
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+# Michael Scharf (Wind River) - initial API and implementation
+# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/feature.properties
new file mode 100644 (file)
index 0000000..d4fe708
--- /dev/null
@@ -0,0 +1,36 @@
+###############################################################################
+# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+# Martin Oberhuber (Wind River) - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal SSH Connector Extensions
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=An SSH connector implementation for the Terminal.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2000, 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/feature.xml
new file mode 100644 (file)
index 0000000..cc06724
--- /dev/null
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2005, 2014 IBM Corporation and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         IBM Corporation - initial API and implementation
+         Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+ -->
+<feature
+      id="org.eclipse.tm.terminal.connector.ssh.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.tm.terminal.ssh"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.tm.terminal.control" version="4.0.0" match="greaterOrEqual"/>
+      <import plugin="com.jcraft.jsch" version="0.1.31" match="compatible"/>
+      <import plugin="org.eclipse.jsch.core" version="1.0.0" match="compatible"/>
+      <import feature="org.eclipse.tm.terminal.control.feature" version="4.0.0" match="compatible"/>
+      <import plugin="org.eclipse.core.expressions" version="3.4.400" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.core.runtime" version="3.8.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.equinox.security" version="1.1.100" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui" version="3.8.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.connector.ssh"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.feature/pom.xml
new file mode 100644 (file)
index 0000000..8e8c2bb
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.ssh.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  
+  <properties>
+       <jacoco.skip>true</jacoco.skip>
+  </properties>
+  
+  <build>
+       <pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-packaging-plugin</artifactId>
+                               <version>${tycho-version}</version>
+                               <configuration>
+                                       <timestampProvider>default</timestampProvider>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </pluginManagement>
+  </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/.project
new file mode 100644 (file)
index 0000000..3a7e068
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.ssh.sdk.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/build.properties
new file mode 100644 (file)
index 0000000..bd43ebc
--- /dev/null
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+# Michael Scharf (Wind River) - initial API and implementation
+# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/feature.properties
new file mode 100644 (file)
index 0000000..14ee3ef
--- /dev/null
@@ -0,0 +1,36 @@
+###############################################################################
+# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+# Martin Oberhuber (Wind River) - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal SSH Connector Extensions, SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=An SSH connector implementation for the Terminal.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2000, 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/feature.xml
new file mode 100644 (file)
index 0000000..e61bf18
--- /dev/null
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2005 - 2015 IBM Corporation and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         IBM Corporation - initial API and implementation
+         Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+ -->
+<feature
+      id="org.eclipse.tm.terminal.connector.ssh.sdk.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <includes
+         id="org.eclipse.tm.terminal.connector.ssh.feature"
+         version="0.0.0"/>
+
+   <requires>
+      <import feature="org.eclipse.tm.terminal.control.sdk.feature" version="4.0.0" match="compatible"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.connector.ssh.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.ssh.sdk.feature/pom.xml
new file mode 100644 (file)
index 0000000..511716e
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.ssh.sdk.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  
+  <properties>
+       <jacoco.skip>true</jacoco.skip>
+  </properties>
+  
+  <build>
+       <pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-packaging-plugin</artifactId>
+                               <version>${tycho-version}</version>
+                               <configuration>
+                                       <timestampProvider>default</timestampProvider>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </pluginManagement>
+  </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/.project
new file mode 100644 (file)
index 0000000..97df9e7
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.telnet.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/build.properties
new file mode 100644 (file)
index 0000000..400f7fd
--- /dev/null
@@ -0,0 +1,13 @@
+################################################################################
+# Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Michael Scharf (Wind River) - initial API and implementation 
+# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+################################################################################
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/feature.properties
new file mode 100644 (file)
index 0000000..9f4966f
--- /dev/null
@@ -0,0 +1,36 @@
+###############################################################################
+# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+# Martin Oberhuber (Wind River) - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal Telnet Connector Extensions
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=A Telnet connector implementation for the Terminal.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2003, 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/feature.xml
new file mode 100644 (file)
index 0000000..8277a9c
--- /dev/null
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2007 - 2015 Wind River Systems, Inc. and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         Wind River - initial API and implementation
+         Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+ -->
+<feature
+      id="org.eclipse.tm.terminal.connector.telnet.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.tm.terminal.control" version="4.0.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.control.feature" version="4.0.0" match="compatible"/>
+      <import plugin="org.eclipse.core.expressions" version="3.4.400" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.core.runtime" version="3.8.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.equinox.security" version="1.1.100" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui" version="3.8.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.connector.telnet"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.feature/pom.xml
new file mode 100644 (file)
index 0000000..e0a8adc
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.telnet.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  
+  <properties>
+       <jacoco.skip>true</jacoco.skip>
+  </properties>
+  
+  <build>
+       <pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-packaging-plugin</artifactId>
+                               <version>${tycho-version}</version>
+                               <configuration>
+                                       <timestampProvider>default</timestampProvider>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </pluginManagement>
+  </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/.project
new file mode 100644 (file)
index 0000000..7abe524
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.telnet.sdk.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/build.properties
new file mode 100644 (file)
index 0000000..400f7fd
--- /dev/null
@@ -0,0 +1,13 @@
+################################################################################
+# Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Michael Scharf (Wind River) - initial API and implementation 
+# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+################################################################################
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/feature.properties
new file mode 100644 (file)
index 0000000..7d05abe
--- /dev/null
@@ -0,0 +1,36 @@
+###############################################################################
+# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+# Martin Oberhuber (Wind River) - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal Telnet Connector Extensions, SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=A Telnet connector implementation for the Terminal.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2003, 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/feature.xml
new file mode 100644 (file)
index 0000000..3e0846d
--- /dev/null
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2007 - 2015 Wind River Systems, Inc. and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         Wind River - initial API and implementation
+         Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+ -->
+<feature
+      id="org.eclipse.tm.terminal.connector.telnet.sdk.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <includes
+         id="org.eclipse.tm.terminal.connector.telnet.feature"
+         version="0.0.0"/>
+
+   <requires>
+      <import feature="org.eclipse.tm.terminal.control.sdk.feature" version="4.0.0" match="compatible"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.connector.telnet.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.connector.telnet.sdk.feature/pom.xml
new file mode 100644 (file)
index 0000000..f46427e
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.telnet.sdk.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  
+  <properties>
+       <jacoco.skip>true</jacoco.skip>
+  </properties>
+  
+  <build>
+       <pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-packaging-plugin</artifactId>
+                               <version>${tycho-version}</version>
+                               <configuration>
+                                       <timestampProvider>default</timestampProvider>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </pluginManagement>
+  </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/.project
new file mode 100644 (file)
index 0000000..2002b5a
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.control.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/build.properties
new file mode 100644 (file)
index 0000000..f398bf8
--- /dev/null
@@ -0,0 +1,13 @@
+################################################################################
+# Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Michael Scharf (Wind River) - initial API and implementation
+# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+################################################################################
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/feature.properties
new file mode 100644 (file)
index 0000000..65dfabc
--- /dev/null
@@ -0,0 +1,37 @@
+###############################################################################
+# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+# Martin Oberhuber (Wind River) - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal Control
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=An ANSI (vt102) compatible Terminal widget \
+with RCP-only dependencies.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2003, 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/feature.xml
new file mode 100644 (file)
index 0000000..f4abb31
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         Wind River - initial API and implementation
+         Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
+         Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+ -->
+<feature
+      id="org.eclipse.tm.terminal.control.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.tm.terminal.control"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.eclipse.ui"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.control"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.feature/pom.xml
new file mode 100644 (file)
index 0000000..df30036
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.control.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  
+  <properties>
+       <jacoco.skip>true</jacoco.skip>
+  </properties>
+  
+  <build>
+       <pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-packaging-plugin</artifactId>
+                               <version>${tycho-version}</version>
+                               <configuration>
+                                       <timestampProvider>default</timestampProvider>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </pluginManagement>
+  </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/.project
new file mode 100644 (file)
index 0000000..09a6bce
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.control.sdk.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/build.properties
new file mode 100644 (file)
index 0000000..f398bf8
--- /dev/null
@@ -0,0 +1,13 @@
+################################################################################
+# Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Michael Scharf (Wind River) - initial API and implementation
+# Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+################################################################################
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/feature.properties
new file mode 100644 (file)
index 0000000..8a30f84
--- /dev/null
@@ -0,0 +1,37 @@
+###############################################################################
+# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+# Martin Oberhuber (Wind River) - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal Control, SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=An ANSI (vt102) compatible Terminal widget \
+with RCP-only dependencies.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2003, 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/feature.xml
new file mode 100644 (file)
index 0000000..333fd83
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         Wind River - initial API and implementation
+         Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
+         Uwe Stieber (Wind River) - Bug 434937 - Releng: The Terminal Features have an incorrect license 
+ -->
+<feature
+      id="org.eclipse.tm.terminal.control.sdk.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <includes
+         id="org.eclipse.tm.terminal.control.feature"
+         version="0.0.0"/>
+
+   <plugin
+         id="org.eclipse.tm.terminal.control.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.control.sdk.feature/pom.xml
new file mode 100644 (file)
index 0000000..a32adbf
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.control.sdk.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  
+  <properties>
+       <jacoco.skip>true</jacoco.skip>
+  </properties>
+  
+  <build>
+       <pluginManagement>
+               <plugins>
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-packaging-plugin</artifactId>
+                               <version>${tycho-version}</version>
+                               <configuration>
+                                       <timestampProvider>default</timestampProvider>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </pluginManagement>
+  </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/.project
new file mode 100644 (file)
index 0000000..a456794
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>1311579318584</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/build.properties
new file mode 100644 (file)
index 0000000..9fbea98
--- /dev/null
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties,\
+               p2.inf
+src.includes = feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/feature.properties
new file mode 100644 (file)
index 0000000..32b9f17
--- /dev/null
@@ -0,0 +1,38 @@
+##################################################################################
+# Copyright (c) 2015, 2016 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=An integrated Eclipse View for the local command prompt (console) or \
+  remote hosts (SSH, Telnet, Serial). Works on Windows, Linux, Mac and Solaris. \
+  Requires Eclipse 3.8.2 or newer and a Java 6 or newer JRE.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011 - 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/feature.xml
new file mode 100644 (file)
index 0000000..3d55432
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.tm.terminal.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.tm.terminal.view.core"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <requires>
+      <import feature="org.eclipse.tm.terminal.connector.local.feature" version="4.1.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.connector.serial.feature" version="4.1.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.connector.ssh.feature" version="4.1.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.connector.telnet.feature" version="4.2.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.control.feature" version="4.2.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.view.feature" version="4.1.0" match="greaterOrEqual"/>
+   </requires>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/p2.inf b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/p2.inf
new file mode 100644 (file)
index 0000000..a6c5ff1
--- /dev/null
@@ -0,0 +1,5 @@
+update.id=org.eclipse.tcf.te.terminals.feature.feature.group
+update.range=(0,$version$)
+provides.99.namespace=org.eclipse.equinox.p2.iu
+provides.99.name=org.eclipse.tcf.te.terminals.feature.feature.group
+provides.99.version=$version$
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.feature/pom.xml
new file mode 100644 (file)
index 0000000..d28e6d3
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+       xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.eclipse.tm.terminal</groupId>
+               <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+               <version>4.2.0-SNAPSHOT</version>
+               <relativePath>../../admin/pom-build.xml</relativePath>
+       </parent>
+
+       <version>4.2.0-SNAPSHOT</version>
+       <artifactId>org.eclipse.tm.terminal.feature</artifactId>
+       <packaging>eclipse-feature</packaging>
+       
+       <properties>
+               <jacoco.skip>true</jacoco.skip>
+       </properties>
+
+       <build>
+               <pluginManagement>
+                       <plugins>
+                               <plugin>
+                                       <groupId>org.eclipse.tycho</groupId>
+                                       <artifactId>tycho-packaging-plugin</artifactId>
+                                       <version>${tycho-version}</version>
+                                       <configuration>
+                                               <timestampProvider>default</timestampProvider>
+                                       </configuration>
+                               </plugin>
+                       </plugins>
+               </pluginManagement>
+       </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/.project
new file mode 100644 (file)
index 0000000..48e5c33
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.sdk.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ds.core.builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>1311579318584</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/build.properties
new file mode 100644 (file)
index 0000000..7aae4d5
--- /dev/null
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties
+src.includes = feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/feature.properties
new file mode 100644 (file)
index 0000000..ce279cb
--- /dev/null
@@ -0,0 +1,38 @@
+##################################################################################
+# Copyright (c) 2015, 2016 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal, SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=An integrated Eclipse View for the local command prompt (console) or \
+  remote hosts via (SSH, Telnet, Serial). Works on Windows, Linux, Mac and Solaris. \
+  Requires Eclipse 3.8.2 or newer and a Java 6 or newer JRE.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011 - 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/feature.xml
new file mode 100644 (file)
index 0000000..38b20a9
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.tm.terminal.sdk.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <includes
+         id="org.eclipse.tm.terminal.feature"
+         version="0.0.0"/>
+   
+   <requires>
+      <import feature="org.eclipse.tm.terminal.connector.local.sdk.feature" version="4.1.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.connector.serial.sdk.feature" version="4.1.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.connector.ssh.sdk.feature" version="4.1.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.connector.telnet.sdk.feature" version="4.2.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.control.sdk.feature" version="4.2.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.view.sdk.feature" version="4.1.0" match="greaterOrEqual"/>
+   </requires>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/p2.inf b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/p2.inf
new file mode 100644 (file)
index 0000000..d5add3d
--- /dev/null
@@ -0,0 +1,5 @@
+update.id=org.eclipse.tcf.te.terminals.sdk.feature.feature.group
+update.range=(0,$version$)
+provides.99.namespace=org.eclipse.equinox.p2.iu
+provides.99.name=org.eclipse.tcf.te.terminals.sdk.feature.feature.group
+provides.99.version=$version$
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.sdk.feature/pom.xml
new file mode 100644 (file)
index 0000000..dfbdc6d
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+       xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.eclipse.tm.terminal</groupId>
+               <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+               <version>4.2.0-SNAPSHOT</version>
+               <relativePath>../../admin/pom-build.xml</relativePath>
+       </parent>
+
+       <version>4.2.0-SNAPSHOT</version>
+       <artifactId>org.eclipse.tm.terminal.sdk.feature</artifactId>
+       <packaging>eclipse-feature</packaging>
+       
+       <properties>
+               <jacoco.skip>true</jacoco.skip>
+       </properties>
+
+       <build>
+               <pluginManagement>
+                       <plugins>
+                               <plugin>
+                                       <groupId>org.eclipse.tycho</groupId>
+                                       <artifactId>tycho-packaging-plugin</artifactId>
+                                       <version>${tycho-version}</version>
+                                       <configuration>
+                                               <timestampProvider>default</timestampProvider>
+                                       </configuration>
+                               </plugin>
+                       </plugins>
+               </pluginManagement>
+       </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/.project
new file mode 100644 (file)
index 0000000..1320e7a
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.view.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>1311579318584</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/build.properties
new file mode 100644 (file)
index 0000000..9fbea98
--- /dev/null
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties,\
+               p2.inf
+src.includes = feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/feature.properties
new file mode 100644 (file)
index 0000000..079fa8c
--- /dev/null
@@ -0,0 +1,38 @@
+##################################################################################
+# Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Terminal (Console) View
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=An integrated Eclipse View for the local command prompt (console) or \
+  remote hosts (SSH, Telnet, Serial). Works on Windows, Linux, Mac and Solaris. \
+  Requires Eclipse 3.8.2 or newer and a Java 6 or newer JRE.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011 - 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/feature.xml
new file mode 100644 (file)
index 0000000..59bc643
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.tm.terminal.view.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.tm.terminal.view.core"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.core.expressions" version="3.4.400" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.core.runtime" version="3.8.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.tm.terminal.view.core" version="4.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.tm.terminal.control" version="4.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui" version="3.8.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.view.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.tm.terminal.view.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.feature/pom.xml
new file mode 100644 (file)
index 0000000..8118607
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+       xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.eclipse.tm.terminal</groupId>
+               <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+               <version>4.2.0-SNAPSHOT</version>
+               <relativePath>../../admin/pom-build.xml</relativePath>
+       </parent>
+
+       <version>4.2.0-SNAPSHOT</version>
+       <artifactId>org.eclipse.tm.terminal.view.feature</artifactId>
+       <packaging>eclipse-feature</packaging>
+       
+       <properties>
+               <jacoco.skip>true</jacoco.skip>
+       </properties>
+
+       <build>
+               <pluginManagement>
+                       <plugins>
+                               <plugin>
+                                       <groupId>org.eclipse.tycho</groupId>
+                                       <artifactId>tycho-packaging-plugin</artifactId>
+                                       <version>${tycho-version}</version>
+                                       <configuration>
+                                               <timestampProvider>default</timestampProvider>
+                                       </configuration>
+                               </plugin>
+                       </plugins>
+               </pluginManagement>
+       </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/.project
new file mode 100644 (file)
index 0000000..7fae442
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.view.rse.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>1311579318584</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/build.properties
new file mode 100644 (file)
index 0000000..7aae4d5
--- /dev/null
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties
+src.includes = feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/feature.properties
new file mode 100644 (file)
index 0000000..59d902b
--- /dev/null
@@ -0,0 +1,37 @@
+##################################################################################
+# Copyright (c) 2014, 2016 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal View Remote System Explorer add-in
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=Integrates the Terminal view into the Remote System Explorer. \
+  Works on Windows, Linux, Mac and Solaris. Requires Eclipse 3.8.2 or newer and a Java 7 or newer JRE.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2014, 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/feature.xml
new file mode 100644 (file)
index 0000000..a0874fb
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.tm.terminal.view.rse.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      plugin="org.eclipse.tm.terminal.view.core"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.core.expressions" version="3.4.400" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.core.runtime" version="3.8.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.rse.core" version="3.3.100" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.rse.subsystems.files.core" version="3.3.1" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.rse.ui" version="3.3.100" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.tm.terminal.view.core" version="4.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.tm.terminal.control" version="4.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui" version="3.8.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.tm.terminal.view.feature" version="4.1.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.tm.terminal.view.ui" version="4.1.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.view.ui.rse"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.feature/pom.xml
new file mode 100644 (file)
index 0000000..6c637c1
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+       xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.eclipse.tm.terminal</groupId>
+               <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+               <version>4.2.0-SNAPSHOT</version>
+               <relativePath>../../admin/pom-build.xml</relativePath>
+       </parent>
+
+       <version>4.2.0-SNAPSHOT</version>
+       <artifactId>org.eclipse.tm.terminal.view.rse.feature</artifactId>
+       <packaging>eclipse-feature</packaging>
+       
+       <properties>
+               <jacoco.skip>true</jacoco.skip>
+       </properties>
+
+       <build>
+               <pluginManagement>
+                       <plugins>
+                               <plugin>
+                                       <groupId>org.eclipse.tycho</groupId>
+                                       <artifactId>tycho-packaging-plugin</artifactId>
+                                       <version>${tycho-version}</version>
+                                       <configuration>
+                                               <timestampProvider>default</timestampProvider>
+                                       </configuration>
+                               </plugin>
+                       </plugins>
+               </pluginManagement>
+       </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/.project
new file mode 100644 (file)
index 0000000..e47910a
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.view.rse.sdk.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ds.core.builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>1311579318584</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/build.properties
new file mode 100644 (file)
index 0000000..7aae4d5
--- /dev/null
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties
+src.includes = feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/feature.properties
new file mode 100644 (file)
index 0000000..bcedeca
--- /dev/null
@@ -0,0 +1,37 @@
+##################################################################################
+# Copyright (c) 2014, 2016 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=TM Terminal View Remote System Explorer add-in, SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=Integrates the Terminal view into the Remote System Explorer. \
+  Works on Windows, Linux, Mac and Solaris. Requires Eclipse 3.8.2 or newer and a Java 7 or newer JRE.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2014, 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/feature.xml
new file mode 100644 (file)
index 0000000..5383133
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.tm.terminal.view.rse.sdk.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <includes
+         id="org.eclipse.tm.terminal.view.rse.feature"
+         version="0.0.0"/>
+
+   <requires>
+      <import feature="org.eclipse.tm.terminal.view.sdk.feature" version="4.1.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.tm.terminal.view.ui.rse.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.rse.sdk.feature/pom.xml
new file mode 100644 (file)
index 0000000..8d8b48f
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+       xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.eclipse.tm.terminal</groupId>
+               <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+               <version>4.2.0-SNAPSHOT</version>
+               <relativePath>../../admin/pom-build.xml</relativePath>
+       </parent>
+
+       <version>4.2.0-SNAPSHOT</version>
+       <artifactId>org.eclipse.tm.terminal.view.rse.sdk.feature</artifactId>
+       <packaging>eclipse-feature</packaging>
+       
+       <properties>
+               <jacoco.skip>true</jacoco.skip>
+       </properties>
+
+       <build>
+               <pluginManagement>
+                       <plugins>
+                               <plugin>
+                                       <groupId>org.eclipse.tycho</groupId>
+                                       <artifactId>tycho-packaging-plugin</artifactId>
+                                       <version>${tycho-version}</version>
+                                       <configuration>
+                                               <timestampProvider>default</timestampProvider>
+                                       </configuration>
+                               </plugin>
+                       </plugins>
+               </pluginManagement>
+       </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/.project b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/.project
new file mode 100644 (file)
index 0000000..c8ba6fd
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.view.sdk.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.FeatureBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ds.core.builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.FeatureNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>1311579318584</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/build.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/build.properties
new file mode 100644 (file)
index 0000000..7aae4d5
--- /dev/null
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties
+src.includes = feature.properties
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/feature.properties b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/feature.properties
new file mode 100644 (file)
index 0000000..707d7aa
--- /dev/null
@@ -0,0 +1,38 @@
+##################################################################################
+# Copyright (c) 2011 - 2016 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Terminal (Console) View, SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Target Management
+
+# "updateSiteName" property - label for the update site
+updateSiteName=TM Terminal 4.2 Updates
+
+# "description" property - description of the feature
+description=An integrated Eclipse View for the local command prompt (console) or \
+  remote hosts via (SSH, Telnet, Serial). Works on Windows, Linux, Mac and Solaris. \
+  Requires Eclipse 3.8.2 or newer and a Java 6 or newer JRE.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011 - 2016 Wind River Systems, Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html
+
+################ end of copyright property ####################################
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/feature.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/feature.xml
new file mode 100644 (file)
index 0000000..a262f24
--- /dev/null
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.tm.terminal.view.sdk.feature"
+      label="%featureName"
+      version="4.2.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.1.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%updateSiteName" url="http://download.eclipse.org/tm/terminal/updates/4.2"/>
+   </url>
+
+   <includes
+         id="org.eclipse.tm.terminal.view.feature"
+         version="0.0.0"/>
+
+   <plugin
+         id="org.eclipse.tm.terminal.view.core.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.tm.terminal.view.ui.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/pom.xml b/rt-ide/org.eclipse.tm.terminal/features/org.eclipse.tm.terminal.view.sdk.feature/pom.xml
new file mode 100644 (file)
index 0000000..82ecf14
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+       xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.eclipse.tm.terminal</groupId>
+               <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+               <version>4.2.0-SNAPSHOT</version>
+               <relativePath>../../admin/pom-build.xml</relativePath>
+       </parent>
+
+       <version>4.2.0-SNAPSHOT</version>
+       <artifactId>org.eclipse.tm.terminal.view.sdk.feature</artifactId>
+       <packaging>eclipse-feature</packaging>
+       
+       <properties>
+               <jacoco.skip>true</jacoco.skip>
+       </properties>
+
+       <build>
+               <pluginManagement>
+                       <plugins>
+                               <plugin>
+                                       <groupId>org.eclipse.tycho</groupId>
+                                       <artifactId>tycho-packaging-plugin</artifactId>
+                                       <version>${tycho-version}</version>
+                                       <configuration>
+                                               <timestampProvider>default</timestampProvider>
+                                       </configuration>
+                               </plugin>
+                       </plugins>
+               </pluginManagement>
+       </build>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.classpath b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.classpath
new file mode 100644 (file)
index 0000000..ad32c83
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.gitignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.options b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.options
new file mode 100644 (file)
index 0000000..5cbcb67
--- /dev/null
@@ -0,0 +1 @@
+org.eclipse.tm.terminal.connector.local/debugmode = 0
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.project b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.project
new file mode 100644 (file)
index 0000000..696a343
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.local</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>0</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.settings/org.eclipse.jdt.core.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..24dad44
--- /dev/null
@@ -0,0 +1,362 @@
+#Tue Oct 11 11:53:38 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=4
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=4
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.settings/org.eclipse.jdt.ui.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..0d73226
--- /dev/null
@@ -0,0 +1,62 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Target Explorer Java STD
+formatter_settings_version=12
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.settings/org.eclipse.pde.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/.settings/org.eclipse.pde.prefs
new file mode 100644 (file)
index 0000000..cf80c8b
--- /dev/null
@@ -0,0 +1,32 @@
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.encodings=2
+compilers.p.build.java.compiler=2
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/META-INF/MANIFEST.MF b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..83da697
--- /dev/null
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.tm.terminal.connector.local;singleton:=true
+Bundle-Version: 4.2.0.qualifier
+Bundle-Activator: org.eclipse.tm.terminal.connector.local.activator.UIPlugin
+Bundle-Vendor: %providerName
+Import-Package: org.eclipse.cdt.utils.pty;mandatory:=native
+Require-Bundle: org.eclipse.cdt.core;bundle-version="5.6.0";resolution:=optional,
+ org.eclipse.core.expressions;bundle-version="3.4.400",
+ org.eclipse.core.resources;bundle-version="3.8.1";resolution:=optional,
+ org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.core.variables;bundle-version="3.2.600",
+ org.eclipse.debug.ui;bundle-version="3.8.1";resolution:=optional,
+ org.eclipse.tm.terminal.view.core;bundle-version="4.0.0";resolution:=optional,
+ org.eclipse.tm.terminal.view.ui;bundle-version="4.1.0";resolution:=optional,
+ org.eclipse.tm.terminal.connector.process;bundle-version="4.0.0",
+ org.eclipse.tm.terminal.control;bundle-version="4.0.0",
+ org.eclipse.ui;bundle-version="3.8.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Export-Package: org.eclipse.tm.terminal.connector.local.activator;x-internal:=true,
+ org.eclipse.tm.terminal.connector.local.controls,
+ org.eclipse.tm.terminal.connector.local.launcher
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/META-INF/p2.inf b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/META-INF/p2.inf
new file mode 100644 (file)
index 0000000..9bd5194
--- /dev/null
@@ -0,0 +1,82 @@
+###############################################################################
+# Copyright (c) 2014 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+
+# Most of the dependencies exposed here are actually covered in the feature.xml
+# This file ensures that the current bundle has all it needs, even if installed
+# without the enclosing org.eclipse.tcf.te.terminals.feature .
+# See also https://bugs.eclipse.org/bugs/show_bug.cgi?id=435150 .
+
+# 1. Make the optional cdt.core dependency non-greedy: Use (or update to proper
+# version!) when installed, but do not install automatically since the newer
+# org.eclipse.cdt.core.native can satisfy the dependency better. We use this
+# trick since CDT 8.3 had no version on export-package yet but we do want
+# a version constraint.
+requires.0.namespace = org.eclipse.equinox.p2.iu
+requires.0.name = org.eclipse.cdt.core
+#requires.0.range = [5.6, 6.0)
+requires.0.greedy = false
+requires.0.optional = true
+
+#requires.1.namespace = org.eclipse.equinox.p2.iu
+#requires.1.name = org.eclipse.cdt.core.native
+#requires.1.range = [5.6, 6.0)
+#requires.1.greedy = true
+#requires.1.optional = true
+
+# 2. Add the required fragments for local terminal support with proper version.
+requires.2.namespace = org.eclipse.equinox.p2.iu
+requires.2.name = org.eclipse.cdt.core.aix
+#requires.2.range = [5.3, 6.0)
+requires.2.filter = (osgi.os=aix)
+
+requires.3.namespace = org.eclipse.equinox.p2.iu
+requires.3.name = org.eclipse.cdt.core.linux
+#requires.3.range = [5.2, 6.0)
+requires.3.filter = (osgi.os=linux)
+
+requires.4.namespace = org.eclipse.equinox.p2.iu
+requires.4.name = org.eclipse.cdt.core.linux.ppc64
+#requires.4.range = [5.1, 6.0)
+requires.4.filter = (&(osgi.os=linux)(osgi.arch=ppc64))
+
+requires.5.namespace = org.eclipse.equinox.p2.iu
+requires.5.name = org.eclipse.cdt.core.linux.x86
+#requires.5.range = [5.2, 6.0)
+requires.5.filter = (&(osgi.os=linux)(osgi.arch=x86))
+
+requires.6.namespace = org.eclipse.equinox.p2.iu
+requires.6.name = org.eclipse.cdt.core.linux.x86_64
+#requires.6.range = [5.2, 6.0)
+requires.6.filter = (&(osgi.os=linux)(osgi.arch=x86_64))
+
+requires.7.namespace = org.eclipse.equinox.p2.iu
+requires.7.name = org.eclipse.cdt.core.macosx
+#requires.7.range = [5.2, 6.0)
+requires.7.filter = (osgi.os=macosx)
+
+requires.8.namespace = org.eclipse.equinox.p2.iu
+requires.8.name = org.eclipse.cdt.core.solaris
+#requires.8.range = [5.2, 6.0)
+requires.8.filter = (&(osgi.os=solaris)(osgi.arch=sparc))
+
+requires.9.namespace = org.eclipse.equinox.p2.iu
+requires.9.name = org.eclipse.cdt.core.win32
+#requires.9.range = [5.3, 6.0)
+requires.9.filter = (osgi.os=win32)
+
+requires.10.namespace = org.eclipse.equinox.p2.iu
+requires.10.name = org.eclipse.cdt.core.win32.x86
+#requires.10.range = [5.2, 6.0)
+requires.10.filter = (&(osgi.os=win32)(osgi.arch=x86))
+
+requires.11.namespace = org.eclipse.equinox.p2.iu
+requires.11.name = org.eclipse.cdt.core.win32.x86_64
+#requires.11.range = [5.2, 6.0)
+requires.11.filter = (&(osgi.os=win32)(osgi.arch=x86_64))
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/about.html b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/about.html
new file mode 100644 (file)
index 0000000..0f07cf0
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+<p>May 24, 2012</p>    
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/build.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/build.properties
new file mode 100644 (file)
index 0000000..12d179e
--- /dev/null
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               icons/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/icons/eview16/terminal_view.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/icons/eview16/terminal_view.gif
new file mode 100644 (file)
index 0000000..bbb6a9e
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/icons/eview16/terminal_view.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/plugin.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/plugin.properties
new file mode 100644 (file)
index 0000000..5e1bf41
--- /dev/null
@@ -0,0 +1,25 @@
+##################################################################################
+# Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+
+pluginName = Terminal Local Connector
+providerName = Eclipse.org - Target Management
+
+# ----- Commands and Menu contributions -----
+LocalLauncherDelegate.label=Local Terminal
+
+command.launch.name=Open Local Terminal on Selection
+
+menu.showIn.localterminal.label = Terminal
+
+TerminalConnector.local=Local
+
+# ----- Preference Pages -----
+
+preference.page.name=Local Terminal
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/plugin.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/plugin.xml
new file mode 100644 (file)
index 0000000..da4ebe6
--- /dev/null
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+<!-- Terminal connector contributions -->
+<!-- uses process connector -->
+   <extension point="org.eclipse.tm.terminal.control.connectors">
+      <connector
+            class="org.eclipse.tm.terminal.connector.process.ProcessConnector"
+            hidden="true"
+            id="org.eclipse.tm.terminal.connector.local.LocalConnector"
+            name="%TerminalConnector.local"/>
+   </extension>
+   
+<!-- Terminal launcher delegate contributions -->
+   <extension point="org.eclipse.tm.terminal.view.ui.launcherDelegates">
+      <delegate
+            class="org.eclipse.tm.terminal.connector.local.launcher.LocalLauncherDelegate"
+            id="org.eclipse.tm.terminal.connector.local.launcher.local"
+            label="%LocalLauncherDelegate.label">
+      </delegate>
+   </extension>
+
+<!-- Menu contributions -->
+   <extension point="org.eclipse.ui.menus">
+      <!-- Project Explorer "Show In" contribution -->
+      <menuContribution locationURI="popup:org.eclipse.tm.terminal.view.ui.ProjectExplorer.menu.showIn?after=additions">
+         <command
+               commandId="org.eclipse.tm.terminal.connector.local.command.launch"
+               id="org.eclipse.tm.terminal.connector.local.commands.showin.launch"
+               label="%menu.showIn.localterminal.label"
+               style="push">
+            <visibleWhen
+                  checkEnabled="false">
+               <or>
+                     <with variable="selection">
+                        <iterate operator="and" ifEmpty="false">
+                           <adapt type="org.eclipse.core.resources.IResource">
+                             <not>
+                                <!-- The JDT Project Explorer contributions are adding the "Navigate -> Show In" quick menu.
+                                     See o.e.jdt.internal.ui.navigator.JavaNavigatorActionProvider -->
+                                <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature" />
+                             </not> 
+                           </adapt>
+                        </iterate>
+                     </with>
+                  <and>
+                             <with variable="selection">
+                                <iterate operator="and" ifEmpty="false">
+                                   <adapt type="org.eclipse.core.resources.IResource">
+                                        <!-- The JDT Project Explorer contributions are adding the "Navigate -> Show In" quick menu.
+                                             See o.e.jdt.internal.ui.navigator.JavaNavigatorActionProvider -->
+                                        <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature" />
+                                   </adapt>
+                                </iterate>
+                             </with>
+                         <with
+                               variable="org.eclipse.tm.terminal.external.executable.configured">
+                            <equals
+                                  value="TRUE">
+                            </equals>
+                         </with>
+                  </and>
+               </or>
+            </visibleWhen>
+         </command>
+      </menuContribution>
+
+      <!-- JDT Package Explorer "Show In" contribution -->
+      <menuContribution locationURI="popup:org.eclipse.tm.terminal.view.ui.PackageExplorer.menu.showIn?after=additions">
+         <command
+               commandId="org.eclipse.tm.terminal.connector.local.command.launch"
+               id="org.eclipse.tm.terminal.connector.local.commands.showin.launch"
+               label="%menu.showIn.localterminal.label"
+               style="push">
+            <visibleWhen
+                  checkEnabled="false">
+               <or>
+                     <with variable="selection">
+                        <iterate operator="and" ifEmpty="false">
+                           <adapt type="org.eclipse.core.resources.IResource">
+                             <not>
+                                <!-- The JDT Project Explorer contributions are adding the "Navigate -> Show In" quick menu.
+                                     See o.e.jdt.internal.ui.navigator.JavaNavigatorActionProvider -->
+                                <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature" />
+                             </not> 
+                           </adapt>
+                        </iterate>
+                     </with>
+                  <and>
+                             <with variable="selection">
+                                <iterate operator="and" ifEmpty="false">
+                                   <adapt type="org.eclipse.core.resources.IResource">
+                                        <!-- The JDT Project Explorer contributions are adding the "Navigate -> Show In" quick menu.
+                                             See o.e.jdt.internal.ui.navigator.JavaNavigatorActionProvider -->
+                                        <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature" />
+                                   </adapt>
+                                </iterate>
+                             </with>
+                         <with
+                               variable="org.eclipse.tm.terminal.external.executable.configured">
+                            <equals
+                                  value="TRUE">
+                            </equals>
+                         </with>
+                  </and>
+               </or>
+            </visibleWhen>
+         </command>
+      </menuContribution>
+   </extension>
+
+<!-- Command contributions -->
+   <extension point="org.eclipse.ui.commands">
+      <command
+            categoryId="org.eclipse.tm.terminal.view.ui.commands.category"
+            helpContextId="org.eclipse.tm.terminal.connector.local.command_Launch"
+            id="org.eclipse.tm.terminal.connector.local.command.launch"
+            name="%command.launch.name">
+      </command>
+   </extension>
+
+   <extension point="org.eclipse.ui.commandImages">
+      <image
+            commandId="org.eclipse.tm.terminal.connector.local.command.launch"
+            icon="icons/eview16/terminal_view.gif">
+      </image>
+   </extension>
+
+<!-- Key bindings -->
+   <extension point="org.eclipse.ui.bindings">
+      <key
+            commandId="org.eclipse.tm.terminal.connector.local.command.launch"
+            contextId="org.eclipse.ui.contexts.window"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="CTRL+M3+T"/> <!-- Bug 435111: Don't use M1 since COMMAND+Option T already taken on Mac -->
+   </extension>
+
+<!-- Handler contributions -->
+   <extension point="org.eclipse.ui.handlers">
+      <handler
+            class="org.eclipse.tm.terminal.connector.local.launcher.LocalLauncherHandler"
+            commandId="org.eclipse.tm.terminal.connector.local.command.launch">
+      </handler>
+   </extension>
+   
+</plugin>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/pom.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/pom.xml
new file mode 100644 (file)
index 0000000..ed009c4
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.local</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/activator/UIPlugin.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/activator/UIPlugin.java
new file mode 100644 (file)
index 0000000..42a68f1
--- /dev/null
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2012 - 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.local.activator;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.tm.terminal.view.core.preferences.ScopedEclipsePreferences;
+import org.eclipse.tm.terminal.view.core.tracing.TraceHandler;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class UIPlugin extends AbstractUIPlugin {
+       // The shared instance
+       private static UIPlugin plugin;
+       // The scoped preferences instance
+       private static volatile ScopedEclipsePreferences scopedPreferences;
+       // The trace handler instance
+       private static volatile TraceHandler traceHandler;
+
+       /**
+        * The constructor
+        */
+       public UIPlugin() {
+       }
+
+       /**
+        * Returns the shared instance
+        *
+        * @return the shared instance
+        */
+       public static UIPlugin getDefault() {
+               return plugin;
+       }
+
+       /**
+        * Convenience method which returns the unique identifier of this plug-in.
+        */
+       public static String getUniqueIdentifier() {
+               if (getDefault() != null && getDefault().getBundle() != null) {
+                       return getDefault().getBundle().getSymbolicName();
+               }
+               return "org.eclipse.tm.terminal.connector.local"; //$NON-NLS-1$
+       }
+
+       /**
+        * Return the scoped preferences for this plug-in.
+        */
+       public static ScopedEclipsePreferences getScopedPreferences() {
+               if (scopedPreferences == null) {
+                       scopedPreferences = new ScopedEclipsePreferences(getUniqueIdentifier());
+               }
+               return scopedPreferences;
+       }
+
+       /**
+        * Returns the bundles trace handler.
+        *
+        * @return The bundles trace handler.
+        */
+       public static TraceHandler getTraceHandler() {
+               if (traceHandler == null) {
+                       traceHandler = new TraceHandler(getUniqueIdentifier());
+               }
+               return traceHandler;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void start(BundleContext context) throws Exception {
+               super.start(context);
+               plugin = this;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void stop(BundleContext context) throws Exception {
+               plugin = null;
+               scopedPreferences = null;
+               traceHandler = null;
+               super.stop(context);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)
+        */
+       @Override
+       protected void initializeImageRegistry(ImageRegistry registry) {
+               super.initializeImageRegistry(registry);
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>Image</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>Image</code> object instance or <code>null</code>.
+        */
+       public static Image getImage(String key) {
+               return getDefault().getImageRegistry().get(key);
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>ImageDescriptor</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>ImageDescriptor</code> object instance or <code>null</code>.
+        */
+       public static ImageDescriptor getImageDescriptor(String key) {
+               return getDefault().getImageRegistry().getDescriptor(key);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/LocalWizardConfigurationPanel.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/controls/LocalWizardConfigurationPanel.java
new file mode 100644 (file)
index 0000000..fd4da36
--- /dev/null
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.local.controls;
+
+import java.util.Map;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.WorkbenchEncoding;
+import org.osgi.framework.Bundle;
+
+/**
+ * Serial wizard configuration panel implementation.
+ */
+public class LocalWizardConfigurationPanel extends AbstractExtendedConfigurationPanel {
+
+       private Object resource;
+
+       /**
+        * Constructor.
+        *
+        * @param container The configuration panel container or <code>null</code>.
+        */
+    public LocalWizardConfigurationPanel(IConfigurationPanelContainer container) {
+       super(container);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
+     */
+       @Override
+    public void setupPanel(Composite parent) {
+       Composite panel = new Composite(parent, SWT.NONE);
+       panel.setLayout(new GridLayout());
+       panel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+               // Create the encoding selection combo
+               createEncodingUI(panel, false);
+
+               // Set the default encoding:
+               //     Default UTF-8 on Mac or Windows for Local, Preferences:Platform encoding otherwise
+               if (Platform.OS_MACOSX.equals(Platform.getOS()) || Platform.OS_WIN32.equals(Platform.getOS())) {
+                       setEncoding("UTF-8"); //$NON-NLS-1$
+               } else {
+                       String encoding = WorkbenchEncoding.getWorkbenchDefaultEncoding();
+                       if (encoding != null && !"".equals(encoding)) setEncoding(encoding); //$NON-NLS-1$
+               }
+
+               // Fill the rest of the panel with a label to be able to
+               // set a height and width hint for the dialog
+       Label label = new Label(panel, SWT.HORIZONTAL);
+       GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
+               layoutData.widthHint = 300;
+               layoutData.heightHint = 80;
+               label.setLayoutData(layoutData);
+
+               Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
+               if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                       resource = getSelectionResource();
+               }
+
+       setControl(panel);
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setupData(java.util.Map)
+        */
+       @Override
+       public void setupData(Map<String, Object> data) {
+               if (data == null) return;
+
+               String value = (String)data.get(ITerminalsConnectorConstants.PROP_ENCODING);
+               if (value != null) setEncoding(value);
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map)
+        */
+       @Override
+       public void extractData(Map<String, Object> data) {
+       // set the terminal connector id for local terminal
+       data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, "org.eclipse.tm.terminal.connector.local.LocalConnector"); //$NON-NLS-1$
+
+       // Store the encoding
+               data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding());
+
+               Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
+               if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                       // if we have a IResource selection use the location for working directory
+                       if (resource instanceof org.eclipse.core.resources.IResource){
+                               String dir = ((org.eclipse.core.resources.IResource)resource).getProject().getLocation().toString();
+                               data.put(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR, dir);
+                       }
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String)
+        */
+       @Override
+       protected void fillSettingsForHost(String host){
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean)
+        */
+       @Override
+       protected void saveSettingsForHost(boolean add){
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
+        */
+       @Override
+    public boolean isValid(){
+               return true;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
+        */
+       @Override
+    public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
+               // Save the encodings widget values
+               doSaveEncodingsWidgetValues(settings, idPrefix);
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
+        */
+       @Override
+    public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) {
+               // Restore the encodings widget values
+               doRestoreEncodingsWidgetValues(settings, idPrefix);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings()
+        */
+       @Override
+    protected String getHostFromSettings() {
+               return null;
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isWithHostList()
+        */
+       @Override
+    public boolean isWithHostList() {
+       return false;
+    }
+
+       /**
+        * Returns the IResource from the current selection
+        *
+        * @return the IResource, or <code>null</code>.
+        */
+       private org.eclipse.core.resources.IResource getSelectionResource() {
+               ISelectionService selectionService = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
+               ISelection selection = selectionService != null ? selectionService.getSelection() : StructuredSelection.EMPTY;
+
+               if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+                       Object element = ((IStructuredSelection) selection).getFirstElement();
+                       if (element instanceof org.eclipse.core.resources.IResource){
+                               return ((org.eclipse.core.resources.IResource)element);
+                       }
+                       if (element instanceof IAdaptable) {
+                               return (org.eclipse.core.resources.IResource) ((IAdaptable) element).getAdapter(org.eclipse.core.resources.IResource.class);
+                       }
+               }
+               return null;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/launcher/LocalLauncherDelegate.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/launcher/LocalLauncherDelegate.java
new file mode 100644 (file)
index 0000000..b7eba6f
--- /dev/null
@@ -0,0 +1,407 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.local.launcher;
+
+import java.io.File;
+import java.net.InetAddress;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.cdt.utils.pty.PTY;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.URIUtil;
+import org.eclipse.core.variables.IStringVariableManager;
+import org.eclipse.core.variables.VariablesPlugin;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
+import org.eclipse.tm.terminal.connector.local.activator.UIPlugin;
+import org.eclipse.tm.terminal.connector.local.controls.LocalWizardConfigurationPanel;
+import org.eclipse.tm.terminal.connector.process.ProcessSettings;
+import org.eclipse.tm.terminal.view.core.TerminalServiceFactory;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ILineSeparatorConstants;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
+import org.eclipse.tm.terminal.view.ui.interfaces.IPreferenceKeys;
+import org.eclipse.tm.terminal.view.ui.internal.SettingsStore;
+import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.WorkbenchEncoding;
+import org.osgi.framework.Bundle;
+
+/**
+ * Serial launcher delegate implementation.
+ */
+@SuppressWarnings("restriction")
+public class LocalLauncherDelegate extends AbstractLauncherDelegate {
+
+       private final IMementoHandler mementoHandler = new LocalMementoHandler();
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#needsUserConfiguration()
+        */
+       @Override
+       public boolean needsUserConfiguration() {
+               return false;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getPanel(org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer)
+        */
+       @Override
+       public IConfigurationPanel getPanel(IConfigurationPanelContainer container) {
+               return new LocalWizardConfigurationPanel(container);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#execute(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
+        */
+       @Override
+       public void execute(Map<String, Object> properties, ITerminalService.Done done) {
+               Assert.isNotNull(properties);
+
+               // Set the terminal tab title
+               String terminalTitle = getTerminalTitle(properties);
+               if (terminalTitle != null) {
+                       properties.put(ITerminalsConnectorConstants.PROP_TITLE, terminalTitle);
+               }
+
+               // If not configured, set the default encodings for the local terminal
+               if (!properties.containsKey(ITerminalsConnectorConstants.PROP_ENCODING)) {
+                       String encoding = null;
+                       // Set the default encoding:
+                       //     Default UTF-8 on Mac or Windows for Local, Preferences:Platform encoding otherwise
+                       if (Platform.OS_MACOSX.equals(Platform.getOS()) || Platform.OS_WIN32.equals(Platform.getOS())) {
+                               encoding = "UTF-8"; //$NON-NLS-1$
+                       } else {
+                               encoding = WorkbenchEncoding.getWorkbenchDefaultEncoding();
+                       }
+                       if (encoding != null && !"".equals(encoding)) properties.put(ITerminalsConnectorConstants.PROP_ENCODING, encoding); //$NON-NLS-1$
+               }
+
+               // For local terminals, force a new terminal tab each time it is launched,
+               // if not set otherwise from outside
+               if (!properties.containsKey(ITerminalsConnectorConstants.PROP_FORCE_NEW)) {
+                       properties.put(ITerminalsConnectorConstants.PROP_FORCE_NEW, Boolean.TRUE);
+               }
+
+               // Initialize the local terminal working directory.
+               // By default, start the local terminal in the users home directory
+               String initialCwd = org.eclipse.tm.terminal.view.ui.activator.UIPlugin.getScopedPreferences().getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD);
+               String cwd = null;
+               if (initialCwd == null || IPreferenceKeys.PREF_INITIAL_CWD_USER_HOME.equals(initialCwd) || "".equals(initialCwd.trim())) { //$NON-NLS-1$
+                       cwd = System.getProperty("user.home"); //$NON-NLS-1$
+               } else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_HOME.equals(initialCwd)) {
+                       String eclipseHomeLocation = System.getProperty("eclipse.home.location"); //$NON-NLS-1$
+                       if (eclipseHomeLocation != null) {
+                               try {
+                                       URI uri = URIUtil.fromString(eclipseHomeLocation);
+                                       File f = URIUtil.toFile(uri);
+                                       cwd = f.getAbsolutePath();
+                               } catch (URISyntaxException ex) { /* ignored on purpose */ }
+                       }
+               } else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_WS.equals(initialCwd)) {
+                       Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
+                       if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                       if (org.eclipse.core.resources.ResourcesPlugin.getWorkspace() != null
+                                           && org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot() != null
+                                           && org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation() != null) {
+                               cwd = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString();
+                       }
+                       }
+               } else {
+                       try {
+                               // Resolve possible dynamic variables
+                               IStringVariableManager vm = VariablesPlugin.getDefault().getStringVariableManager();
+                               String resolved = vm.performStringSubstitution(initialCwd);
+
+                               IPath p = new Path(resolved);
+                               if (p.toFile().canRead() && p.toFile().isDirectory()) {
+                                       cwd = p.toOSString();
+                               }
+                       } catch (CoreException ex) {
+                               if (Platform.inDebugMode()) {
+                                       UIPlugin.getDefault().getLog().log(ex.getStatus());
+                               }
+                       }
+               }
+
+               if (cwd != null && !"".equals(cwd)) { //$NON-NLS-1$
+                       properties.put(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR, cwd);
+               }
+
+               // If the current selection resolved to an folder, default the working directory
+               // to that folder and update the terminal title
+               ISelectionService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
+               if ((service != null && service.getSelection() != null) || properties.containsKey(ITerminalsConnectorConstants.PROP_SELECTION)) {
+                       ISelection selection = (ISelection)properties.get(ITerminalsConnectorConstants.PROP_SELECTION);
+                       if (selection == null) selection = service.getSelection();
+                       if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+                               String dir = null;
+                               Iterator<?> iter = ((IStructuredSelection)selection).iterator();
+                               while (iter.hasNext()) {
+                                       Object element = iter.next();
+
+                                       Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
+                                       if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                                               // If the element is not an IResource, try to adapt to IResource
+                                               if (!(element instanceof org.eclipse.core.resources.IResource)) {
+                                                       Object adapted = element instanceof IAdaptable ? ((IAdaptable)element).getAdapter(org.eclipse.core.resources.IResource.class) : null;
+                                                       if (adapted == null) adapted = Platform.getAdapterManager().getAdapter(element, org.eclipse.core.resources.IResource.class);
+                                                       if (adapted != null) element = adapted;
+                                               }
+
+                                               if (element instanceof org.eclipse.core.resources.IResource && ((org.eclipse.core.resources.IResource)element).exists()) {
+                                                       IPath location = ((org.eclipse.core.resources.IResource)element).getLocation();
+                                                       if (location == null) continue;
+                                                       if (location.toFile().isFile()) location = location.removeLastSegments(1);
+                                                       if (location.toFile().isDirectory() && location.toFile().canRead()) {
+                                                               dir = location.toFile().getAbsolutePath();
+                                                               break;
+                                                       }
+                                               }
+
+                                               if (element instanceof IPath || element instanceof File) {
+                                                       File f = element instanceof IPath ? ((IPath)element).toFile() : (File)element;
+                                                       if (f.isDirectory() && f.canRead()) {
+                                                               dir = f.getAbsolutePath();
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                               }
+                               if (dir != null) {
+                                       properties.put(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR, dir);
+
+                                       String basename = new Path(dir).lastSegment();
+                                       properties.put(ITerminalsConnectorConstants.PROP_TITLE, basename + " (" + terminalTitle + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+                               }
+                       }
+               }
+
+               // Get the terminal service
+               ITerminalService terminal = TerminalServiceFactory.getService();
+               // If not available, we cannot fulfill this request
+               if (terminal != null) {
+                       terminal.openConsole(properties, done);
+               }
+       }
+
+       /**
+        * Returns the terminal title string.
+        * <p>
+        * The default implementation constructs a title like &quot;Serial &lt;port&gt; (Start time) &quot;.
+        *
+        * @return The terminal title string or <code>null</code>.
+        */
+       private String getTerminalTitle(Map<String, Object> properties) {
+               // Try to see if the user set a title explicitly via the properties map.
+               String title = getDefaultTerminalTitle(properties);
+               if (title != null) return title;
+
+               try {
+                       String hostname = InetAddress.getLocalHost().getHostName();
+                       if (hostname != null && !"".equals(hostname.trim())) { //$NON-NLS-1$
+                               return hostname;
+                       }
+               } catch (UnknownHostException e) { /* ignored on purpose */ }
+
+               return "Local"; //$NON-NLS-1$
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
+        */
+       @Override
+       public Object getAdapter(Class adapter) {
+               if (IMementoHandler.class.equals(adapter)) {
+                       return mementoHandler;
+               }
+           return super.getAdapter(adapter);
+       }
+
+       /**
+        * Returns the default shell to launch. Looks at the environment
+        * variable "SHELL" first before assuming some default default values.
+        *
+        * @return The default shell to launch.
+        */
+       private final File defaultShell() {
+               String shell = null;
+               if (Platform.OS_WIN32.equals(Platform.getOS())) {
+                       if (System.getenv("ComSpec") != null && !"".equals(System.getenv("ComSpec").trim())) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+                               shell = System.getenv("ComSpec").trim(); //$NON-NLS-1$
+                       } else {
+                               shell = "cmd.exe"; //$NON-NLS-1$
+                       }
+               }
+               if (shell == null) {
+                       shell = org.eclipse.tm.terminal.view.ui.activator.UIPlugin.getScopedPreferences().getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX);
+                       if (shell == null || "".equals(shell)) { //$NON-NLS-1$
+                               if (System.getenv("SHELL") != null && !"".equals(System.getenv("SHELL").trim())) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+                                       shell = System.getenv("SHELL").trim(); //$NON-NLS-1$
+                               } else {
+                                       shell = "/bin/sh"; //$NON-NLS-1$
+                               }
+                       }
+               }
+
+               return new File(shell);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map)
+        */
+    @Override
+       public ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
+               Assert.isNotNull(properties);
+
+               // Check for the terminal connector id
+               String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
+               if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.local.LocalConnector"; //$NON-NLS-1$
+
+               // Extract the process properties using defaults
+               String image;
+               if (!properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_PATH)
+                               || properties.get(ITerminalsConnectorConstants.PROP_PROCESS_PATH) == null) {
+                       File defaultShell = defaultShell();
+                       image = defaultShell.isAbsolute() ? defaultShell.getAbsolutePath() : defaultShell.getPath();
+               } else {
+                       image = (String)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_PATH);
+               }
+
+               String arguments = (String)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ARGS);
+               if (arguments == null && !Platform.OS_WIN32.equals(Platform.getOS())) {
+                       arguments = org.eclipse.tm.terminal.view.ui.activator.UIPlugin.getScopedPreferences().getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX_ARGS);
+               }
+
+               // Determine if a PTY will be used
+               boolean isUsingPTY = (properties.get(ITerminalsConnectorConstants.PROP_PROCESS_OBJ) == null && PTY.isSupported(PTY.Mode.TERMINAL))
+                                                               || properties.get(ITerminalsConnectorConstants.PROP_PTY_OBJ) instanceof PTY;
+
+               boolean localEcho = false;
+               if (!properties.containsKey(ITerminalsConnectorConstants.PROP_LOCAL_ECHO)
+                               || !(properties.get(ITerminalsConnectorConstants.PROP_LOCAL_ECHO) instanceof Boolean)) {
+                       // On Windows, turn on local echo by default if no PTY is used (bug 433645)
+                       if (Platform.OS_WIN32.equals(Platform.getOS())) {
+                               localEcho = !isUsingPTY;
+                       }
+               } else {
+                       localEcho = ((Boolean)properties.get(ITerminalsConnectorConstants.PROP_LOCAL_ECHO)).booleanValue();
+               }
+
+               String lineSeparator = null;
+               if (!properties.containsKey(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR)
+                               || !(properties.get(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR) instanceof String)) {
+                       // No line separator will be set if a PTY is used
+                       if (!isUsingPTY) {
+                               lineSeparator = Platform.OS_WIN32.equals(Platform.getOS()) ? ILineSeparatorConstants.LINE_SEPARATOR_CRLF : ILineSeparatorConstants.LINE_SEPARATOR_LF;
+                       }
+               } else {
+                       lineSeparator = (String)properties.get(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR);
+               }
+
+               Process process = (Process)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_OBJ);
+               PTY pty = (PTY)properties.get(ITerminalsConnectorConstants.PROP_PTY_OBJ);
+               ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[])properties.get(ITerminalsConnectorConstants.PROP_STDOUT_LISTENERS);
+               ITerminalServiceOutputStreamMonitorListener[] stderrListeners = (ITerminalServiceOutputStreamMonitorListener[])properties.get(ITerminalsConnectorConstants.PROP_STDERR_LISTENERS);
+               String workingDir = (String)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR);
+
+               String[] envp = null;
+               if (properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) &&
+                                               properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) != null &&
+                                               properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) instanceof String[]){
+                       envp = (String[])properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT);
+               }
+
+               // Set the ECLIPSE_HOME and ECLIPSE_WORKSPACE environment variables
+               List<String> envpList = new ArrayList<String>();
+               if (envp != null) envpList.addAll(Arrays.asList(envp));
+
+               // ECLIPSE_HOME
+               String eclipseHomeLocation = System.getProperty("eclipse.home.location"); //$NON-NLS-1$
+               if (eclipseHomeLocation != null) {
+                       try {
+                               URI uri = URIUtil.fromString(eclipseHomeLocation);
+                               File f = URIUtil.toFile(uri);
+                               envpList.add("ECLIPSE_HOME=" + f.getAbsolutePath()); //$NON-NLS-1$
+                       } catch (URISyntaxException e) { /* ignored on purpose */ }
+               }
+
+               // ECLIPSE_WORKSPACE
+               Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
+               if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+               if (org.eclipse.core.resources.ResourcesPlugin.getWorkspace() != null
+                                   && org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot() != null
+                                   && org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation() != null) {
+                       envpList.add("ECLIPSE_WORKSPACE=" + org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString()); //$NON-NLS-1$
+               }
+               }
+
+        // Convert back into a string array
+        envp = envpList.toArray(new String[envpList.size()]);
+
+               Assert.isTrue(image != null || process != null);
+
+               // Construct the terminal settings store
+               ISettingsStore store = new SettingsStore();
+
+               // Construct the process settings
+               ProcessSettings processSettings = new ProcessSettings();
+               processSettings.setImage(image);
+               processSettings.setArguments(arguments);
+               processSettings.setProcess(process);
+               processSettings.setPTY(pty);
+               processSettings.setLocalEcho(localEcho);
+               processSettings.setLineSeparator(lineSeparator);
+               processSettings.setStdOutListeners(stdoutListeners);
+               processSettings.setStdErrListeners(stderrListeners);
+               processSettings.setWorkingDir(workingDir);
+               processSettings.setEnvironment(envp);
+
+               if (properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_MERGE_ENVIRONMENT)) {
+                       Object value = properties.get(ITerminalsConnectorConstants.PROP_PROCESS_MERGE_ENVIRONMENT);
+                       processSettings.setMergeWithNativeEnvironment(value instanceof Boolean ? ((Boolean)value).booleanValue() : false);
+               }
+
+               // And save the settings to the store
+               processSettings.save(store);
+
+               // Construct the terminal connector instance
+               ITerminalConnector connector = TerminalConnectorExtension.makeTerminalConnector(connectorId);
+               if (connector != null) {
+                       // Apply default settings
+                       connector.setDefaultSettings();
+                       // And load the real settings
+                       connector.load(store);
+               }
+
+               return connector;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/launcher/LocalLauncherHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/launcher/LocalLauncherHandler.java
new file mode 100644 (file)
index 0000000..c37bf6b
--- /dev/null
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.local.launcher;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
+import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPathEditorInput;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Local terminal launcher handler implementation.
+ */
+public class LocalLauncherHandler extends AbstractHandler {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+        */
+       @Override
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               // Get the current selection
+               ISelection selection = HandlerUtil.getCurrentSelection(event);
+
+               // If the selection is not a structured selection, check if there is an active
+               // editor and get the path from the editor input
+               if (!(selection instanceof IStructuredSelection)) {
+                       IEditorInput input = HandlerUtil.getActiveEditorInput(event);
+                       if (input instanceof IPathEditorInput) {
+                               IPath path = ((IPathEditorInput)input).getPath();
+                               if (path != null) {
+                                       if (path.toFile().isFile()) path = path.removeLastSegments(1);
+                                       if (path.toFile().isDirectory() && path.toFile().canRead()) selection = new StructuredSelection(path);
+                               }
+                       }
+               }
+
+               // Get all applicable launcher delegates for the current selection
+               ILauncherDelegate[] delegates = LauncherDelegateManager.getInstance().getApplicableLauncherDelegates(selection);
+               // Find the local terminal launcher delegate
+               ILauncherDelegate delegate = null;
+               for (ILauncherDelegate candidate : delegates) {
+                       if ("org.eclipse.tm.terminal.connector.local.launcher.local".equals(candidate.getId())) { //$NON-NLS-1$
+                               delegate = candidate;
+                               break;
+                       }
+               }
+
+               // Launch the local terminal
+               if (delegate != null) {
+                       Map<String, Object> properties = new HashMap<String, Object>();
+                       properties.put(ITerminalsConnectorConstants.PROP_DELEGATE_ID, delegate.getId());
+                       properties.put(ITerminalsConnectorConstants.PROP_SELECTION, selection);
+
+                       delegate.execute(properties, null);
+               }
+
+               return null;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/launcher/LocalMementoHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.local/src/org/eclipse/tm/terminal/connector/local/launcher/LocalMementoHandler.java
new file mode 100644 (file)
index 0000000..e25fecf
--- /dev/null
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.local.launcher;
+
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
+import org.eclipse.ui.IMemento;
+
+/**
+ * Local terminal connection memento handler implementation.
+ */
+public class LocalMementoHandler implements IMementoHandler {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#saveState(org.eclipse.ui.IMemento, java.util.Map)
+        */
+       @Override
+       public void saveState(IMemento memento, Map<String, Object> properties) {
+               Assert.isNotNull(memento);
+               Assert.isNotNull(properties);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#restoreState(org.eclipse.ui.IMemento, java.util.Map)
+        */
+       @Override
+       public void restoreState(IMemento memento, Map<String, Object> properties) {
+               Assert.isNotNull(memento);
+               Assert.isNotNull(properties);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.classpath b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.classpath
new file mode 100644 (file)
index 0000000..ad32c83
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.gitignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.options b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.options
new file mode 100644 (file)
index 0000000..7e3d5df
--- /dev/null
@@ -0,0 +1 @@
+org.eclipse.tm.terminal.connector.process/debugmode = 0
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.project b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.project
new file mode 100644 (file)
index 0000000..92d9bc9
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.process</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>1329502082911</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.settings/org.eclipse.jdt.core.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..24dad44
--- /dev/null
@@ -0,0 +1,362 @@
+#Tue Oct 11 11:53:38 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=4
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=4
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.settings/org.eclipse.jdt.ui.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..0d73226
--- /dev/null
@@ -0,0 +1,62 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Target Explorer Java STD
+formatter_settings_version=12
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.settings/org.eclipse.pde.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/.settings/org.eclipse.pde.prefs
new file mode 100644 (file)
index 0000000..cf80c8b
--- /dev/null
@@ -0,0 +1,32 @@
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.encodings=2
+compilers.p.build.java.compiler=2
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/META-INF/MANIFEST.MF b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..f8a6c0d
--- /dev/null
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.tm.terminal.connector.process;singleton:=true
+Bundle-Version: 4.2.0.qualifier
+Bundle-Activator: org.eclipse.tm.terminal.connector.process.activator.UIPlugin
+Bundle-Vendor: %providerName
+Import-Package: org.eclipse.cdt.utils.pty;mandatory:=native,
+ org.eclipse.cdt.utils.spawner;mandatory:=native
+Require-Bundle: org.eclipse.cdt.core;bundle-version="5.6.0";resolution:=optional,
+ org.eclipse.core.expressions;bundle-version="3.4.400",
+ org.eclipse.core.resources;bundle-version="3.8.1";resolution:=optional,
+ org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.tm.terminal.view.core;bundle-version="4.0.0";resolution:=optional,
+ org.eclipse.tm.terminal.view.ui;bundle-version="4.1.0";resolution:=optional,
+ org.eclipse.tm.terminal.control;bundle-version="4.0.0",
+ org.eclipse.ui;bundle-version="3.8.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Export-Package: org.eclipse.tm.terminal.connector.process,
+ org.eclipse.tm.terminal.connector.process.activator;x-internal:=true,
+ org.eclipse.tm.terminal.connector.process.help,
+ org.eclipse.tm.terminal.connector.process.nls;x-internal:=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/META-INF/p2.inf b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/META-INF/p2.inf
new file mode 100644 (file)
index 0000000..a3282a7
--- /dev/null
@@ -0,0 +1,82 @@
+###############################################################################
+# Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+
+# Most of the dependencies exposed here are actually covered in the feature.xml
+# This file ensures that the current bundle has all it needs, even if installed
+# without the enclosing org.eclipse.tm.terminal.view.feature .
+# See also https://bugs.eclipse.org/bugs/show_bug.cgi?id=435150 .
+
+# 1. Make the optional cdt.core dependency non-greedy: Use (or update to proper
+# version!) when installed, but do not install automatically since the newer
+# org.eclipse.cdt.core.native can satisfy the dependency better. We use this
+# trick since CDT 8.3 had no version on export-package yet but we do want
+# a version constraint.
+requires.0.namespace = org.eclipse.equinox.p2.iu
+requires.0.name = org.eclipse.cdt.core
+#requires.0.range = [5.6, 6.0)
+requires.0.greedy = false
+requires.0.optional = true
+
+#requires.1.namespace = org.eclipse.equinox.p2.iu
+#requires.1.name = org.eclipse.cdt.core.native
+#requires.1.range = [5.6, 6.0)
+#requires.1.greedy = true
+#requires.1.optional = true
+
+# 2. Add the required fragments for local terminal support with proper version.
+requires.2.namespace = org.eclipse.equinox.p2.iu
+requires.2.name = org.eclipse.cdt.core.aix
+#requires.2.range = [5.3, 6.0)
+requires.2.filter = (osgi.os=aix)
+
+requires.3.namespace = org.eclipse.equinox.p2.iu
+requires.3.name = org.eclipse.cdt.core.linux
+#requires.3.range = [5.2, 6.0)
+requires.3.filter = (osgi.os=linux)
+
+requires.4.namespace = org.eclipse.equinox.p2.iu
+requires.4.name = org.eclipse.cdt.core.linux.ppc64
+#requires.4.range = [5.1, 6.0)
+requires.4.filter = (&(osgi.os=linux)(osgi.arch=ppc64))
+
+requires.5.namespace = org.eclipse.equinox.p2.iu
+requires.5.name = org.eclipse.cdt.core.linux.x86
+#requires.5.range = [5.2, 6.0)
+requires.5.filter = (&(osgi.os=linux)(osgi.arch=x86))
+
+requires.6.namespace = org.eclipse.equinox.p2.iu
+requires.6.name = org.eclipse.cdt.core.linux.x86_64
+#requires.6.range = [5.2, 6.0)
+requires.6.filter = (&(osgi.os=linux)(osgi.arch=x86_64))
+
+requires.7.namespace = org.eclipse.equinox.p2.iu
+requires.7.name = org.eclipse.cdt.core.macosx
+#requires.7.range = [5.2, 6.0)
+requires.7.filter = (osgi.os=macosx)
+
+requires.8.namespace = org.eclipse.equinox.p2.iu
+requires.8.name = org.eclipse.cdt.core.solaris
+#requires.8.range = [5.2, 6.0)
+requires.8.filter = (&(osgi.os=solaris)(osgi.arch=sparc))
+
+requires.9.namespace = org.eclipse.equinox.p2.iu
+requires.9.name = org.eclipse.cdt.core.win32
+#requires.9.range = [5.3, 6.0)
+requires.9.filter = (osgi.os=win32)
+
+requires.10.namespace = org.eclipse.equinox.p2.iu
+requires.10.name = org.eclipse.cdt.core.win32.x86
+#requires.10.range = [5.2, 6.0)
+requires.10.filter = (&(osgi.os=win32)(osgi.arch=x86))
+
+requires.11.namespace = org.eclipse.equinox.p2.iu
+requires.11.name = org.eclipse.cdt.core.win32.x86_64
+#requires.11.range = [5.2, 6.0)
+requires.11.filter = (&(osgi.os=win32)(osgi.arch=x86_64))
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/about.html b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/about.html
new file mode 100644 (file)
index 0000000..0f07cf0
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+<p>May 24, 2012</p>    
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/build.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/build.properties
new file mode 100644 (file)
index 0000000..f18cbc5
--- /dev/null
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/plugin.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/plugin.properties
new file mode 100644 (file)
index 0000000..1dfc915
--- /dev/null
@@ -0,0 +1,22 @@
+##################################################################################
+# Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+
+pluginName = Terminal Process Connector
+providerName = Eclipse.org - Target Management
+
+# ----- Terminal Connectors -----
+
+TerminalConnector.process=Process Connector (hidden)
+
+# ----- Terminal Launcher Delegates -----
+
+ProcessLauncherDelegate.label=Streams Terminal
+
+# ----- Commands and Menu contributions -----
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/plugin.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/plugin.xml
new file mode 100644 (file)
index 0000000..4af7a6a
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+<!-- Terminal connector contributions -->
+   <extension point="org.eclipse.tm.terminal.control.connectors">
+      <connector
+            class="org.eclipse.tm.terminal.connector.process.ProcessConnector"
+            hidden="true"
+            id="org.eclipse.tm.terminal.connector.process.ProcessConnector"
+            name="%TerminalConnector.process"/>
+   </extension>
+
+<!-- Terminal launcher delegate contributions -->
+   <extension point="org.eclipse.tm.terminal.view.ui.launcherDelegates">
+      <delegate
+            class="org.eclipse.tm.terminal.connector.process.ProcessLauncherDelegate"
+            hidden="true"
+            id="org.eclipse.tm.terminal.connector.process.launcher.process"
+            label="%ProcessLauncherDelegate.label">
+      </delegate>
+   </extension>
+
+</plugin>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/pom.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/pom.xml
new file mode 100644 (file)
index 0000000..7d11150
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.process</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessConnector.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessConnector.java
new file mode 100644 (file)
index 0000000..d4d8a7e
--- /dev/null
@@ -0,0 +1,316 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Kaloyan Raev - Bug 485658 - NPE prevents displaying the actual error
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.process;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StreamTokenizer;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.cdt.utils.pty.PTY;
+import org.eclipse.cdt.utils.spawner.ProcessFactory;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.tm.internal.terminal.emulator.VT100Emulator;
+import org.eclipse.tm.internal.terminal.emulator.VT100TerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.NullSettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.connector.process.nls.Messages;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ILineSeparatorConstants;
+import org.eclipse.tm.terminal.view.core.utils.Env;
+import org.eclipse.tm.terminal.view.ui.manager.ConsoleManager;
+import org.eclipse.tm.terminal.view.ui.streams.AbstractStreamsConnector;
+
+/**
+ * Process connector implementation.
+ */
+@SuppressWarnings("restriction")
+public class ProcessConnector extends AbstractStreamsConnector {
+       // Reference to the process settings
+       private final ProcessSettings settings;
+
+       // Reference to the PTY instance.
+       private PTY pty;
+       // Reference to the launched process instance.
+       private Process process;
+       // Reference to the process monitor
+       private ProcessMonitor monitor;
+
+       // The terminal width and height. Initially unknown.
+       private int width = -1;
+       private int height = -1;
+
+       /**
+        * Constructor.
+        */
+       public ProcessConnector() {
+               this(new ProcessSettings());
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param settings The process settings. Must not be <code>null</code>
+        */
+       public ProcessConnector(ProcessSettings settings) {
+               super();
+
+               Assert.isNotNull(settings);
+               this.settings = settings;
+       }
+
+       /**
+        * Returns the process object or <code>null</code> if the
+        * connector is connector.
+        *
+        * @return The process object or <code>null</code>.
+        */
+       public Process getProcess() {
+               return process;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#connect(org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl)
+        */
+       @Override
+       public void connect(ITerminalControl control) {
+               Assert.isNotNull(control);
+               super.connect(control);
+
+               pty = null;
+               width = -1;
+               height = -1;
+
+               try {
+                       boolean isAnsiTerminal = false;
+
+                       // Try to determine process and PTY instance from the process settings
+                       process = settings.getProcess();
+                       pty = settings.getPTY();
+
+                       // No process -> create PTY on supported platforms and execute
+                       // process image.
+                       if (process == null) {
+                               if (PTY.isSupported(PTY.Mode.TERMINAL)) {
+                                       try {
+                                               pty = new PTY(PTY.Mode.TERMINAL);
+
+                                               // Initialize the terminal size
+                                               VT100Emulator text = ((VT100TerminalControl)control).getTerminalText();
+                                               text.fontChanged();
+                                       } catch (IOException e) {
+                                               // PTY not supported
+                                       }
+                               }
+
+                               // Build up the command
+                               StringBuilder command = new StringBuilder(settings.getImage());
+                               String arguments = settings.getArguments();
+                               if (arguments != null && !"".equals(arguments.trim())) { //$NON-NLS-1$
+                                       // Append to the command now
+                                       command.append(" "); //$NON-NLS-1$
+                                       command.append(arguments.trim());
+                               }
+
+                               File workingDir =null;
+                               if (settings.getWorkingDir()!=null){
+                                       workingDir = new File(settings.getWorkingDir());
+                               }
+
+                               String[] envp = null;
+                               if (settings.getEnvironment()!=null){
+                                       envp = settings.getEnvironment();
+                               }
+
+                               if (settings.isMergeWithNativeEnvironment()) {
+                                       envp = Env.getEnvironment(envp, true);
+                               }
+
+                               isAnsiTerminal = getTermVariable(envp).startsWith("ansi"); //$NON-NLS-1$
+
+                               if (pty != null) {
+                                       // A PTY is available -> can use the ProcessFactory.
+
+                                       // Tokenize the command (ProcessFactory takes an array)
+                                       StreamTokenizer st = new StreamTokenizer(new StringReader(command.toString()));
+                                       st.resetSyntax();
+                                       st.whitespaceChars(0, 32);
+                                       st.whitespaceChars(0xa0, 0xa0);
+                                       st.wordChars(33, 255);
+                                       st.quoteChar('"');
+                                       st.quoteChar('\'');
+
+                                       List<String> argv = new ArrayList<String>();
+                                       int ttype = st.nextToken();
+                                       while (ttype != StreamTokenizer.TT_EOF) {
+                                               argv.add(st.sval);
+                                               ttype = st.nextToken();
+                                       }
+
+                                       // Execute the process
+                                       process = ProcessFactory.getFactory().exec(argv.toArray(new String[argv.size()]), envp, workingDir, pty);
+                               } else {
+                                       // No PTY -> just execute via the standard Java Runtime implementation.
+                                       process = Runtime.getRuntime().exec(command.toString(), envp, workingDir);
+                               }
+                       }
+
+                       String lineSeparator = settings.getLineSeparator();
+                       if (lineSeparator == null && pty == null) {
+                               lineSeparator = System.getProperty("line.separator"); //$NON-NLS-1$
+                               if ("\r".equals(lineSeparator)) { //$NON-NLS-1$
+                                       lineSeparator = ILineSeparatorConstants.LINE_SEPARATOR_CR;
+                               }
+                               else if ("\n".equals(lineSeparator)) { //$NON-NLS-1$
+                                       lineSeparator = ILineSeparatorConstants.LINE_SEPARATOR_LF;
+                               }
+                               else {
+                                       lineSeparator = ILineSeparatorConstants.LINE_SEPARATOR_CRLF;
+                               }
+                       }
+
+                       // Setup the listeners
+                       setStdoutListeners(settings.getStdOutListeners());
+                       setStderrListeners(settings.getStdErrListeners());
+
+                       // Enable VT100 line wrapping if we are connected via pty
+                       // And TERM is VT100 compatible
+                       if (pty != null && !isAnsiTerminal)
+                               control.setVT100LineWrapping(true);
+
+                       // connect the streams
+                       connectStreams(control, process.getOutputStream(), process.getInputStream(), (pty == null ? process.getErrorStream() : null), settings.isLocalEcho(), lineSeparator);
+
+                       // Set the terminal control state to CONNECTED
+                       control.setState(TerminalState.CONNECTED);
+
+                       // Create the process monitor
+                       monitor = new ProcessMonitor(this);
+                       monitor.startMonitoring();
+               } catch (IOException e) {
+                       // Disconnect right away
+                       disconnect();
+                       // Lookup the tab item
+                       CTabItem item = ConsoleManager.getInstance().findConsole(control);
+                       if (item != null) item.dispose();
+                       // Get the error message from the exception
+                       String msg = e.getLocalizedMessage() != null ? e.getLocalizedMessage() : ""; //$NON-NLS-1$
+                       Assert.isNotNull(msg);
+                       // Strip away "Exec_tty error:"
+                       msg = msg.replace("Exec_tty error:", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$
+                       // Repackage into a more user friendly error
+                       msg = NLS.bind(Messages.ProcessConnector_error_creatingProcess, settings.getImage(), msg);
+                       // Open an error dialog
+                       MessageDialog.openError(control.getShell(), Messages.ProcessConnector_error_title, msg);
+               }
+       }
+
+       private static String getTermVariable(String[] envp) {
+               if (envp != null && !Platform.OS_WIN32.equals(Platform.getOS()))
+                       for (String var : envp)
+                       if (var.startsWith("TERM=")) //$NON-NLS-1$
+                               return var.substring(5);
+           return "xterm"; //$NON-NLS-1$
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#isLocalEcho()
+        */
+       @Override
+       public boolean isLocalEcho() {
+               return settings.isLocalEcho();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.streams.AbstractStreamsConnector#doDisconnect()
+        */
+       @Override
+       public void doDisconnect() {
+               // Stop monitoring the process
+               if (monitor != null) {
+                       monitor.dispose();
+               }
+
+               boolean isWindows = Platform.OS_WIN32.equals(Platform.getOS());
+
+               if (!isWindows) {
+                       // Destroy the process first, except on windows (Bug 465674)
+                       if (process != null) { process.destroy(); process = null; }
+               }
+
+               // Dispose the streams
+               super.doDisconnect();
+
+               if (isWindows) {
+                       // On Windows destroy the process after closing streams
+                       if (process != null) { process.destroy(); process = null; }
+               }
+
+               // Set the terminal control state to CLOSED.
+               fControl.setState(TerminalState.CLOSED);
+       }
+
+       // ***** Process Connector settings handling *****
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#setDefaultSettings()
+        */
+       @Override
+       public void setDefaultSettings() {
+           settings.load(new NullSettingsStore());
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#getSettingsSummary()
+        */
+       @Override
+       public String getSettingsSummary() {
+               return settings.getImage() != null ? settings.getImage() : ""; //$NON-NLS-1$
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#load(org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore)
+        */
+       @Override
+       public void load(ISettingsStore store) {
+               settings.load(store);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#save(org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore)
+        */
+       @Override
+       public void save(ISettingsStore store) {
+               settings.save(store);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#setTerminalSize(int, int)
+        */
+       @Override
+       public void setTerminalSize(int newWidth, int newHeight) {
+               if (width != newWidth || height != newHeight) {
+                       width = newWidth;
+                       height = newHeight;
+                       if (pty != null) {
+                               pty.setTerminalSize(newWidth, newHeight);
+                       }
+               }
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessLauncherDelegate.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessLauncherDelegate.java
new file mode 100644 (file)
index 0000000..94da69d
--- /dev/null
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.process;
+
+import java.util.Map;
+
+import org.eclipse.cdt.utils.pty.PTY;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
+import org.eclipse.tm.terminal.view.core.TerminalServiceFactory;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.internal.SettingsStore;
+import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate;
+
+/**
+ * Process launcher delegate implementation.
+ */
+@SuppressWarnings("restriction")
+public class ProcessLauncherDelegate extends AbstractLauncherDelegate {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#needsUserConfiguration()
+        */
+       @Override
+       public boolean needsUserConfiguration() {
+               return false;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getPanel(org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer)
+        */
+       @Override
+       public IConfigurationPanel getPanel(IConfigurationPanelContainer container) {
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#execute(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
+        */
+       @Override
+       public void execute(Map<String, Object> properties, ITerminalService.Done done) {
+               Assert.isNotNull(properties);
+
+               // Get the terminal service
+               ITerminalService terminal = TerminalServiceFactory.getService();
+               // If not available, we cannot fulfill this request
+               if (terminal != null) {
+                       terminal.openConsole(properties, done);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map)
+        */
+       @Override
+       public ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
+               Assert.isNotNull(properties);
+
+               // Check for the terminal connector id
+               String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
+               if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.process.ProcessConnector"; //$NON-NLS-1$
+
+               // Extract the process properties
+               String image = (String)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_PATH);
+               String arguments = (String)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ARGS);
+               Process process = (Process)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_OBJ);
+               PTY pty = (PTY)properties.get(ITerminalsConnectorConstants.PROP_PTY_OBJ);
+               Object value = properties.get(ITerminalsConnectorConstants.PROP_LOCAL_ECHO);
+               boolean localEcho = value instanceof Boolean ? ((Boolean)value).booleanValue() : false;
+               String lineSeparator = (String)properties.get(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR);
+               ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[])properties.get(ITerminalsConnectorConstants.PROP_STDOUT_LISTENERS);
+               ITerminalServiceOutputStreamMonitorListener[] stderrListeners = (ITerminalServiceOutputStreamMonitorListener[])properties.get(ITerminalsConnectorConstants.PROP_STDERR_LISTENERS);
+               String workingDir = (String)properties.get(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR);
+
+               String[] envp = null;
+               if (properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) &&
+                                               properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) != null &&
+                                               properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT) instanceof String[]){
+                       envp = (String[])properties.get(ITerminalsConnectorConstants.PROP_PROCESS_ENVIRONMENT);
+               }
+
+               Assert.isTrue(image != null || process != null);
+
+               // Construct the terminal settings store
+               ISettingsStore store = new SettingsStore();
+
+               // Construct the process settings
+               ProcessSettings processSettings = new ProcessSettings();
+               processSettings.setImage(image);
+               processSettings.setArguments(arguments);
+               processSettings.setProcess(process);
+               processSettings.setPTY(pty);
+               processSettings.setLocalEcho(localEcho);
+               processSettings.setLineSeparator(lineSeparator);
+               processSettings.setStdOutListeners(stdoutListeners);
+               processSettings.setStdErrListeners(stderrListeners);
+               processSettings.setWorkingDir(workingDir);
+               processSettings.setEnvironment(envp);
+
+               if (properties.containsKey(ITerminalsConnectorConstants.PROP_PROCESS_MERGE_ENVIRONMENT)) {
+                       value = properties.get(ITerminalsConnectorConstants.PROP_PROCESS_MERGE_ENVIRONMENT);
+                       processSettings.setMergeWithNativeEnvironment(value instanceof Boolean ? ((Boolean)value).booleanValue() : false);
+               }
+
+               // And save the settings to the store
+               processSettings.save(store);
+
+               // Construct the terminal connector instance
+               ITerminalConnector connector = TerminalConnectorExtension.makeTerminalConnector(connectorId);
+               if (connector != null) {
+                       // Apply default settings
+                       connector.setDefaultSettings();
+                       // And load the real settings
+                       connector.load(store);
+               }
+
+               return connector;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessMonitor.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessMonitor.java
new file mode 100644 (file)
index 0000000..5c4ed3f
--- /dev/null
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.process;
+
+import org.eclipse.core.runtime.Assert;
+
+
+/**
+ * Process monitor implementation.
+ */
+public class ProcessMonitor {
+       // Reference to the parent process connector
+       private final ProcessConnector processConnector;
+       // Reference to the monitored process
+       private final Process process;
+       // Reference to the monitor thread
+       private Thread thread;
+       // Flag to mark the monitor disposed
+       private boolean disposed;
+
+
+    /**
+     * Constructor.
+     *
+     * @param processConnector The parent process connector. Must not be <code>null</code>.
+     */
+    public ProcessMonitor(ProcessConnector processConnector) {
+        super();
+
+        Assert.isNotNull(processConnector);
+               this.processConnector = processConnector;
+
+               // Query the monitored process for easier access
+               this.process = processConnector.getProcess();
+    }
+
+    /**
+     * Dispose the process monitor.
+     */
+       public void dispose() {
+       // Set the disposed status
+       disposed = true;
+       // Not initialized -> return immediately
+       if (thread == null) return;
+
+       // Copy the reference
+       final Thread oldThread = thread;
+       // Unlink the monitor from the thread
+       thread = null;
+       // And interrupt the writer thread
+       oldThread.interrupt();
+    }
+
+    /**
+     * Starts the terminal output stream monitor.
+     */
+    public void startMonitoring() {
+       // If already initialized -> return immediately
+       if (thread != null) return;
+
+       // Create a new runnable which is constantly reading from the stream
+       Runnable runnable = new Runnable() {
+               @Override
+                       public void run() {
+                       monitorProcess();
+               }
+       };
+
+       // Create the monitor thread
+       thread = new Thread(runnable, "Terminal Process Monitor Thread"); //$NON-NLS-1$
+
+       // Configure the monitor thread
+        thread.setDaemon(true);
+
+        // Start the processing
+        thread.start();
+    }
+
+    /**
+     * Monitors the associated system process, waiting for it to terminate,
+     * and notifies the associated process monitor's.
+     */
+       public void monitorProcess() {
+       // If already disposed -> return immediately
+       if (disposed) return;
+
+       try {
+               // Wait for the monitored process to terminate
+               process.waitFor();
+       } catch (InterruptedException ie) {
+               // clear interrupted state
+               Thread.interrupted();
+       } finally {
+               // Dispose the parent process connector
+               if (!disposed)
+                       processConnector.disconnect();
+       }
+    }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessSettings.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessSettings.java
new file mode 100644 (file)
index 0000000..6fe4a6a
--- /dev/null
@@ -0,0 +1,299 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.process;
+
+import org.eclipse.cdt.utils.pty.PTY;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
+import org.eclipse.tm.terminal.view.ui.internal.SettingsStore;
+
+/**
+ * Process connector settings implementation.
+ */
+@SuppressWarnings("restriction")
+public class ProcessSettings {
+       // Reference to the process image
+       private String image;
+       // Reference to the process arguments (space separated string)
+       private String arguments;
+       // Reference to the process object
+       private Process process;
+       // Reference to the pseudo terminal object
+       private PTY pty;
+       // Flag to control the local echo (defaults to true if
+       // the PTY is not supported on the current host platform)
+       private boolean localEcho = !PTY.isSupported();
+       // The line separator setting
+       private String lineSeparator = null;
+       // The list of stdout output listeners
+       private ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = null;
+       // The list of stderr output listeners
+       private ITerminalServiceOutputStreamMonitorListener[] stderrListeners = null;
+       // working directory for process
+       private String workingDir;
+       // environment
+       private String[] environment;
+       // Flag to control if the provided environment is
+       // automatically merged with the native process environment.
+       // Defaults to "true".
+       private boolean mergeWithNativeEnvironment = true;
+
+       /**
+        * Sets the process image.
+        *
+        * @param image The process image or <code>null</code>.
+        */
+       public void setImage(String image) {
+               this.image = image;
+       }
+
+       /**
+        * Returns the process image.
+        *
+        * @return The process image or <code>null</code>.
+        */
+       public String getImage() {
+               return image;
+       }
+
+       /**
+        * Sets the process arguments.
+        * <p>
+        * The arguments are space separated. The caller is responsible for
+        * correct quoting.
+        *
+        * @param arguments The process arguments or <code>null</code>.
+        */
+       public void setArguments(String arguments) {
+               this.arguments = arguments;
+       }
+
+       /**
+        * Returns the process arguments.
+        *
+        * @return The process arguments as space separated list or <code>null</code>.
+        */
+       public String getArguments() {
+               return arguments;
+       }
+
+       /**
+        * Sets the process object.
+        *
+        * @param image The process object or <code>null</code>.
+        */
+       public void setProcess(Process process) {
+               this.process = process;
+       }
+
+       /**
+        * Returns the process object.
+        *
+        * @return The process object or <code>null</code>.
+        */
+       public Process getProcess() {
+               return process;
+       }
+
+       /**
+        * Sets the pseudo terminal object.
+        *
+        * @param pty The pseudo terminal or <code>null</code>.
+        */
+       public void setPTY(PTY pty) {
+               this.pty = pty;
+               // If the PTY is set to "null", the local echo will be set to "true"
+               if (pty == null) setLocalEcho(true);
+       }
+
+       /**
+        * Returns the pseudo terminal object.
+        *
+        * @return The pseudo terminal or <code>null</code>.
+        */
+       public PTY getPTY() {
+               return pty;
+       }
+
+       /**
+        * Sets if the process requires a local echo from the
+        * terminal widget.
+        *
+        * @param value Specify <code>true</code> to enable the local echo, <code>false</code> otherwise.
+        */
+       public void setLocalEcho(boolean value) {
+               this.localEcho = value;
+       }
+
+       /**
+        * Returns <code>true</code> if the process requires a local echo
+        * from the terminal widget.
+        *
+        * @return <code>True</code> if local echo is enabled, <code>false</code> otherwise.
+        */
+       public boolean isLocalEcho() {
+               return localEcho;
+       }
+
+       /**
+        * Sets the process line separator.
+        *
+        * @param separator The process line separator <code>null</code>.
+        */
+       public void setLineSeparator(String separator) {
+               this.lineSeparator = separator;
+       }
+
+       /**
+        * Returns the process line separator.
+        *
+        * @return The process line separator or <code>null</code>.
+        */
+       public String getLineSeparator() {
+               return lineSeparator;
+       }
+
+       /**
+        * Sets the list of stdout listeners.
+        *
+        * @param listeners The list of stdout listeners or <code>null</code>.
+        */
+       public void setStdOutListeners(ITerminalServiceOutputStreamMonitorListener[] listeners) {
+               this.stdoutListeners = listeners;
+       }
+
+       /**
+        * Returns the list of stdout listeners.
+        *
+        * @return The list of stdout listeners or <code>null</code>.
+        */
+       public ITerminalServiceOutputStreamMonitorListener[] getStdOutListeners() {
+               return stdoutListeners;
+       }
+
+       /**
+        * Sets the list of stderr listeners.
+        *
+        * @param listeners The list of stderr listeners or <code>null</code>.
+        */
+       public void setStdErrListeners(ITerminalServiceOutputStreamMonitorListener[] listeners) {
+               this.stderrListeners = listeners;
+       }
+
+       /**
+        * Returns the list of stderr listeners.
+        *
+        * @return The list of stderr listeners or <code>null</code>.
+        */
+       public ITerminalServiceOutputStreamMonitorListener[] getStdErrListeners() {
+               return stderrListeners;
+       }
+
+       /**
+        * Returns the working directory
+        *
+        * @return
+        */
+       public String getWorkingDir() {
+               return this.workingDir;
+       }
+
+       /**
+        * Sets the working directory of the process
+        *
+        * @param workingDir the absolute path of the working directory
+        */
+       public void setWorkingDir(String workingDir) {
+               this.workingDir = workingDir;
+       }
+
+       /**
+        * Get the process environment
+        *
+        * @return
+        */
+       public String[] getEnvironment() {
+               return environment;
+       }
+
+       /**
+        * Sets the process environment
+        *
+        * @param environment - will be added to the "parent" environment of the process
+        */
+       public void setEnvironment(String[] environment) {
+               this.environment = environment;
+       }
+
+       /**
+        * Returns if or if not the provided environment is merged with
+        * the native process environment.
+        *
+        * @return <code>True</code> if the provided environment is merged with the native process environment, <code>false</code> otherwise.
+        */
+       public boolean isMergeWithNativeEnvironment() {
+               return mergeWithNativeEnvironment;
+       }
+
+       /**
+        * Sets if or if not the provided environment is merged with the
+        * native process environment.
+        *
+        * @param value <code>True</code> if the provided environment is merged with the native process environment, <code>false</code> otherwise.
+        */
+       public void setMergeWithNativeEnvironment(boolean value) {
+               this.mergeWithNativeEnvironment = value;
+       }
+
+       /**
+        * Loads the process settings from the given settings store.
+        *
+        * @param store The settings store. Must not be <code>null</code>.
+        */
+       public void load(ISettingsStore store) {
+               Assert.isNotNull(store);
+               image = store.get("Path", null);//$NON-NLS-1$
+               arguments = store.get("Arguments", null); //$NON-NLS-1$
+               localEcho = Boolean.parseBoolean(store.get("LocalEcho", Boolean.FALSE.toString())); //$NON-NLS-1$
+               mergeWithNativeEnvironment = Boolean.parseBoolean(store.get("MergeWithNativeEnvironment", Boolean.FALSE.toString())); //$NON-NLS-1$
+               lineSeparator = store.get("LineSeparator", null); //$NON-NLS-1$
+               workingDir = store.get("WorkingDir", null); //$NON-NLS-1$
+               if (store instanceof SettingsStore) {
+                       process = (Process)((SettingsStore)store).getSettings().get("Process"); //$NON-NLS-1$
+                       pty = (PTY)((SettingsStore)store).getSettings().get("PTY"); //$NON-NLS-1$
+                       stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[])((SettingsStore)store).getSettings().get("StdOutListeners"); //$NON-NLS-1$
+                       stderrListeners = (ITerminalServiceOutputStreamMonitorListener[])((SettingsStore)store).getSettings().get("StdErrListeners"); //$NON-NLS-1$
+                       environment = (String[])((SettingsStore)store).getSettings().get("Environment"); //$NON-NLS-1$
+               }
+       }
+
+       /**
+        * Saves the process settings to the given settings store.
+        *
+        * @param store The settings store. Must not be <code>null</code>.
+        */
+       public void save(ISettingsStore store) {
+               Assert.isNotNull(store);
+               store.put("Path", image);//$NON-NLS-1$
+               store.put("Arguments", arguments); //$NON-NLS-1$
+               store.put("LocalEcho", Boolean.toString(localEcho)); //$NON-NLS-1$
+               store.put("MergeWithNativeEnvironment", Boolean.toString(mergeWithNativeEnvironment)); //$NON-NLS-1$
+               store.put("LineSeparator", lineSeparator); //$NON-NLS-1$
+               store.put("WorkingDir", workingDir); //$NON-NLS-1$
+               if (store instanceof SettingsStore) {
+                       ((SettingsStore)store).getSettings().put("Process", process); //$NON-NLS-1$
+                       ((SettingsStore)store).getSettings().put("PTY", pty); //$NON-NLS-1$
+                       ((SettingsStore)store).getSettings().put("StdOutListeners", stdoutListeners); //$NON-NLS-1$
+                       ((SettingsStore)store).getSettings().put("StdErrListeners", stderrListeners); //$NON-NLS-1$
+                       ((SettingsStore)store).getSettings().put("Environment", environment); //$NON-NLS-1$
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessSettingsPage.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/ProcessSettingsPage.java
new file mode 100644 (file)
index 0000000..d615370
--- /dev/null
@@ -0,0 +1,196 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.process;
+
+import org.eclipse.cdt.utils.pty.PTY;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.tm.internal.terminal.provisional.api.AbstractSettingsPage;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.ui.PlatformUI;
+import org.osgi.framework.Bundle;
+
+/**
+ * Process connector settings page implementation.
+ */
+@SuppressWarnings("restriction")
+public class ProcessSettingsPage extends AbstractSettingsPage {
+       private Text processImageSelectorControl;
+       private Button processImageSelectorControlButton;
+       private Text processArgumentsControl;
+       private Button localEchoSelectorControl;
+       private Text processWorkingDirControl;
+
+       private final ProcessSettings settings;
+
+       /**
+        * Constructor.
+        *
+        * @param settings
+        */
+       public ProcessSettingsPage(ProcessSettings settings) {
+               super();
+
+               Assert.isNotNull(settings);
+               this.settings = settings;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage#createControl(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       public void createControl(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NONE);
+               composite.setLayout(new GridLayout());
+               composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+               // The entry fields shall be properly aligned
+               Composite panel = new Composite(composite, SWT.NONE);
+               GridLayout layout = new GridLayout(2, false);
+               layout.marginWidth = 0; layout.marginHeight = 0;
+               panel.setLayout(layout);
+               panel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               // Create the process image selector control
+               Label label = new Label(panel, SWT.HORIZONTAL);
+               label.setText(Messages.ProcessSettingsPage_processImagePathSelectorControl_label);
+
+               // Text field and browse button are aligned it their own panel
+               Composite innerPanel = new Composite(panel, SWT.NONE);
+               layout = new GridLayout(2, false);
+               layout.marginWidth = 0; layout.marginHeight = 0;
+               innerPanel.setLayout(layout);
+               innerPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               processImageSelectorControl = new Text(innerPanel, SWT.SINGLE | SWT.BORDER);
+               processImageSelectorControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               processImageSelectorControlButton = new Button(innerPanel, SWT.PUSH);
+               processImageSelectorControlButton.setText(Messages.ProcessSettingsPage_processImagePathSelectorControl_button);
+               processImageSelectorControlButton.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               onBrowseButtonSelected(e);
+                       }
+               });
+
+               // Create the process arguments control
+               label = new Label(panel, SWT.HORIZONTAL);
+               label.setText(Messages.ProcessSettingsPage_processArgumentsControl_label);
+
+               processArgumentsControl = new Text(panel, SWT.SINGLE | SWT.BORDER);
+               processArgumentsControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               // Create the process arguments control
+               label = new Label(panel, SWT.HORIZONTAL);
+               label.setText(Messages.ProcessSettingsPage_processWorkingDirControl_label);
+
+               processWorkingDirControl = new Text(panel, SWT.SINGLE | SWT.BORDER);
+               processWorkingDirControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               // Create the local echo check box
+               localEchoSelectorControl = new Button(composite, SWT.CHECK);
+               localEchoSelectorControl.setText(Messages.ProcessSettingsPage_localEchoSelectorControl_label);
+               localEchoSelectorControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               localEchoSelectorControl.setSelection(!PTY.isSupported());
+
+               // Initialize the control content
+               loadSettings();
+       }
+
+       /**
+        * Called once the user pressed the browse button.
+        *
+        * @param e The selection event or <code>null</code>.
+        */
+       protected void onBrowseButtonSelected(SelectionEvent e) {
+               // Determine the shell
+               Shell shell = e != null ? e.widget.getDisplay().getActiveShell() : PlatformUI.getWorkbench().getDisplay().getActiveShell();
+
+               // create a standard file dialog
+               FileDialog dialog = new FileDialog(shell, SWT.OPEN);
+               dialog.setText(Messages.ProcessSettingsPage_dialogTitle);
+
+               // the dialog should open within the directory of the currently selected
+               // file. If no file has been currently selected, it should open within the
+               // last browsed directory.
+               String selectedFile = processImageSelectorControl.getText();
+               if (selectedFile != null && selectedFile.trim().length() > 0) {
+                       IPath filePath = new Path(selectedFile);
+                       // If the selected file points to an directory, use the directory as is
+                       IPath filterPath = filePath.toFile().isDirectory() ? filePath : filePath.removeLastSegments(1);
+                       String filterFileName = filePath.toFile().isDirectory() || !filePath.toFile().exists() ? null : filePath.lastSegment();
+
+                       if (!filterPath.isEmpty()) {
+                               dialog.setFilterPath(filterPath.toString());
+                       }
+                       if (filterFileName != null) {
+                               dialog.setFileName(filterFileName);
+                       }
+               } else {
+                       Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
+                       if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                               dialog.setFilterPath(org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString());
+                       }
+               }
+
+               // Open the dialog
+               selectedFile = dialog.open();
+               if (selectedFile != null) {
+                       processImageSelectorControl.setText(selectedFile);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage#saveSettings()
+        */
+       @Override
+       public void saveSettings() {
+               settings.setImage(processImageSelectorControl.getText());
+               settings.setArguments(processArgumentsControl.getText());
+               settings.setLocalEcho(localEchoSelectorControl.getSelection());
+               settings.setWorkingDir(processWorkingDirControl.getText());
+               settings.setProcess(null);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage#loadSettings()
+        */
+       @Override
+       public void loadSettings() {
+               processImageSelectorControl.setText(settings.getImage());
+               processArgumentsControl.setText(settings.getArguments());
+               localEchoSelectorControl.setSelection(settings.isLocalEcho());
+               processWorkingDirControl.setText(settings.getWorkingDir());
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage#validateSettings()
+        */
+       @Override
+       public boolean validateSettings() {
+               // The settings are considered valid if the selected process image can be read.
+               String selectedFile = processImageSelectorControl.getText();
+               return selectedFile != null && !"".equals(selectedFile.trim()) && new Path(selectedFile).toFile().canRead(); //$NON-NLS-1$
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/activator/UIPlugin.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/activator/UIPlugin.java
new file mode 100644 (file)
index 0000000..76a4e6e
--- /dev/null
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.process.activator;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.tm.terminal.view.core.tracing.TraceHandler;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class UIPlugin extends AbstractUIPlugin {
+       // The shared instance
+       private static UIPlugin plugin;
+
+       // The trace handler instance
+       private static volatile TraceHandler traceHandler;
+
+       /**
+        * The constructor
+        */
+       public UIPlugin() {
+       }
+
+       /**
+        * Returns the shared instance
+        *
+        * @return the shared instance
+        */
+       public static UIPlugin getDefault() {
+               return plugin;
+       }
+
+       /**
+        * Convenience method which returns the unique identifier of this plugin.
+        */
+       public static String getUniqueIdentifier() {
+               if (getDefault() != null && getDefault().getBundle() != null) {
+                       return getDefault().getBundle().getSymbolicName();
+               }
+               return "org.eclipse.tm.terminal.connector.process"; //$NON-NLS-1$
+       }
+
+       /**
+        * Returns the bundles trace handler.
+        *
+        * @return The bundles trace handler.
+        */
+       public static TraceHandler getTraceHandler() {
+               if (traceHandler == null) {
+                       traceHandler = new TraceHandler(getUniqueIdentifier());
+               }
+               return traceHandler;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void start(BundleContext context) throws Exception {
+               super.start(context);
+               plugin = this;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void stop(BundleContext context) throws Exception {
+               plugin = null;
+               super.stop(context);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)
+        */
+       @Override
+       protected void initializeImageRegistry(ImageRegistry registry) {
+               super.initializeImageRegistry(registry);
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>Image</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>Image</code> object instance or <code>null</code>.
+        */
+       public static Image getImage(String key) {
+               return getDefault().getImageRegistry().get(key);
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>ImageDescriptor</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>ImageDescriptor</code> object instance or <code>null</code>.
+        */
+       public static ImageDescriptor getImageDescriptor(String key) {
+               return getDefault().getImageRegistry().getDescriptor(key);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/help/IContextHelpIds.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/help/IContextHelpIds.java
new file mode 100644 (file)
index 0000000..90ff237
--- /dev/null
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.process.help;
+
+import org.eclipse.tm.terminal.connector.process.activator.UIPlugin;
+
+
+/**
+ * Context help id definitions.
+ */
+public interface IContextHelpIds {
+
+       /**
+        * UI plug-in common context help id prefix.
+        */
+       public final static String PREFIX = UIPlugin.getUniqueIdentifier() + "."; //$NON-NLS-1$
+
+       // ***** Message dialog boxes *****
+
+       /**
+        * Process connector: Create process failed
+        */
+       public final static String MESSAGE_CREATE_PROCESS_FAILED = PREFIX + ".status.messageCreateProcessFailed"; //$NON-NLS-1$
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/nls/Messages.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/nls/Messages.java
new file mode 100644 (file)
index 0000000..6a418e6
--- /dev/null
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2011 - 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.process.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Process terminal connector plug-in externalized strings management.
+ */
+public class Messages extends NLS {
+
+       // The plug-in resource bundle name
+       private static final String BUNDLE_NAME = "org.eclipse.tm.terminal.connector.process.nls.Messages"; //$NON-NLS-1$
+
+       /**
+        * Static constructor.
+        */
+       static {
+               // Load message values from bundle file
+               NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+       }
+
+       // **** Declare externalized string id's down here *****
+
+       public static String ProcessConnector_error_title;
+       public static String ProcessConnector_error_creatingProcess;
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/nls/Messages.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.process/src/org/eclipse/tm/terminal/connector/process/nls/Messages.properties
new file mode 100644 (file)
index 0000000..4e09e4b
--- /dev/null
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+
+ProcessConnector_error_title=Error
+ProcessConnector_error_creatingProcess=Failed to execute ''{0}''.\n\nPossibly caused by:\n{1}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.classpath b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.classpath
new file mode 100644 (file)
index 0000000..ad32c83
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.gitignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.project b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.project
new file mode 100644 (file)
index 0000000..da3152b
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.remote</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.settings/org.eclipse.jdt.core.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..94637df
--- /dev/null
@@ -0,0 +1,61 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.settings/org.eclipse.jdt.ui.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..0b831f5
--- /dev/null
@@ -0,0 +1,3 @@
+#Thu Dec 07 03:43:08 CET 2006
+eclipse.preferences.version=1
+internal.default.compliance=user
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/META-INF/MANIFEST.MF b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..b786b9c
--- /dev/null
@@ -0,0 +1,30 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.tm.terminal.connector.remote;singleton:=true
+Bundle-Version: 1.1.0.qualifier
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.tm.terminal.control,
+ org.eclipse.remote.core,
+ org.eclipse.remote.ui,
+ org.eclipse.core.resources,
+ org.eclipse.swt,
+ org.eclipse.jface,
+ org.eclipse.tm.terminal.view.core;bundle-version="4.0.0";resolution:=optional,
+ org.eclipse.tm.terminal.view.ui;bundle-version="4.1.0";resolution:=optional,
+ org.eclipse.core.expressions
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: org.eclipse.tm.terminal.connector.remote,
+ org.eclipse.tm.terminal.connector.remote.controls,
+ org.eclipse.tm.terminal.connector.remote.internal;x-internal:=true,
+ org.eclipse.tm.terminal.connector.remote.internal.preferences;x-internal:=true,
+ org.eclipse.tm.terminal.connector.remote.launcher,
+ org.eclipse.tm.terminal.connector.remote.nls;x-internal:=true
+Bundle-Activator: org.eclipse.tm.terminal.connector.remote.internal.Activator
+Bundle-ActivationPolicy: lazy
+Eclipse-LazyStart: true
+Import-Package: org.eclipse.core.resources,
+ org.eclipse.ui.ide
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/about.html b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/about.html
new file mode 100644 (file)
index 0000000..d4cc693
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+<p>June 5, 2007</p>    
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/build.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/build.properties
new file mode 100644 (file)
index 0000000..3ca651c
--- /dev/null
@@ -0,0 +1,15 @@
+###############################################################################
+# Copyright (c) 2015 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html
+
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/plugin.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/plugin.properties
new file mode 100644 (file)
index 0000000..54449f2
--- /dev/null
@@ -0,0 +1,11 @@
+###############################################################################
+# Copyright (c) 2015 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+pluginName = Terminal via Remote API Connector
+providerName = Eclipse.org - Target Management
+connectionName = Remote Services
+RemoteTerminalPage.name = Remote Terminal
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/plugin.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/plugin.xml
new file mode 100644 (file)
index 0000000..0617a73
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<!--
+# Copyright (c) 2015 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+-->
+<plugin>
+   <extension-point id="parsers" name="Terminal Parsers" schema="schema/parsers.exsd"/>
+
+<!-- Terminal connector contributions -->
+   <extension point="org.eclipse.tm.terminal.control.connectors">
+      <connector 
+            name="%connectionName"
+            id="org.eclipse.tm.terminal.connector.remote.RemoteConnector"
+            class="org.eclipse.tm.terminal.connector.remote.internal.RemoteConnector"/>
+   </extension>
+
+<!-- Terminal launcher delegate contributions -->
+   <extension point="org.eclipse.tm.terminal.view.ui.launcherDelegates">
+      <delegate
+            class="org.eclipse.tm.terminal.connector.remote.launcher.RemoteLauncherDelegate"
+            id="org.eclipse.tm.terminal.connector.telnet.launcher.remote"
+            label="Remote Terminal">
+      </delegate>
+   </extension>
+   
+<!-- Preference contributions -->
+   <extension point="org.eclipse.core.runtime.preferences">
+      <initializer
+            class="org.eclipse.tm.terminal.connector.remote.internal.preferences.RemoteTerminalPreferenceInitializer">
+      </initializer>
+   </extension>
+   
+   <extension point="org.eclipse.ui.preferencePages">
+      <page
+            category="org.eclipse.tm.terminal.TerminalPreferencePage"
+            class="org.eclipse.tm.terminal.connector.remote.internal.preferences.RemoteTerminalPreferencePage"
+            id="org.eclipse.tm.terminal.remote.page"
+            name="%RemoteTerminalPage.name">
+      </page>
+   </extension>
+</plugin>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/pom.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/pom.xml
new file mode 100644 (file)
index 0000000..fd047cc
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <artifactId>org.eclipse.tm.terminal.connector.remote</artifactId>
+  <version>1.1.0-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/schema/parsers.exsd b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/schema/parsers.exsd
new file mode 100644 (file)
index 0000000..3a0e7d9
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.tm.terminal.connector.remote" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.tm.terminal.connector.remote" id="parser" name="Terminal Parser"/>
+      </appInfo>
+      <documentation>
+         Extension point that allows a parser to be added to the terminal view. The parser is intended to process output generated by the remote shell and perform an action based on the content.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="parser"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="parser">
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Unique identifier for this parser
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.tm.terminal.remote.IRemoteTerminalParser"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiinfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteSettings.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteSettings.java
new file mode 100644 (file)
index 0000000..e409451
--- /dev/null
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote;
+
+public interface IRemoteSettings {
+       public static final String CONNECTION_NAME = "ConnectionName"; //$NON-NLS-1$
+       public static final String CONNECTION_TYPE_ID = "ConnectionTypeId"; //$NON-NLS-1$
+
+       /**
+        * Get the connection type ID for the connection (e.g. local, ssh, etc.)
+        * 
+        * @return connection type ID.
+        */
+       String getConnectionTypeId();
+
+       /**
+        * Get the connection name for the target system.
+        * 
+        * @return connection name
+        */
+       String getConnectionName();
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteTerminalConstants.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteTerminalConstants.java
new file mode 100644 (file)
index 0000000..ed8317c
--- /dev/null
@@ -0,0 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote;
+
+public interface IRemoteTerminalConstants {
+       public static final String PREF_TERMINAL_SHELL_COMMAND = "TERMINAL_SHELL_COMMAND"; //$NON-NLS-1$
+       public static final String PREF_TERMINAL_TYPE = "TERMINAL_TYPE"; //$NON-NLS-1$
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteTerminalParser.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/IRemoteTerminalParser.java
new file mode 100644 (file)
index 0000000..43858e0
--- /dev/null
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote;
+
+import java.io.IOException;
+
+import org.eclipse.remote.core.IRemoteConnection;
+import org.eclipse.remote.core.IRemoteProcess;
+
+public interface IRemoteTerminalParser {
+       /**
+        * Initialize the remote shell. This method will be called after the connection has been initialized. Implementors can assume
+        * that the connection is open when this is called.
+        * 
+        * @param connection
+        *            terminal shell connection
+        * @return IRemoteProcess a remote process corresponding to the remote shell
+        * @throws IOException
+        *             if the remote shell fails to start for some reason
+        */
+       IRemoteProcess initialize(IRemoteConnection connection) throws IOException;
+
+       /**
+        * Parse the input stream. This method will be called with a buffer of characters read from the input stream. If the method
+        * returns true, the characters will be displayed in the terminal view, otherwise they will be ignored.
+        * 
+        * @param buf
+        *            buffer containing characters from the terminal input stream
+        * @return true if the characters should be displayed in the terminal
+        */
+       boolean parse(byte[] buf);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/controls/RemoteWizardConfigurationPanel.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/controls/RemoteWizardConfigurationPanel.java
new file mode 100644 (file)
index 0000000..5081919
--- /dev/null
@@ -0,0 +1,190 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote.controls;
+
+import java.util.Map;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.tm.internal.terminal.provisional.api.AbstractSettingsPage;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
+import org.eclipse.tm.terminal.connector.remote.IRemoteSettings;
+import org.eclipse.tm.terminal.connector.remote.internal.RemoteConnector;
+import org.eclipse.tm.terminal.connector.remote.internal.RemoteSettings;
+import org.eclipse.tm.terminal.connector.remote.internal.RemoteSettingsPage;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel;
+
+/**
+ * Remote wizard configuration panel implementation.
+ */
+@SuppressWarnings("restriction")
+public class RemoteWizardConfigurationPanel extends AbstractExtendedConfigurationPanel {
+
+       private RemoteSettings remoteSettings;
+       private ISettingsPage remoteSettingsPage;
+
+       /**
+        * Constructor.
+        *
+        * @param container
+        *            The configuration panel container or <code>null</code>.
+        */
+       public RemoteWizardConfigurationPanel(IConfigurationPanelContainer container) {
+               super(container);
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       public void setupPanel(Composite parent) {
+               Composite panel = new Composite(parent, SWT.NONE);
+               panel.setLayout(new GridLayout());
+               GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+               panel.setLayoutData(data);
+
+               RemoteConnector conn = new RemoteConnector();
+               remoteSettings = (RemoteSettings) conn.getRemoteSettings();
+
+               remoteSettingsPage = new RemoteSettingsPage(remoteSettings);
+               if (remoteSettingsPage instanceof AbstractSettingsPage) {
+                       ((AbstractSettingsPage) remoteSettingsPage).setHasControlDecoration(true);
+               }
+               remoteSettingsPage.createControl(panel);
+
+               // Add the listener to the settings page
+               remoteSettingsPage.addListener(new ISettingsPage.Listener() {
+
+                       @Override
+                       public void onSettingsPageChanged(Control control) {
+                               if (getContainer() != null) {
+                                       getContainer().validate();
+                               }
+                       }
+               });
+
+               // Create the encoding selection combo
+               createEncodingUI(panel, true);
+
+               setControl(panel);
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setupData(java.util.Map)
+        */
+       @Override
+       public void setupData(Map<String, Object> data) {
+               if (data == null || remoteSettings == null || remoteSettingsPage == null) {
+                       return;
+               }
+
+               String value = (String) data.get(IRemoteSettings.CONNECTION_TYPE_ID);
+               if (value != null) {
+                       remoteSettings.setConnectionTypeId(value);
+               }
+
+               value = (String) data.get(IRemoteSettings.CONNECTION_NAME);
+               if (value != null) {
+                       remoteSettings.setConnectionName(value);
+               }
+
+               value = (String) data.get(ITerminalsConnectorConstants.PROP_ENCODING);
+               if (value != null) {
+                       setEncoding(value);
+               }
+
+               remoteSettingsPage.loadSettings();
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map)
+        */
+       @Override
+       public void extractData(Map<String, Object> data) {
+               if (data == null) {
+                       return;
+               }
+
+               // set the terminal connector id for remote
+               data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID,
+                               "org.eclipse.tm.terminal.connector.remote.RemoteConnector"); //$NON-NLS-1$
+
+               remoteSettingsPage.saveSettings();
+
+               data.put(IRemoteSettings.CONNECTION_TYPE_ID, remoteSettings.getConnectionTypeId());
+               data.put(IRemoteSettings.CONNECTION_NAME, remoteSettings.getConnectionName());
+               if (getEncoding() != null) {
+                       data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding());
+               }
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String)
+        */
+       @Override
+       protected void fillSettingsForHost(String host) {
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean)
+        */
+       @Override
+       protected void saveSettingsForHost(boolean add) {
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
+        */
+       @Override
+       public boolean isValid() {
+               return isEncodingValid() && remoteSettingsPage.validateSettings();
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.
+        * IDialogSettings, java.lang.String)
+        */
+       @Override
+       public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
+               saveSettingsForHost(true);
+               super.doSaveWidgetValues(settings, idPrefix);
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings()
+        */
+       @Override
+       protected String getHostFromSettings() {
+               remoteSettingsPage.saveSettings();
+               return null;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/Activator.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/Activator.java
new file mode 100644 (file)
index 0000000..12aa175
--- /dev/null
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote.internal;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.tm.terminal.connector.remote.nls.Messages;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+       public static final String PLUGIN_ID = "org.eclipse.tm.terminal.remote"; //$NON-NLS-1$
+       private static Activator plugin;
+
+       /**
+        * The constructor
+        */
+       public Activator() {
+               super();
+               plugin = this;
+       }
+
+       @Override
+       public void start(BundleContext context) throws Exception {
+               super.start(context);
+       }
+
+       @Override
+       public void stop(BundleContext context) throws Exception {
+               plugin = null;
+               super.stop(context);
+       }
+
+       /**
+        * Returns the shared instance
+        * 
+        * @return the shared instance
+        */
+       public static Activator getDefault() {
+               return plugin;
+       }
+
+       /**
+        * Returns an image descriptor for the image file at the given plug-in relative path.
+        * 
+        * @param path
+        *            the path
+        * @return the image descriptor
+        */
+       public static ImageDescriptor getImageDescriptor(String path) {
+               return AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, path);
+       }
+
+       /**
+        * Create log entry from an IStatus
+        * 
+        * @param status
+        *            status to log
+        */
+       public static void log(IStatus status) {
+               getDefault().getLog().log(status);
+       }
+
+       /**
+        * Create log entry from a string
+        * 
+        * @param msg
+        *            message to log
+        */
+       public static void log(String msg) {
+               log(new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.ERROR, msg, null));
+       }
+
+       /**
+        * Create log entry from a Throwable
+        * 
+        * @param e
+        *            throwable to log
+        */
+       public static void log(Throwable e) {
+               log(new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.ERROR, Messages.TERMINAL_EXCEPTION, e));
+       }
+
+       // Get rid of edu.lsu.cct tags
+
+       /**
+        * Generate a unique identifier
+        * 
+        * @return unique identifier string
+        */
+       public static String getUniqueIdentifier() {
+               if (getDefault() == null) {
+                       // If the default instance is not yet initialized,
+                       // return a static identifier. This identifier must
+                       // match the plugin id defined in plugin.xml
+                       return PLUGIN_ID;
+               }
+               return getDefault().getBundle().getSymbolicName();
+       }
+
+       /**
+        * Return the OSGi service with the given service interface.
+        *
+        * @param service
+        *            service interface
+        * @return the specified service or null if it's not registered
+        */
+       public static <T> T getService(Class<T> service) {
+               final BundleContext context = plugin.getBundle().getBundleContext();
+               final ServiceReference<T> ref = context.getServiceReference(service);
+               return ref != null ? context.getService(ref) : null;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/ArgumentParser.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/ArgumentParser.java
new file mode 100644 (file)
index 0000000..17831ce
--- /dev/null
@@ -0,0 +1,361 @@
+/*******************************************************************************
+ * Copyright (c) 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote.internal;
+
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Utility class for managing command line arguments.
+ */
+public class ArgumentParser {
+       private final List<String> tokens;
+
+       /**
+        * Create a command line representation from the string with a shell command
+        * line. The command line is parsed and split on spaces. Quoted or escaped
+        * spaces are preserved..
+        */
+       public ArgumentParser(String commandline) {
+               this.tokens = parseCommandline(commandline);
+       }
+
+       /**
+        * Create a command line representation from an array of strings. The first
+        * element of the array is assumed to be the command, the remaining, the
+        * arguments. The elements are not parsed not (un)escaped., but taked as the
+        * are.
+        */
+       public ArgumentParser(String tokenArray[]) {
+               this(Arrays.asList(tokenArray));
+       }
+
+       /**
+        * Create a command line representation from an array of strings. The first
+        * element of the list is assumed to be the command, the remaining, the
+        * arguments. The elements are not parsed not (un)escaped., but taked as the
+        * are.
+        */
+       public ArgumentParser(List<String> tokenList) {
+               this.tokens = new ArrayList<String>(tokenList);
+       }
+
+       /**
+        * Create a command line representation from the command and an array of
+        * parameters. The elements are not parsed not (un)escaped., but taked as
+        * the are.
+        */
+       public ArgumentParser(String command, String parameterArray[]) {
+               this(command, Arrays.asList(parameterArray));
+       }
+
+       /**
+        * Create a command line representation from the command and an list of
+        * parameters. The elements are not parsed not (un)escaped., but taked as
+        * the are.
+        */
+       public ArgumentParser(String command, List<String> parameterList) {
+               this.tokens = new ArrayList<String>();
+               this.tokens.add(command);
+               this.tokens.addAll(parameterList);
+       }
+
+       private static List<String> parseCommandline(String commandline) {
+               ArrayList<String> result = new ArrayList<String>();
+               StringCharacterIterator iterator = new StringCharacterIterator(commandline);
+
+               for (iterator.first(); iterator.current() != CharacterIterator.DONE; iterator.next()) {
+
+                       // Restart to skip white space
+                       if (Character.isWhitespace(iterator.current())) {
+                               continue;
+                       }
+
+                       // Read token
+                       StringBuffer buffer = new StringBuffer();
+                       token_reader: for (; iterator.current() != CharacterIterator.DONE; iterator.next()) {
+                               char tokenChar = iterator.current();
+
+                               // A white space terminates the token
+                               if (Character.isWhitespace(tokenChar)) {
+                                       break token_reader;
+                               }
+
+                               // Handle character that composes the token
+                               switch (tokenChar) {
+                               case '"': {
+                                       /*
+                                        * Read all text within double quotes or until end of
+                                        * string. Allows escaping.
+                                        */
+                                       iterator.next(); // Skip quote
+                                       quoted_reader: while ((iterator.current() != CharacterIterator.DONE) && (iterator.current() != '"')) {
+                                               char innerChar = iterator.current();
+                                               switch (innerChar) {
+                                               case '\\':
+                                                       char nextChar = iterator.next();
+                                                       switch (nextChar) {
+                                                       case CharacterIterator.DONE:
+                                                               break quoted_reader;
+                                                       case '"':
+                                                               // Add the character, but remove the escape
+                                                               buffer.append(nextChar);
+                                                               iterator.next();
+                                                               continue quoted_reader;
+                                                       default:
+                                                               // Add the character and keep escape
+                                                               buffer.append(innerChar);
+                                                               buffer.append(nextChar);
+                                                               iterator.next();
+                                                               continue quoted_reader;
+                                                       }
+                                               default:
+                                                       buffer.append(innerChar);
+                                                       iterator.next();
+                                                       continue quoted_reader;
+                                               }
+                                       }
+                                       continue token_reader;
+                               }
+                               case '\'': {
+                                       /*
+                                        * Read all text within single quotes or until end of
+                                        * string. No escaping.
+                                        */
+                                       iterator.next(); // Skip the quote
+                                       while ((iterator.current() != CharacterIterator.DONE) && (iterator.current() != '\'')) {
+                                               buffer.append(iterator.current());
+                                               iterator.next();
+                                       }
+                                       continue token_reader;
+                               }
+                               case '\\': {
+                                       /*
+                                        * Read escaped char.
+                                        */
+                                       char nextChar = iterator.next();
+                                       switch (nextChar) {
+                                       case CharacterIterator.DONE:
+                                               break token_reader;
+                                       case '\n':
+                                               // Ignore newline. Both lines are concatenated.
+                                               continue token_reader;
+                                       default:
+                                               // Add the character, but remove the escape
+                                               buffer.append(nextChar);
+                                               continue token_reader;
+                                       }
+                               }
+                               default:
+                                       /*
+                                        * Any other char, add to the buffer.
+                                        */
+                                       buffer.append(tokenChar);
+                                       continue token_reader;
+                               }
+                       }
+                       result.add(buffer.toString());
+               }
+
+               return result;
+       }
+
+       /**
+        * Convert all tokens in a full command line that can be executed in a
+        * shell.
+        * 
+        * @param fullEscape
+        *            If every special character shall be escaped. If false, only
+        *            white spaces are escaped and the shell will interpret the
+        *            special chars. If true, then all special chars are quoted.
+        */
+       public String getCommandLine(boolean fullEscape) {
+               StringBuffer buffer = new StringBuffer();
+               Iterator<String> iterator = this.tokens.iterator();
+               boolean first = true;
+               while (iterator.hasNext()) {
+                       String token = iterator.next();
+                       if (!first) {
+                               buffer.append(' ');
+                       } else {
+                               first = false;
+                       }
+                       buffer.append(escapeToken(token, fullEscape));
+               }
+               return buffer.toString();
+       }
+
+       private StringBuffer escapeToken(String token, boolean fullEscape) {
+               StringBuffer buffer = new StringBuffer();
+               StringCharacterIterator iter = new StringCharacterIterator(token);
+               for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) {
+                       if (Character.isWhitespace(c)) {
+                               buffer.append('\\');
+                               buffer.append(c);
+                               continue;
+                       }
+                       switch (c) {
+                       case '(':
+                       case ')':
+                       case '[':
+                       case ']':
+                       case '{':
+                       case '}':
+                       case '|':
+                       case '\\':
+                       case '*':
+                       case '&':
+                       case '^':
+                       case '%':
+                       case '$':
+                       case '#':
+                       case '@':
+                       case '!':
+                       case '~':
+                       case '`':
+                       case '\'':
+                       case '"':
+                       case ':':
+                       case ';':
+                       case '?':
+                       case '>':
+                       case '<':
+                       case '\n':
+                               if (fullEscape) {
+                                       buffer.append('\\');
+                               }
+                               buffer.append(c);
+                               continue;
+                       case ' ':
+                               buffer.append('\\');
+                               buffer.append(c);
+                               continue;
+                       default:
+                               buffer.append(c);
+                               continue;
+                       }
+               }
+               return buffer;
+       }
+
+       /**
+        * Returns a List of all entries of the command line.
+        * 
+        * @return The Array
+        */
+       public String[] getTokenArray() {
+               return this.tokens.toArray(new String[this.tokens.size()]);
+       }
+
+       /**
+        * Returns a List of all entries of the command line.
+        * 
+        * @return The List
+        */
+       public List<String> getTokenList() {
+               return new ArrayList<String>(this.tokens);
+       }
+
+       /**
+        * Returns the command of the command line, assuming that the first entry is
+        * always the command.
+        * 
+        * @return The command or null if the command lines has no command nor
+        *         arguments.
+        */
+       public String getCommand() {
+               if (this.tokens.size() == 0) {
+                       return null;
+               }
+               return this.tokens.get(0);
+       }
+
+       /**
+        * Returns the command of the command line, assuming that the first entry is
+        * always the command.
+        * 
+        * @return The command or null if the command lines has no command nor
+        *         arguments.
+        * @param fullEscape
+        *            If every special character shall be escaped. If false, only
+        *            white spaces are escaped and the shell will interpret the
+        *            special chars. If true, then all special chars are quoted.
+        */
+       public String getEscapedCommand(boolean fullEscape) {
+               if (this.tokens.size() == 0) {
+                       return null;
+               }
+               return escapeToken(this.tokens.get(0), fullEscape).toString();
+       }
+
+       /**
+        * Returns a list of all arguments, assuming that the first entry is the
+        * command name.
+        * 
+        * @return The Array or null if the command lines has no command nor
+        *         arguments.
+        */
+       public String[] getParameterArray() {
+               if (this.tokens.size() == 0) {
+                       return null;
+               }
+               return this.tokens.subList(1, this.tokens.size()).toArray(new String[this.tokens.size() - 1]);
+       }
+
+       /**
+        * Returns a list of all arguments, assuming that the first entry is the
+        * command name.
+        * 
+        * @return The List or null if the command lines has no command nor
+        *         arguments.
+        */
+       public List<String> getParameterList() {
+               if (this.tokens.size() == 0) {
+                       return null;
+               }
+               return new ArrayList<String>(this.tokens.subList(1, this.tokens.size()));
+       }
+
+       /**
+        * Returns the total number of entries.
+        * 
+        * @return the total number of entries
+        */
+       public int getSize() {
+               return this.tokens.size();
+       }
+
+       /**
+        * Returns a representation of the command line for debug purposes.
+        */
+       @Override
+       public String toString() {
+               StringBuffer buffer = new StringBuffer();
+               buffer.append("<"); //$NON-NLS-1$
+               Iterator<String> iterator = this.tokens.iterator();
+               boolean first = true;
+               while (iterator.hasNext()) {
+                       String token = iterator.next();
+                       if (!first) {
+                               buffer.append('\n');
+                       } else {
+                               first = false;
+                       }
+                       buffer.append(token);
+               }
+               buffer.append(">"); //$NON-NLS-1$
+               return buffer.toString();
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnectionManager.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnectionManager.java
new file mode 100644 (file)
index 0000000..c7dd616
--- /dev/null
@@ -0,0 +1,198 @@
+/*******************************************************************************
+ * Copyright (c) 2015,2016 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote.internal;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.RegistryFactory;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.remote.core.IRemoteCommandShellService;
+import org.eclipse.remote.core.IRemoteConnection;
+import org.eclipse.remote.core.IRemoteConnectionType;
+import org.eclipse.remote.core.IRemoteProcess;
+import org.eclipse.remote.core.IRemoteProcessBuilder;
+import org.eclipse.remote.core.IRemoteProcessService;
+import org.eclipse.remote.core.IRemoteProcessTerminalService;
+import org.eclipse.remote.core.IRemoteServicesManager;
+import org.eclipse.remote.core.exception.RemoteConnectionException;
+import org.eclipse.tm.internal.terminal.emulator.VT100Emulator;
+import org.eclipse.tm.internal.terminal.emulator.VT100TerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.connector.remote.IRemoteTerminalConstants;
+import org.eclipse.tm.terminal.connector.remote.IRemoteTerminalParser;
+import org.eclipse.tm.terminal.connector.remote.nls.Messages;
+
+@SuppressWarnings("restriction")
+public class RemoteConnectionManager extends Job {
+       private final static String PARSERS_EXTENSION_POINT = "parsers"; //$NON-NLS-1$
+       private final static String PARSER_ELEMENT = "parser"; //$NON-NLS-1$
+
+       private static int fgNo;
+
+       private final ITerminalControl control;
+       private final RemoteConnector connector;
+
+       private IRemoteTerminalParser parser;
+       private IRemoteProcess remoteProcess;
+
+       protected RemoteConnectionManager(RemoteConnector conn, ITerminalControl control) {
+               super("Remote Terminal-" + fgNo++); //$NON-NLS-1$
+               this.control = control;
+               this.connector = conn;
+               setSystem(true);
+               loadParserExtension();
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+        */
+       @Override
+       protected IStatus run(IProgressMonitor monitor) {
+               IRemoteConnection remoteConnection = null;
+
+               try {
+                       IRemoteServicesManager svcMgr = Activator.getService(IRemoteServicesManager.class);
+                       String connTypeId = connector.getRemoteSettings().getConnectionTypeId();
+                       IRemoteConnectionType connType = svcMgr.getConnectionType(connTypeId);
+                       if (connType != null) {
+                               remoteConnection = connType.getConnection(connector.getRemoteSettings().getConnectionName());
+                       }
+                       if (remoteConnection == null) {
+                               return new Status(IStatus.ERROR, Activator.getUniqueIdentifier(),
+                                               NLS.bind(Messages.RemoteConnectionManager_0, connector.getRemoteSettings().getConnectionName()));
+                       }
+
+                       if (!remoteConnection.isOpen()) {
+                               remoteConnection.open(monitor);
+                               if (!remoteConnection.isOpen()) {
+                                       return new Status(IStatus.ERROR, Activator.getUniqueIdentifier(),
+                                                       NLS.bind(Messages.RemoteConnectionManager_1, connector.getRemoteSettings().getConnectionName()));
+                               }
+                       }
+
+                       if (parser != null) {
+                               remoteProcess = parser.initialize(remoteConnection);
+                       }
+
+                       if (remoteProcess == null) {
+                               /*
+                                * Check the terminal shell command preference. If the preference is empty and we support a command shell,
+                                * just use that. Otherwise use the preference value if it is set, or fall back to a default if not.
+                                */
+                               IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(Activator.getUniqueIdentifier());
+                               String terminalShellCommand = prefs.get(IRemoteTerminalConstants.PREF_TERMINAL_SHELL_COMMAND, ""); //$NON-NLS-1$
+                               if ("".equals(terminalShellCommand) //$NON-NLS-1$
+                                               && remoteConnection.hasService(IRemoteCommandShellService.class)) {
+                                       IRemoteCommandShellService cmdShellSvc = remoteConnection.getService(IRemoteCommandShellService.class);
+                                       synchronized (this) {
+                                               remoteProcess = cmdShellSvc.getCommandShell(IRemoteProcessBuilder.ALLOCATE_PTY);
+                                       }
+                               } else if (remoteConnection.hasService(IRemoteProcessService.class)) {
+                                       if ("".equals(terminalShellCommand)) { //$NON-NLS-1$
+                                               terminalShellCommand = "/bin/bash -l"; //$NON-NLS-1$
+                                       }
+                                       IRemoteProcessService procSvc = remoteConnection.getService(IRemoteProcessService.class);
+                                       IRemoteProcessBuilder processBuilder = procSvc
+                                                       .getProcessBuilder(new ArgumentParser(terminalShellCommand).getTokenList());
+                                       remoteProcess = processBuilder.start(IRemoteProcessBuilder.ALLOCATE_PTY);
+                               } else {
+                                       return new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), Messages.RemoteConnectionManager_2);
+                               }
+                       }
+
+                       control.setVT100LineWrapping(true);
+                       connector.setInputStream(remoteProcess.getInputStream());
+                       control.setState(TerminalState.CONNECTED);
+                       control.setTerminalTitle(remoteConnection.getName());
+                       connector.setOutputStream(remoteProcess.getOutputStream());
+                       // Initialize terminal size
+                       VT100Emulator text = ((VT100TerminalControl) control).getTerminalText();
+                       text.fontChanged();
+
+                       // read data until the connection gets terminated
+                       readData(connector.getInputStream());
+               } catch (IOException e) {
+                       return new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), e.getMessage());
+               } catch (RemoteConnectionException e) {
+                       return new Status(IStatus.ERROR, Activator.getUniqueIdentifier(), e.getMessage());
+               } finally {
+                       // make sure the terminal is disconnected when the thread ends
+                       connector.disconnect();
+               }
+               return Status.OK_STATUS;
+       }
+
+       @Override
+       protected void canceling() {
+               super.canceling();
+               synchronized (this) {
+                       if (remoteProcess != null && !remoteProcess.isCompleted()) {
+                               remoteProcess.destroy();
+                       }
+               }
+       }
+
+       public void setTerminalSize(int cols, int rows, int width, int height) {
+               if (remoteProcess != null) {
+                       IRemoteProcessTerminalService termSvc = remoteProcess.getService(IRemoteProcessTerminalService.class);
+                       if (termSvc != null) {
+                               termSvc.setTerminalSize(cols, rows, width, height);
+                       }
+               }
+       }
+
+       /**
+        * Read the data from the connection and display it in the terminal.
+        * 
+        * @param in
+        * @throws IOException
+        */
+       private void readData(InputStream in) throws IOException {
+               byte[] buf = new byte[32 * 1024];
+               int n;
+               while ((n = in.read(buf, 0, buf.length)) >= 0) {
+                       if (n != 0 && (parser == null || parser.parse(buf))) {
+                               control.getRemoteToTerminalOutputStream().write(buf, 0, n);
+                       }
+               }
+       }
+
+       private void loadParserExtension() {
+               IExtensionPoint point = RegistryFactory.getRegistry().getExtensionPoint(Activator.getUniqueIdentifier(),
+                               PARSERS_EXTENSION_POINT);
+               if (point != null) {
+                       IExtension[] extensions = point.getExtensions();
+                       for (IExtension extension : extensions) {
+                               IConfigurationElement[] elements = extension.getConfigurationElements();
+                               for (IConfigurationElement element : elements) {
+                                       if (PARSER_ELEMENT.equals(element.getName())) {
+                                               try {
+                                                       parser = (IRemoteTerminalParser) element.createExecutableExtension("class"); //$NON-NLS-1$
+                                               } catch (CoreException e) {
+                                                       Activator.log(e);
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnector.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteConnector.java
new file mode 100644 (file)
index 0000000..a1f4d97
--- /dev/null
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ * Copyright (c) 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote.internal;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.NullSettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
+import org.eclipse.tm.terminal.connector.remote.IRemoteSettings;
+
+@SuppressWarnings("restriction")
+public class RemoteConnector extends TerminalConnectorImpl {
+       private OutputStream fOutputStream;
+       private InputStream fInputStream;
+       private RemoteConnectionManager fConnection;
+       private int fWidth;
+       private int fHeight;
+       private final RemoteSettings fSettings;
+
+       public RemoteConnector() {
+               this(new RemoteSettings());
+       }
+
+       public RemoteConnector(RemoteSettings settings) {
+               fSettings = settings;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#connect(org.eclipse.tm.internal.terminal.
+        * provisional.api.ITerminalControl)
+        */
+       @Override
+       public void connect(ITerminalControl control) {
+               super.connect(control);
+               fControl.setState(TerminalState.CONNECTING);
+               fConnection = new RemoteConnectionManager(this, control);
+               fConnection.schedule();
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#doDisconnect()
+        */
+       @Override
+       public synchronized void doDisconnect() {
+               fConnection.cancel();
+       }
+
+       public InputStream getInputStream() {
+               return fInputStream;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#getSettingsSummary()
+        */
+       @Override
+       public String getSettingsSummary() {
+               return fSettings.getSummary();
+       }
+
+       /**
+        * Return the Remote Settings.
+        * 
+        * @return the settings for a concrete connection.
+        */
+       public IRemoteSettings getRemoteSettings() {
+               return fSettings;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#getTerminalToRemoteStream()
+        */
+       @Override
+       public OutputStream getTerminalToRemoteStream() {
+               return fOutputStream;
+       }
+
+       @Override
+       public void load(ISettingsStore store) {
+               fSettings.load(store);
+       }
+
+       @Override
+       public void setDefaultSettings() {
+               fSettings.load(new NullSettingsStore());
+       }
+
+       @Override
+       public void save(ISettingsStore store) {
+               fSettings.save(store);
+       }
+
+       public void setInputStream(InputStream inputStream) {
+               fInputStream = inputStream;
+       }
+
+       public void setOutputStream(OutputStream outputStream) {
+               fOutputStream = outputStream;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#setTerminalSize(int, int)
+        */
+       @Override
+       public void setTerminalSize(int newWidth, int newHeight) {
+               if (fConnection != null && (newWidth != fWidth || newHeight != fHeight)) {
+                       // avoid excessive communications due to change size requests by caching previous size
+                       fConnection.setTerminalSize(newWidth, newHeight, 8 * newWidth, 8 * newHeight);
+                       fWidth = newWidth;
+                       fHeight = newHeight;
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettings.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettings.java
new file mode 100644 (file)
index 0000000..e3fd933
--- /dev/null
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote.internal;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.terminal.connector.remote.IRemoteSettings;
+
+@SuppressWarnings("restriction")
+public class RemoteSettings implements IRemoteSettings {
+       protected String connectionTypeId;
+       protected String connectionName;
+
+       public RemoteSettings() {
+       }
+
+       @Override
+       public String getConnectionName() {
+               return connectionName;
+       }
+
+       @Override
+       public String getConnectionTypeId() {
+               return connectionTypeId;
+       }
+
+       public String getSummary() {
+               return "Remote:" + getConnectionTypeId() + '_' + getConnectionName(); //$NON-NLS-1$
+       }
+
+       @Override
+       public String toString() {
+               return getSummary();
+       }
+
+       /**
+        * Load information into the RemoteSettings object.
+        */
+       public void load(ISettingsStore store) {
+               connectionTypeId = store.get(CONNECTION_TYPE_ID, ""); //$NON-NLS-1$
+               connectionName = store.get(CONNECTION_NAME, ""); //$NON-NLS-1$
+       }
+
+       /**
+        * Extract information from the RemoteSettings object.
+        */
+       public void save(ISettingsStore store) {
+               store.put(CONNECTION_TYPE_ID, connectionTypeId);
+               store.put(CONNECTION_NAME, connectionName);
+       }
+
+       public void setConnectionName(String name) {
+               connectionName = name;
+       }
+
+       public void setConnectionTypeId(String id) {
+               connectionTypeId = id;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettingsPage.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/RemoteSettingsPage.java
new file mode 100644 (file)
index 0000000..d8d944b
--- /dev/null
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2015,2016 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote.internal;
+
+import java.util.List;
+
+import org.eclipse.remote.core.IRemoteCommandShellService;
+import org.eclipse.remote.core.IRemoteConnectionType;
+import org.eclipse.remote.core.IRemoteServicesManager;
+import org.eclipse.remote.ui.widgets.RemoteConnectionWidget;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tm.internal.terminal.provisional.api.AbstractSettingsPage;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
+
+@SuppressWarnings("restriction")
+public class RemoteSettingsPage extends AbstractSettingsPage {
+       private final RemoteSettings fTerminalSettings;
+       private RemoteConnectionWidget fRemoteConnectionWidget;
+
+       public RemoteSettingsPage(RemoteSettings settings) {
+               fTerminalSettings = settings;
+       }
+
+       @Override
+       public void saveSettings() {
+               if (fTerminalSettings != null && fRemoteConnectionWidget != null && !fRemoteConnectionWidget.isDisposed()) {
+                       if (fRemoteConnectionWidget.getConnection() != null) {
+                               if (fRemoteConnectionWidget.getConnection().getConnectionType() != null) {
+                                       fTerminalSettings.setConnectionTypeId(fRemoteConnectionWidget.getConnection().getConnectionType().getId());
+                               }
+                               fTerminalSettings.setConnectionName(fRemoteConnectionWidget.getConnection().getName());
+                       }
+               }
+       }
+
+       @Override
+       public void loadSettings() {
+               if (fTerminalSettings != null && fRemoteConnectionWidget != null && !fRemoteConnectionWidget.isDisposed()) {
+                       fRemoteConnectionWidget.setConnection(fTerminalSettings.getConnectionTypeId(), fTerminalSettings.getConnectionName());
+               }
+       }
+
+       String get(String value, String def) {
+               if (value == null || value.length() == 0) {
+                       return def;
+               }
+               return value;
+       }
+
+       @Override
+       public boolean validateSettings() {
+               if (fRemoteConnectionWidget == null || fRemoteConnectionWidget.isDisposed()
+                               || fRemoteConnectionWidget.getConnection() == null) {
+                       return false;
+               }
+               return true;
+       }
+
+       @Override
+       public void createControl(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NONE);
+               GridLayout gridLayout = new GridLayout(2, false);
+               GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+
+               composite.setLayout(gridLayout);
+               composite.setLayoutData(gridData);
+
+               BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
+               ServiceReference<IRemoteServicesManager> ref = context.getServiceReference(IRemoteServicesManager.class);
+               IRemoteServicesManager manager = context.getService(ref);
+               @SuppressWarnings("unchecked")
+               List<IRemoteConnectionType> types = manager.getConnectionTypesSupporting(IRemoteCommandShellService.class);
+
+               fRemoteConnectionWidget = new RemoteConnectionWidget(composite, SWT.NONE, null, 0, types);
+               fRemoteConnectionWidget.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               fireListeners(fRemoteConnectionWidget);
+                       }
+               });
+               loadSettings();
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/preferences/RemoteTerminalPreferenceInitializer.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/preferences/RemoteTerminalPreferenceInitializer.java
new file mode 100644 (file)
index 0000000..895da44
--- /dev/null
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote.internal.preferences;
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.tm.terminal.connector.remote.IRemoteTerminalConstants;
+import org.eclipse.tm.terminal.connector.remote.internal.Activator;
+
+public class RemoteTerminalPreferenceInitializer extends AbstractPreferenceInitializer {
+
+       public RemoteTerminalPreferenceInitializer() {
+       }
+
+       @Override
+       public void initializeDefaultPreferences() {
+               IEclipsePreferences defaultPrefs = DefaultScope.INSTANCE.getNode(Activator.getUniqueIdentifier());
+               defaultPrefs.put(IRemoteTerminalConstants.PREF_TERMINAL_SHELL_COMMAND, ""); //$NON-NLS-1$
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/preferences/RemoteTerminalPreferencePage.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/internal/preferences/RemoteTerminalPreferencePage.java
new file mode 100644 (file)
index 0000000..8717543
--- /dev/null
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote.internal.preferences;
+
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tm.terminal.connector.remote.IRemoteTerminalConstants;
+import org.eclipse.tm.terminal.connector.remote.internal.Activator;
+import org.eclipse.tm.terminal.connector.remote.nls.Messages;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+
+public class RemoteTerminalPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
+       @Override
+       protected void createFieldEditors() {
+               Composite parent = getFieldEditorParent();
+               addField(new StringFieldEditor(IRemoteTerminalConstants.PREF_TERMINAL_TYPE, "Terminal Type", parent));
+               addField(new StringFieldEditor(IRemoteTerminalConstants.PREF_TERMINAL_SHELL_COMMAND,
+                               Messages.RemoteTerminalPreferencePage_0, parent));
+       }
+
+       @Override
+       public IPreferenceStore doGetPreferenceStore() {
+               return new ScopedPreferenceStore(InstanceScope.INSTANCE, Activator.getUniqueIdentifier());
+       }
+
+       @Override
+       public void init(IWorkbench workbench) {
+               // Nothing
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteLauncherDelegate.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteLauncherDelegate.java
new file mode 100644 (file)
index 0000000..d5f8d7a
--- /dev/null
@@ -0,0 +1,177 @@
+/*******************************************************************************
+ * Copyright (c) 2015,2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote.launcher;
+
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.remote.core.IRemoteConnection;
+import org.eclipse.remote.core.IRemoteConnectionType;
+import org.eclipse.remote.core.IRemoteServicesManager;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
+import org.eclipse.tm.terminal.connector.remote.IRemoteSettings;
+import org.eclipse.tm.terminal.connector.remote.controls.RemoteWizardConfigurationPanel;
+import org.eclipse.tm.terminal.connector.remote.internal.Activator;
+import org.eclipse.tm.terminal.connector.remote.internal.RemoteSettings;
+import org.eclipse.tm.terminal.connector.remote.nls.Messages;
+import org.eclipse.tm.terminal.view.core.TerminalServiceFactory;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
+import org.eclipse.tm.terminal.view.ui.internal.SettingsStore;
+import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate;
+
+/**
+ * Remote launcher delegate implementation.
+ */
+@SuppressWarnings("restriction")
+public class RemoteLauncherDelegate extends AbstractLauncherDelegate {
+       // The Remote terminal connection memento handler
+       private final IMementoHandler mementoHandler = new RemoteMementoHandler();
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#needsUserConfiguration()
+        */
+       @Override
+       public boolean needsUserConfiguration() {
+               return true;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getPanel(org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer)
+        */
+       @Override
+       public IConfigurationPanel getPanel(IConfigurationPanelContainer container) {
+               return new RemoteWizardConfigurationPanel(container);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#execute(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
+        */
+       @Override
+       public void execute(Map<String, Object> properties, ITerminalService.Done done) {
+               Assert.isNotNull(properties);
+
+               // Set the terminal tab title
+               String terminalTitle = getTerminalTitle(properties);
+               if (terminalTitle != null) {
+                       properties.put(ITerminalsConnectorConstants.PROP_TITLE, terminalTitle);
+               }
+
+               // Force a new terminal tab each time it is launched, if not set otherwise from outside
+               // TODO need a command shell service routing to get this
+               if (!properties.containsKey(ITerminalsConnectorConstants.PROP_FORCE_NEW)) {
+                       properties.put(ITerminalsConnectorConstants.PROP_FORCE_NEW, Boolean.TRUE);
+               }
+
+               // Get the terminal service
+               ITerminalService terminal = TerminalServiceFactory.getService();
+               // If not available, we cannot fulfill this request
+               if (terminal != null) {
+                       terminal.openConsole(properties, done);
+               }
+       }
+
+       /**
+        * Returns the terminal title string.
+        * <p>
+        * The default implementation constructs a title like &quot;SSH @ host (Start time) &quot;.
+        *
+        * @return The terminal title string or <code>null</code>.
+        */
+       private String getTerminalTitle(Map<String, Object> properties) {
+               // Try to see if the user set a title explicitly via the properties map.
+               String title = getDefaultTerminalTitle(properties);
+               if (title != null) return title;
+
+               String connection = (String) properties.get(IRemoteSettings.CONNECTION_NAME);
+
+               if (connection != null) {
+                       DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
+                       String date = format.format(new Date(System.currentTimeMillis()));
+                       return NLS.bind(Messages.RemoteLauncherDelegate_terminalTitle, new String[] { connection, date });
+               }
+               
+               return Messages.RemoteLauncherDelegate_terminalTitle_default;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
+        */
+       @SuppressWarnings({ "rawtypes", "unchecked" })
+       @Override
+       public Object getAdapter(Class adapter) {
+               if (IMementoHandler.class.equals(adapter)) {
+                       return mementoHandler;
+               }
+               return super.getAdapter(adapter);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map)
+        */
+       @Override
+       public ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
+               Assert.isNotNull(properties);
+
+               // Check for the terminal connector id
+               String connectorId = (String) properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
+               if (connectorId == null) {
+                       connectorId = "org.eclipse.tm.terminal.connector.remote.RemoteConnector"; //$NON-NLS-1$
+               }
+
+               // Extract the remote properties
+               String connTypeId = (String) properties.get(IRemoteSettings.CONNECTION_TYPE_ID);
+               String connName = (String) properties.get(IRemoteSettings.CONNECTION_NAME);
+
+               // Construct the terminal settings store
+               ISettingsStore store = new SettingsStore();
+
+               // Construct the remote settings
+               RemoteSettings remoteSettings = new RemoteSettings();
+               remoteSettings.setConnectionTypeId(connTypeId);
+               remoteSettings.setConnectionName(connName);
+               // And save the settings to the store
+               remoteSettings.save(store);
+
+               // Construct the terminal connector instance
+               ITerminalConnector connector = TerminalConnectorExtension.makeTerminalConnector(connectorId);
+               if (connector != null) {
+                       // Apply default settings
+                       connector.setDefaultSettings();
+                       // And load the real settings
+                       connector.load(store);
+               }
+
+               if (!properties.containsKey(ITerminalsConnectorConstants.PROP_ENCODING)) {
+                       IRemoteServicesManager svcMgr = Activator.getService(IRemoteServicesManager.class);
+
+                       IRemoteConnectionType connType = svcMgr.getConnectionType(connTypeId);
+                       if (connType != null) {
+                               IRemoteConnection remoteConnection = connType.getConnection(connName);
+                               if (remoteConnection != null && remoteConnection.isOpen()) {
+                                       properties.put(ITerminalsConnectorConstants.PROP_ENCODING,
+                                                       remoteConnection.getProperty(IRemoteConnection.LOCALE_CHARMAP_PROPERTY));
+                               }
+                       }
+               }
+
+               properties.put(ITerminalsConnectorConstants.PROP_PROCESS_WORKING_DIR, "/tmp"); //$NON-NLS-1$
+
+               return connector;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteMementoHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/launcher/RemoteMementoHandler.java
new file mode 100644 (file)
index 0000000..a114c03
--- /dev/null
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote.launcher;
+
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.tm.terminal.connector.remote.IRemoteSettings;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
+import org.eclipse.ui.IMemento;
+
+/**
+ * Telnet terminal connection memento handler implementation.
+ */
+public class RemoteMementoHandler implements IMementoHandler {
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#saveState(org.eclipse.ui.IMemento, java.util.Map)
+        */
+       @Override
+       public void saveState(IMemento memento, Map<String, Object> properties) {
+               Assert.isNotNull(memento);
+               Assert.isNotNull(properties);
+
+               // Do not write the terminal title to the memento -> needs to
+               // be recreated at the time of restoration.
+               memento.putString(IRemoteSettings.CONNECTION_NAME, (String) properties.get(IRemoteSettings.CONNECTION_NAME));
+               memento.putString(IRemoteSettings.CONNECTION_TYPE_ID, (String) properties.get(IRemoteSettings.CONNECTION_TYPE_ID));
+               memento.putString(ITerminalsConnectorConstants.PROP_ENCODING,
+                               (String) properties.get(ITerminalsConnectorConstants.PROP_ENCODING));
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#restoreState(org.eclipse.ui.IMemento, java.util.Map)
+        */
+       @Override
+       public void restoreState(IMemento memento, Map<String, Object> properties) {
+               Assert.isNotNull(memento);
+               Assert.isNotNull(properties);
+
+               // Restore the terminal properties from the memento
+               properties.put(IRemoteSettings.CONNECTION_NAME, memento.getString(IRemoteSettings.CONNECTION_NAME));
+               properties.put(IRemoteSettings.CONNECTION_TYPE_ID, memento.getString(IRemoteSettings.CONNECTION_TYPE_ID));
+               properties.put(ITerminalsConnectorConstants.PROP_ENCODING, memento.getString(ITerminalsConnectorConstants.PROP_ENCODING));
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/nls/Messages.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/nls/Messages.java
new file mode 100644 (file)
index 0000000..2634243
--- /dev/null
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.remote.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+       private static final String BUNDLE_NAME = "org.eclipse.tm.terminal.connector.remote.nls.Messages"; //$NON-NLS-1$
+
+       public static String RemoteConnectionManager_0;
+
+       public static String RemoteConnectionManager_1;
+
+       public static String RemoteConnectionManager_2;
+
+       public static String RemoteTerminalPreferencePage_0;
+
+       public static String TERMINAL_EXCEPTION;
+       
+       public static String RemoteLauncherDelegate_terminalTitle;
+       public static String RemoteLauncherDelegate_terminalTitle_default;
+
+       static {
+               // initialize resource bundle
+               NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+       }
+
+       private Messages() {
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/nls/Messages.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.remote/src/org/eclipse/tm/terminal/connector/remote/nls/Messages.properties
new file mode 100644 (file)
index 0000000..94584b5
--- /dev/null
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Wind River Systems - initial API and implementation
+###############################################################################
+RemoteConnectionManager_0=Unable to create connection: {0}
+RemoteConnectionManager_1=Unable to to open connection: {0}
+RemoteConnectionManager_2=Connection type does not support the required services
+RemoteTerminalPreferencePage_0=Initial Shell Command
+TERMINAL_EXCEPTION=Remote Terminal Exception
+
+RemoteLauncherDelegate_terminalTitle={0} ({1})
+RemoteLauncherDelegate_terminalTitle_default=Remote Terminal
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.classpath b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.classpath
new file mode 100644 (file)
index 0000000..ad32c83
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.gitignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.options b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.options
new file mode 100644 (file)
index 0000000..7a6120d
--- /dev/null
@@ -0,0 +1,2 @@
+org.eclipse.tm.terminal.connector.serial/debugmode = 0
+org.eclipse.tm.terminal.connector.serial/trace/serialLinePanel = false
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.project b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.project
new file mode 100644 (file)
index 0000000..f7f32b2
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.serial</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.settings/org.eclipse.jdt.core.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..4754bba
--- /dev/null
@@ -0,0 +1,362 @@
+#Wed Oct 19 12:10:57 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=4
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=4
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.settings/org.eclipse.jdt.ui.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..0d73226
--- /dev/null
@@ -0,0 +1,62 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Target Explorer Java STD
+formatter_settings_version=12
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.settings/org.eclipse.pde.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/.settings/org.eclipse.pde.prefs
new file mode 100644 (file)
index 0000000..cf80c8b
--- /dev/null
@@ -0,0 +1,32 @@
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.encodings=2
+compilers.p.build.java.compiler=2
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/META-INF/MANIFEST.MF b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..012dcf8
--- /dev/null
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.tm.terminal.connector.serial;singleton:=true
+Bundle-Version: 4.2.0.qualifier
+Bundle-Activator: org.eclipse.tm.terminal.connector.serial.activator.UIPlugin
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.core.expressions;bundle-version="3.4.400",
+ org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.equinox.security;bundle-version="1.1.100",
+ org.eclipse.tm.terminal.view.core;bundle-version="4.0.0";resolution:=optional,
+ org.eclipse.tm.terminal.view.ui;bundle-version="4.1.0";resolution:=optional,
+ org.eclipse.tm.terminal.control;bundle-version="4.0.0",
+ org.eclipse.ui;bundle-version="3.8.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Export-Package: org.eclipse.tm.terminal.connector.serial.activator;x-internal:=true,
+ org.eclipse.tm.terminal.connector.serial.connector,
+ org.eclipse.tm.terminal.connector.serial.controls,
+ org.eclipse.tm.terminal.connector.serial.interfaces,
+ org.eclipse.tm.terminal.connector.serial.launcher,
+ org.eclipse.tm.terminal.connector.serial.nls;x-internal:=true
+Import-Package: gnu.io;resolution:=optional
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/about.html b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/about.html
new file mode 100644 (file)
index 0000000..0f07cf0
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+<p>May 24, 2012</p>    
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/build.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/build.properties
new file mode 100644 (file)
index 0000000..3333540
--- /dev/null
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties,\
+               plugin.xml,\
+               about.html
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/plugin.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/plugin.properties
new file mode 100644 (file)
index 0000000..17f52a5
--- /dev/null
@@ -0,0 +1,20 @@
+##################################################################################
+# Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+
+pluginName = Terminal Serial Connector
+providerName = Eclipse.org - Target Management
+
+# ----- Terminal Launcher Delegates -----
+
+SerialLauncherDelegate.label=Serial Terminal
+
+# ----- Terminal Connectors -----
+
+SerialConnector.label = Serial
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/plugin.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/plugin.xml
new file mode 100644 (file)
index 0000000..b61259b
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+<!-- Terminal connector contributions -->
+   <extension point="org.eclipse.tm.terminal.control.connectors">
+      <connector
+            name="%SerialConnector.label" 
+            id="org.eclipse.tm.terminal.connector.serial.SerialConnector"
+            class="org.eclipse.tm.terminal.connector.serial.connector.SerialConnector"/>
+   </extension>
+   
+<!-- Terminal launcher delegate contributions -->
+   <extension point="org.eclipse.tm.terminal.view.ui.launcherDelegates">
+      <delegate
+            class="org.eclipse.tm.terminal.connector.serial.launcher.SerialLauncherDelegate"
+            id="org.eclipse.tm.terminal.connector.serial.launcher.serial"
+            label="%SerialLauncherDelegate.label">
+            <enablement>
+               <with variable="selection">
+                  <count value="1"/>
+                  <iterate operator="and" ifEmpty="false">
+                     <test
+                           forcePluginActivation="true"
+                           property="org.eclipse.tm.terminal.view.core.hasContextPropertiesProvider"
+                           value="true"/>
+                  </iterate>
+               </with>
+            </enablement>
+      </delegate>
+   </extension>
+</plugin>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/pom.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/pom.xml
new file mode 100644 (file)
index 0000000..66ee78b
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.tizen</groupId>
+    <artifactId>tizen-patches</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+    <relativePath>../../../tizen.rt.upstream.patches</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.serial</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/pom2.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/pom2.xml
new file mode 100644 (file)
index 0000000..66ee78b
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.tizen</groupId>
+    <artifactId>tizen-patches</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+    <relativePath>../../../tizen.rt.upstream.patches</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.serial</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/activator/UIPlugin.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/activator/UIPlugin.java
new file mode 100644 (file)
index 0000000..8cb1247
--- /dev/null
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.activator;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.tm.terminal.view.core.tracing.TraceHandler;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class UIPlugin extends AbstractUIPlugin {
+       // The shared instance
+       private static UIPlugin plugin;
+       // The trace handler instance
+       private static volatile TraceHandler traceHandler;
+
+       /**
+        * The constructor
+        */
+       public UIPlugin() {
+       }
+
+       /**
+        * Returns the shared instance
+        *
+        * @return the shared instance
+        */
+       public static UIPlugin getDefault() {
+               return plugin;
+       }
+
+       /**
+        * Convenience method which returns the unique identifier of this plugin.
+        */
+       public static String getUniqueIdentifier() {
+               if (getDefault() != null && getDefault().getBundle() != null) {
+                       return getDefault().getBundle().getSymbolicName();
+               }
+               return "org.eclipse.tm.terminal.connector.serial"; //$NON-NLS-1$
+       }
+
+       /**
+        * Returns the bundles trace handler.
+        *
+        * @return The bundles trace handler.
+        */
+       public static TraceHandler getTraceHandler() {
+               if (traceHandler == null) {
+                       traceHandler = new TraceHandler(getUniqueIdentifier());
+               }
+               return traceHandler;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void start(BundleContext context) throws Exception {
+               super.start(context);
+               plugin = this;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void stop(BundleContext context) throws Exception {
+               plugin = null;
+               super.stop(context);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)
+        */
+       @Override
+       protected void initializeImageRegistry(ImageRegistry registry) {
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>Image</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>Image</code> object instance or <code>null</code>.
+        */
+       public static Image getImage(String key) {
+               return getDefault().getImageRegistry().get(key);
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>ImageDescriptor</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>ImageDescriptor</code> object instance or <code>null</code>.
+        */
+       public static ImageDescriptor getImageDescriptor(String key) {
+               return getDefault().getImageRegistry().getDescriptor(key);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/ISerialSettings.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/ISerialSettings.java
new file mode 100644 (file)
index 0000000..5986785
--- /dev/null
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.connector;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+
+public interface ISerialSettings {
+
+       String getSerialPort();
+       int getBaudRate();
+       int getDataBits();
+       int getStopBits();
+       int getParity();
+       int getFlowControl();
+       int getTimeout();
+       String getSummary();
+       void load(ISettingsStore store);
+       void save(ISettingsStore store);
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialConnectWorker.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialConnectWorker.java
new file mode 100644 (file)
index 0000000..569273a
--- /dev/null
@@ -0,0 +1,215 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - extracted from TerminalControl
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [207158] improve error message when port not available
+ * Martin Oberhuber (Wind River) - [208029] COM port not released after quick disconnect/reconnect
+ * Martin Oberhuber (Wind River) - [206884] Update Terminal Ownership ID to "org.eclipse.tm.terminal.serial"
+ * Martin Oberhuber (Wind River) - [221184] Redesign Serial Terminal Ownership Handling
+ * Michael Scharf (Wind River) - [262996] get rid of TerminalState.OPENED
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.connector;
+
+import gnu.io.CommPortIdentifier;
+import gnu.io.NoSuchPortException;
+import gnu.io.PortInUseException;
+import gnu.io.SerialPort;
+
+import java.util.Arrays;
+import java.util.Enumeration;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.connector.serial.nls.Messages;
+
+public class SerialConnectWorker extends Thread {
+    /* default */ final ITerminalControl fControl;
+       private final SerialConnector fConn;
+
+       /**
+        * UNDER CONSTRUCTION
+        * @param conn TODO
+        * @param control TODO
+        */
+       public SerialConnectWorker(SerialConnector conn, ITerminalControl control) {
+               super();
+               fControl = control;
+               fConn = conn;
+       }
+
+       /**
+        * Adds the named port to the name of known ports to rxtx
+        * @param name
+        */
+       void addPort(String name) {
+               // Rxtx either takes the connection from the properties OR using
+               // the port scan.
+               // Unfortunately, setting gnu.io.rxtx.SerialPorts only temporarily does not
+               // work, because rxtx closes connections that are unknown.
+               // The only solution I could come up with: add the known connections
+               // to the gnu.io.rxtx.SerialPorts property....
+               final String GNU_IO_RXTX_SERIAL_PORTS = "gnu.io.rxtx.SerialPorts"; //$NON-NLS-1$
+               String sep = System.getProperty("path.separator", ":"); //$NON-NLS-1$//$NON-NLS-2$
+               // get the existing names
+               String names = System.getProperty(GNU_IO_RXTX_SERIAL_PORTS);
+               if (names == null) {
+                       StringBuffer buffer=new StringBuffer();
+                       boolean sepNeeded=false;
+                       // When we add a port to this property, rxtx forgets the
+                       // ports it finds by scanning the system.
+
+                       // iterate over the known ports and add them to the property
+                       Enumeration<?> portIdEnum= CommPortIdentifier.getPortIdentifiers();
+                       while (portIdEnum.hasMoreElements()) {
+                               CommPortIdentifier identifier = (CommPortIdentifier) portIdEnum.nextElement();
+                               if (identifier.getPortType() == CommPortIdentifier.PORT_SERIAL) {
+                                       if(sepNeeded)
+                                               buffer.append(sep);
+                                       else
+                                               sepNeeded=true;
+                                       buffer.append(identifier.getName());
+                               }
+                       }
+                       // append our new port
+                       if(sepNeeded)
+                               buffer.append(sep);
+                       buffer.append(name);
+
+                       System.setProperty(GNU_IO_RXTX_SERIAL_PORTS,buffer.toString());
+               } else if (!Arrays.asList(names.split(sep)).contains(name)) {
+                       // the list does not contain the name, therefore we add it
+                       // since there is at least one name in the list, we append it
+                       System.setProperty(GNU_IO_RXTX_SERIAL_PORTS, names + sep + name);
+               } else {
+                       // nothing to do -- should never happen...
+                       return;
+               }
+               // Reinitialize the ports because we have changed the list of known ports
+               CommPortIdentifier.getPortIdentifiers();
+       }
+
+       /**
+        * Return the ID that this connector uses for RXTX Comm Ownership Handling.
+        *
+        * Note that this was changed in Terminal 2.0 as per
+        * https://bugs.eclipse.org/bugs/show_bug.cgi?id=206884 - previous versions
+        * of the serial terminal connector used a different string,
+        * "org.eclipse.tm.internal.terminal.serial".
+        *
+        * @since org.eclipse.tm.terminal.serial 2.0
+        * @return ownership ID, "org.eclipse.tm.terminal.serial"
+        */
+       public static final String getOwnershipId() {
+               return "org.eclipse.tm.terminal.serial"; //$NON-NLS-1$
+       }
+
+       @Override
+    public void run() {
+               String portName=null;
+               final String strID = getOwnershipId();
+               SerialPort serialPort = null;
+               try {
+                       ISerialSettings s=fConn.getSerialSettings();
+                       portName=s.getSerialPort();
+                       try {
+                               fConn.setSerialPortIdentifier(CommPortIdentifier.getPortIdentifier(portName));
+                       } catch (NoSuchPortException e) {
+                               // let's try
+                               addPort(portName);
+                               fConn.setSerialPortIdentifier(CommPortIdentifier.getPortIdentifier(portName));
+                       }
+                       fConn.setSerialPortHandler(new SerialPortHandler(fConn,fControl));
+                       fConn.setSerialPortIdentifier(CommPortIdentifier.getPortIdentifier(portName));
+
+                       //Bug 221184: Warn about serial port already in use
+                       String currentOwner = fConn.getSerialPortIdentifier().getCurrentOwner();
+                       if (strID.equals(currentOwner)) {
+                               currentOwner = Messages.SerialConnectWorker_ANOTHER_TERMINAL;
+                       }
+                       final int[] answer = { SWT.YES };
+                       final String fPortName = portName;
+                       final String fCurrentOwner = currentOwner;
+                       if (currentOwner != null) {
+                               Display.getDefault().syncExec(new Runnable() {
+                                       @Override
+                    public void run() {
+                                               MessageBox mb = new MessageBox(fControl.getShell(), SWT.ICON_QUESTION | SWT.YES | SWT.NO);
+                                               mb.setText(Messages.SerialConnectWorker_PROP_TITLE);
+                                               mb.setMessage(NLS.bind(Messages.SerialConnectWorker_PORT_IN_USE, fPortName, fCurrentOwner));
+                                               answer[0] = mb.open();
+                                       }
+                               });
+                       }
+
+                       if (answer[0] != SWT.YES) {
+                               // don't try to steal the port
+                               fControl.setState(TerminalState.CLOSED);
+                               fConn.setSerialPortHandler(null);
+                               return;
+                       }
+
+                       // Try to steal the port -- may throw PortInUseException
+                       int timeoutInMs = s.getTimeout() * 1000;
+                       serialPort = (SerialPort) fConn.getSerialPortIdentifier().open(strID, timeoutInMs);
+                       serialPort.setSerialPortParams(s.getBaudRate(), s.getDataBits(), s.getStopBits(), s.getParity());
+                       serialPort.setFlowControlMode(s.getFlowControl());
+                       serialPort.addEventListener(fConn.getSerialPortHandler());
+                       serialPort.notifyOnDataAvailable(true);
+                       fConn.getSerialPortIdentifier().addPortOwnershipListener(fConn.getSerialPortHandler());
+                       fConn.setSerialPort(serialPort);
+                       if (fCurrentOwner != null) {
+                               fControl.displayTextInTerminal(NLS.bind(Messages.SerialConnectWorker_PORT_STOLEN, fPortName, fCurrentOwner));
+
+                       }
+                       fControl.setState(TerminalState.CONNECTED);
+
+               } catch (PortInUseException portInUseException) {
+                       fControl.setState(TerminalState.CLOSED);
+                       String theOwner = portInUseException.currentOwner;
+                       if (strID.equals(theOwner)) {
+                               theOwner = Messages.SerialConnectWorker_ANOTHER_TERMINAL;
+                       }
+                       fControl.displayTextInTerminal(NLS.bind(Messages.SerialConnectWorker_PORT_NOT_STOLEN, portName, theOwner));
+               } catch (NoSuchPortException e) {
+                       fControl.setState(TerminalState.CLOSED);
+                       String msg=e.getMessage();
+                       if(msg==null)
+                               msg=portName;
+                       fControl.displayTextInTerminal(NLS.bind(Messages.SerialConnectWorker_NO_SUCH_PORT, msg));
+
+               } catch (Exception exception) {
+                       Logger.logException(exception);
+                       if (serialPort!=null) {
+                               //Event listener is removed as part of close(),
+                               //but exceptions need to be caught to ensure that close() really succeeds
+                               try {
+                                       serialPort.removeEventListener();
+                                       Thread.sleep(50); //allow a little time for RXTX Native to catch up - makes stuff more stable
+                               } catch(Exception e) {
+                                       Logger.logException(e);
+                               }
+                               serialPort.close();
+                               fConn.getSerialPortIdentifier().removePortOwnershipListener(fConn.getSerialPortHandler());
+                       }
+                       fControl.setState(TerminalState.CLOSED);
+               } finally {
+                       fConn.doneConnect();
+               }
+       }
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialConnector.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialConnector.java
new file mode 100644 (file)
index 0000000..9c3b2fc
--- /dev/null
@@ -0,0 +1,239 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - extracted from TerminalControl
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [206892] Don't connect if already connecting
+ * Martin Oberhuber (Wind River) - [208029] COM port not released after quick disconnect/reconnect
+ * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.connector;
+
+import gnu.io.CommPortIdentifier;
+import gnu.io.SerialPort;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.internal.terminal.provisional.api.NullSettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
+import org.eclipse.tm.terminal.connector.serial.activator.UIPlugin;
+import org.eclipse.tm.terminal.connector.serial.nls.Messages;
+
+public class SerialConnector extends TerminalConnectorImpl {
+       private OutputStream fOutputStream;
+       private InputStream fInputStream;
+       private SerialPort fSerialPort;
+    private CommPortIdentifier fSerialPortIdentifier;
+       private SerialPortHandler fTerminalSerialPortHandler;
+       private SerialSettings fSettings;
+       private SerialConnectWorker fConnectWorker = null;
+       /* default */ volatile boolean fDisconnectGoingOn = false;
+
+       public SerialConnector() {
+       }
+       @Override
+    public void initialize() throws Exception {
+               try {
+                       fSettings=new SerialSettings();
+               } catch (NoClassDefFoundError e) {
+                       // tell the user how to install the library
+                       throw new CoreException(new Status(IStatus.WARNING,UIPlugin.getUniqueIdentifier(),0, Messages.SerialConnector_Error_LiberayNotInstalled,e));
+               }
+       }
+       @Override
+    public void connect(ITerminalControl control) {
+               super.connect(control);
+               synchronized(this) {
+                       if (fConnectWorker!=null || fDisconnectGoingOn) {
+                               //avoid multiple background connect/disconnect threads at the same time
+                               return;
+                       }
+                       fConnectWorker = new SerialConnectWorker(this, control);
+               }
+               fControl.setState(TerminalState.CONNECTING);
+               fConnectWorker.start();
+       }
+       /**
+        * Indicate that the connectWorker is finished.
+        */
+       void doneConnect() {
+               synchronized(this) {
+                       fConnectWorker = null;
+               }
+       }
+       @Override
+    public void doDisconnect() {
+               synchronized(this) {
+                       //avoid multiple background connect/disconnect threads at the same time
+                       if (fConnectWorker!=null) {
+                               fConnectWorker.interrupt();
+                               return;
+                       } else if (fDisconnectGoingOn) {
+                               return;
+                       }
+                       fDisconnectGoingOn = true;
+               }
+
+               // Fix for SPR 112422.  When output is being received from the serial port, the
+               // below call to removePortOwnershipListener() attempts to lock the serial port
+               // object, but that object is already locked by another Terminal view thread
+               // waiting for the SWT display thread to process a syncExec() call.  Since this
+               // method is called on the display thread, the display thread is waiting to
+               // lock the serial port object and the thread holding the serial port object
+               // lock is waiting for the display thread to process a syncExec() call, so the
+               // two threads end up deadlocked, which hangs the Workbench GUI.
+               //
+               // The solution is to spawn a short-lived worker thread that calls
+               // removePortOwnershipListener(), thus preventing the display thread from
+               // deadlocking with the other Terminal view thread.
+
+               new Thread("Terminal View Serial Port Disconnect Worker") //$NON-NLS-1$
+               {
+                       @Override
+            public void run() {
+                               try {
+                                       if (getSerialPortIdentifier() != null) {
+                                               try {
+                                                       getSerialPortIdentifier()
+                                                               .removePortOwnershipListener(getSerialPortHandler());
+                                               } catch(Exception e) {
+                                                       Logger.logException(e);
+                                               }
+                                       }
+
+                                       if (getSerialPort() != null) {
+                                               //Event listener is removed as part of close(),
+                                               //but exceptions need to be caught to ensure that close() really succeeds
+                                               try {
+                                                       getSerialPort().removeEventListener();
+                                                       Thread.sleep(50); //allow a little time for RXTX Native to catch up - makes stuff more stable
+                                               } catch(Exception e) {
+                                                       Logger.logException(e);
+                                               }
+                                               Logger.log("Calling close() on serial port ..."); //$NON-NLS-1$
+                                               getSerialPort().close();
+                                       }
+
+                                       if (getInputStream() != null) {
+                                               try {
+                                                       getInputStream().close();
+                                               } catch (Exception exception) {
+                                                       Logger.logException(exception);
+                                               }
+                                       }
+
+                                       if (getTerminalToRemoteStream() != null) {
+                                               try {
+                                                       getTerminalToRemoteStream().close();
+                                               } catch (Exception exception) {
+                                                       Logger.logException(exception);
+                                               }
+                                       }
+
+                                       setSerialPortIdentifier(null);
+                                       cleanSerialPort();
+                                       setSerialPortHandler(null);
+                               } catch(Exception e) {
+                                       Logger.logException(e);
+                               } finally {
+                                       fDisconnectGoingOn = false;
+                               }
+                       }
+
+               }.start();
+       }
+       public InputStream getInputStream() {
+               return fInputStream;
+       }
+       @Override
+    public OutputStream getTerminalToRemoteStream() {
+               return fOutputStream;
+       }
+       private void setInputStream(InputStream inputStream) {
+               fInputStream = inputStream;
+       }
+       private void setOutputStream(OutputStream outputStream) {
+               fOutputStream = outputStream;
+       }
+       @Override
+    public void setTerminalSize(int newWidth, int newHeight) {
+               // TODO
+       }
+       protected SerialPort getSerialPort() {
+               return fSerialPort;
+       }
+
+       /**
+        * sets the socket to null
+        */
+       void cleanSerialPort() {
+               fSerialPort=null;
+               setInputStream(null);
+               setOutputStream(null);
+       }
+
+       protected void setSerialPort(SerialPort serialPort) throws IOException {
+               cleanSerialPort();
+               if(serialPort!=null) {
+                       fSerialPort = serialPort;
+                       setOutputStream(serialPort.getOutputStream());
+                       setInputStream(serialPort.getInputStream());
+               }
+       }
+       protected CommPortIdentifier getSerialPortIdentifier() {
+               return fSerialPortIdentifier;
+       }
+       protected void setSerialPortIdentifier(CommPortIdentifier serialPortIdentifier) {
+               //System.out.println("setSerialPortId: "+Thread.currentThread().getName()+ " - "+serialPortIdentifier + " - "+System.currentTimeMillis());
+               fSerialPortIdentifier = serialPortIdentifier;
+       }
+       void setSerialPortHandler(SerialPortHandler serialPortHandler) {
+               fTerminalSerialPortHandler=serialPortHandler;
+       }
+       SerialPortHandler getSerialPortHandler() {
+               return fTerminalSerialPortHandler;
+       }
+       /**
+        * Return the Serial Settings.
+        *
+        * @return the settings for a concrete connection.
+        */
+       public ISerialSettings getSerialSettings() {
+               return fSettings;
+       }
+       @Override
+       public void setDefaultSettings() {
+           fSettings.load(new NullSettingsStore());
+       }
+       @Override
+    public String getSettingsSummary() {
+               return fSettings.getSummary();
+       }
+       @Override
+    public void load(ISettingsStore store) {
+               fSettings.load(store);
+       }
+       @Override
+    public void save(ISettingsStore store) {
+               fSettings.save(store);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialPortHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialPortHandler.java
new file mode 100644 (file)
index 0000000..4f7719c
--- /dev/null
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - extracted from TerminalControl
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [168197] Replace JFace MessagDialog by SWT MessageBox
+ * Martin Oberhuber (Wind River) - [221184] Redesign Serial Terminal Ownership Handling
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.connector;
+
+import gnu.io.CommPortOwnershipListener;
+import gnu.io.SerialPortEvent;
+import gnu.io.SerialPortEventListener;
+
+import java.io.IOException;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.terminal.connector.serial.nls.Messages;
+
+/**
+ * UNDER CONSTRUCTION
+ */
+public class SerialPortHandler implements SerialPortEventListener, CommPortOwnershipListener {
+
+    /* default */ final ITerminalControl fControl;
+       /* default */ final SerialConnector fConn;
+       protected byte[] bytes = new byte[2048];
+
+       /**
+        * UNDER CONSTRUCTION
+        * @param control TODO
+        */
+       public SerialPortHandler(SerialConnector conn,ITerminalControl control) {
+               super();
+               fControl = control;
+               fConn=conn;
+       }
+
+       // Message handlers
+
+       /**
+        * UNDER CONSTRUCTION
+        */
+       public void onSerialDataAvailable(Object data) {
+               try {
+                       while (fConn.getInputStream() != null && fConn.getInputStream().available() > 0) {
+                               int nBytes = fConn.getInputStream().read(bytes);
+                               fControl.getRemoteToTerminalOutputStream().write(bytes, 0, nBytes);
+                       }
+               } catch (IOException ex) {
+                       fControl.displayTextInTerminal(ex.getMessage());
+               } catch (Exception exception) {
+                       Logger.logException(exception);
+               }
+       }
+
+       public void onSerialOwnershipRequested(Object data) {
+               //Bug 221184: We immediately release the port on any ownership request
+               try {
+                       throw new Exception();
+               } catch (Exception e) {
+                       StackTraceElement[] elems = e.getStackTrace();
+                       final String requester = elems[elems.length - 4].getClassName();
+                       Display.getDefault().asyncExec(new Runnable() {
+                               @Override
+                public void run() {
+                                       fConn.disconnect();
+                                       String req = requester;
+                                       String myPackage = this.getClass().getPackage().getName();
+                                       if (req.startsWith(myPackage)) {
+                                               req = Messages.SerialConnectWorker_ANOTHER_TERMINAL;
+                                       }
+                                       fControl.displayTextInTerminal(NLS.bind(Messages.SerialConnectWorker_OWNERSHIP_GRANTED, req));
+                               }
+                       });
+                       fConn.disconnect();
+               }
+       }
+
+       // SerialPortEventListener interface
+       @Override
+    public void serialEvent(SerialPortEvent event) {
+               switch (event.getEventType()) {
+               case SerialPortEvent.DATA_AVAILABLE:
+                       onSerialDataAvailable(null);
+                       break;
+               }
+       }
+
+       // CommPortOwnershipListener interface
+
+       /**
+        * UNDER CONSTRUCTION
+        */
+       @Override
+    public void ownershipChange(int nType) {
+               switch (nType) {
+               case CommPortOwnershipListener.PORT_OWNERSHIP_REQUESTED:
+                       onSerialOwnershipRequested(null);
+                       break;
+               }
+       }
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialProperties.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialProperties.java
new file mode 100644 (file)
index 0000000..1e6af9d
--- /dev/null
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - extracted from TerminalProperties
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.connector;
+
+import gnu.io.CommPortIdentifier;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+
+public class SerialProperties {
+       protected List<String> fSerialPortTable;
+       protected List<String> fBaudRateTable;
+       protected List<String> fDataBitsTable;
+       protected List<String> fStopBitsTable;
+       protected List<String> fParityTable;
+       protected List<String> fFlowControlTable;
+       protected String fDefaultConnType;
+       protected String fDefaultSerialPort;
+       protected String fDefaultBaudRate;
+       protected String fDefaultDataBits;
+       protected String fDefaultStopBits;
+       protected String fDefaultParity;
+       protected String fDefaultFlowControl;
+
+       public SerialProperties() {
+               setupProperties();
+       }
+       public List<String> getSerialPortTable() {
+               return fSerialPortTable;
+       }
+
+       public List<String> getBaudRateTable() {
+               return fBaudRateTable;
+       }
+
+       public List<String> getDataBitsTable() {
+               return fDataBitsTable;
+       }
+
+       public List<String> getStopBitsTable() {
+               return fStopBitsTable;
+       }
+
+       public List<String> getParityTable() {
+               return fParityTable;
+       }
+
+       public List<String> getFlowControlTable() {
+               return fFlowControlTable;
+       }
+       public String getDefaultConnType() {
+               return fDefaultConnType;
+       }
+
+       public String getDefaultSerialPort() {
+               return fDefaultSerialPort;
+       }
+
+       public String getDefaultBaudRate() {
+               return fDefaultBaudRate;
+       }
+
+       public String getDefaultDataBits() {
+               return fDefaultDataBits;
+       }
+
+       public String getDefaultStopBits() {
+               return fDefaultStopBits;
+       }
+
+       public String getDefaultParity() {
+               return fDefaultParity;
+       }
+
+       public String getDefaultFlowControl() {
+               return fDefaultFlowControl;
+       }
+       public String getDefaultTimeout() {
+               return "5"; //$NON-NLS-1$
+       }
+       protected void setupProperties() {
+               fSerialPortTable = new ArrayList<String>();
+               fBaudRateTable = new ArrayList<String>();
+               fDataBitsTable = new ArrayList<String>();
+               fStopBitsTable = new ArrayList<String>();
+               fParityTable = new ArrayList<String>();
+               fFlowControlTable = new ArrayList<String>();
+               fDefaultConnType = ""; //$NON-NLS-1$
+               fDefaultSerialPort = ""; //$NON-NLS-1$
+               fDefaultBaudRate = ""; //$NON-NLS-1$
+               fDefaultDataBits = ""; //$NON-NLS-1$
+               fDefaultStopBits = ""; //$NON-NLS-1$
+               fDefaultParity = ""; //$NON-NLS-1$
+               fDefaultFlowControl = ""; //$NON-NLS-1$
+
+               fBaudRateTable.add("300"); //$NON-NLS-1$
+               fBaudRateTable.add("1200"); //$NON-NLS-1$
+               fBaudRateTable.add("2400"); //$NON-NLS-1$
+               fBaudRateTable.add("4800"); //$NON-NLS-1$
+               fBaudRateTable.add("9600"); //$NON-NLS-1$
+               fBaudRateTable.add("19200"); //$NON-NLS-1$
+               fBaudRateTable.add("38400"); //$NON-NLS-1$
+               fBaudRateTable.add("57600"); //$NON-NLS-1$
+               fBaudRateTable.add("115200"); //$NON-NLS-1$
+
+               fDataBitsTable.add("5"); //$NON-NLS-1$
+               fDataBitsTable.add("6"); //$NON-NLS-1$
+               fDataBitsTable.add("7"); //$NON-NLS-1$
+               fDataBitsTable.add("8"); //$NON-NLS-1$
+
+               fStopBitsTable.add("1"); //$NON-NLS-1$
+               fStopBitsTable.add("1_5"); //$NON-NLS-1$
+               fStopBitsTable.add("2"); //$NON-NLS-1$
+
+               fParityTable.add("None"); //$NON-NLS-1$
+               fParityTable.add("Even"); //$NON-NLS-1$
+               fParityTable.add("Odd"); //$NON-NLS-1$
+               fParityTable.add("Mark"); //$NON-NLS-1$
+               fParityTable.add("Space"); //$NON-NLS-1$
+
+               fFlowControlTable.add("None"); //$NON-NLS-1$
+               fFlowControlTable.add("RTS/CTS"); //$NON-NLS-1$
+               fFlowControlTable.add("Xon/Xoff"); //$NON-NLS-1$
+
+               fDefaultBaudRate = fBaudRateTable.get(4);
+               fDefaultDataBits = fDataBitsTable.get(3);
+               fDefaultStopBits = fStopBitsTable.get(0);
+               fDefaultParity = fParityTable.get(0);
+               fDefaultFlowControl = fFlowControlTable.get(0);
+
+               Enumeration<CommPortIdentifier> portIdEnum= CommPortIdentifier.getPortIdentifiers();
+               while (portIdEnum.hasMoreElements()) {
+                       CommPortIdentifier identifier = portIdEnum.nextElement();
+                       String strName = identifier.getName();
+                       int nPortType = identifier.getPortType();
+
+                       if (nPortType == CommPortIdentifier.PORT_SERIAL)
+                               fSerialPortTable.add(strName);
+               }
+
+               Collections.sort(fSerialPortTable);
+
+               if (!fSerialPortTable.isEmpty()) {
+                       fDefaultSerialPort = fSerialPortTable.get(0);
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialSettings.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/connector/SerialSettings.java
new file mode 100644 (file)
index 0000000..6a03cb7
--- /dev/null
@@ -0,0 +1,203 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - extracted from TerminalSettings 
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.connector;
+
+import gnu.io.SerialPort;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+
+public class SerialSettings implements ISerialSettings {
+    protected String fSerialPort;
+    protected String fBaudRate;
+    protected String fDataBits;
+    protected String fStopBits;
+    protected String fParity;
+    protected String fFlowControl;
+    protected String fTimeout;
+    final private SerialProperties fProperties=new SerialProperties();
+
+       @Override
+    public String getSerialPort() {
+               return fSerialPort;
+       }
+
+       public void setSerialPort(String strSerialPort) {
+               fSerialPort = strSerialPort;
+       }
+
+       public String getBaudRateString() {
+               return fBaudRate;
+       }
+
+       @Override
+    public int getBaudRate() {
+               int nBaudRate;
+
+               try {
+                       nBaudRate = Integer.parseInt(fBaudRate);
+               } catch (NumberFormatException numberFormatException) {
+                       nBaudRate = 9600;
+               }
+
+               return nBaudRate;
+       }
+
+       public void setBaudRate(String strBaudRate) {
+               fBaudRate = strBaudRate;
+       }
+
+       public String getDataBitsString() {
+               return fDataBits;
+       }
+
+       @Override
+    public int getDataBits() {
+               if (fDataBits.equals("5")) { //$NON-NLS-1$
+                       return SerialPort.DATABITS_5;
+               } else if (fDataBits.equals("6")) { //$NON-NLS-1$
+                       return SerialPort.DATABITS_6;
+               } else if (fDataBits.equals("7")) { //$NON-NLS-1$
+                       return SerialPort.DATABITS_7;
+               } else {
+                       return SerialPort.DATABITS_8;
+               }
+       }
+
+       public void setDataBits(String strDataBits) {
+               fDataBits = strDataBits;
+       }
+
+       public String getStopBitsString() {
+               return fStopBits;
+       }
+
+       @Override
+    public int getStopBits() {
+               if (fStopBits.equals("1_5")) { //$NON-NLS-1$
+                       return SerialPort.STOPBITS_1_5;
+               } else if (fStopBits.equals("2")) { //$NON-NLS-1$
+                       return SerialPort.STOPBITS_2;
+               } else { // 1
+                       return SerialPort.STOPBITS_1;
+               }
+       }
+
+       public void setStopBits(String strStopBits) {
+               fStopBits = strStopBits;
+       }
+
+       public String getParityString() {
+               return fParity;
+       }
+
+       @Override
+    public int getParity() {
+               if (fParity.equals("Even")) //$NON-NLS-1$
+               {
+                       return SerialPort.PARITY_EVEN;
+               } else if (fParity.equals("Odd")) //$NON-NLS-1$
+               {
+                       return SerialPort.PARITY_ODD;
+               } else if (fParity.equals("Mark")) //$NON-NLS-1$
+               {
+                       return SerialPort.PARITY_MARK;
+               } else if (fParity.equals("Space")) //$NON-NLS-1$
+               {
+                       return SerialPort.PARITY_SPACE;
+               } else // None
+               {
+                       return SerialPort.PARITY_NONE;
+               }
+       }
+
+       public void setParity(String strParity) {
+               fParity = strParity;
+       }
+
+       public String getFlowControlString() {
+               return fFlowControl;
+       }
+
+       @Override
+    public int getFlowControl() {
+               if (fFlowControl.equals("RTS/CTS")) //$NON-NLS-1$
+               {
+                       return SerialPort.FLOWCONTROL_RTSCTS_IN;
+               } else if (fFlowControl.equals("Xon/Xoff")) //$NON-NLS-1$
+               {
+                       return SerialPort.FLOWCONTROL_XONXOFF_IN;
+               } else // None
+               {
+                       return SerialPort.FLOWCONTROL_NONE;
+               }
+       }
+
+       public void setFlowControl(String strFlow) {
+               fFlowControl = strFlow;
+       }
+
+       @Override
+    public String getSummary() {
+               return getSerialPort() + ", " + //$NON-NLS-1$
+                       getBaudRateString() + ", " + //$NON-NLS-1$
+                       getDataBitsString() + ", " + //$NON-NLS-1$
+                       getStopBitsString() + ", " + //$NON-NLS-1$
+                       getParityString() + ", " + //$NON-NLS-1$
+                       getFlowControlString();
+       }
+
+       @Override
+    public void load(ISettingsStore store) {
+               fSerialPort = store.get("SerialPort", fProperties.getDefaultSerialPort());//$NON-NLS-1$
+               fBaudRate = store.get("BaudRate", fProperties.getDefaultBaudRate());//$NON-NLS-1$
+               fDataBits = store.get("DataBits", fProperties.getDefaultDataBits());//$NON-NLS-1$
+               fStopBits = store.get("StopBits", fProperties.getDefaultStopBits());//$NON-NLS-1$
+               fParity = store.get("Parity", fProperties.getDefaultParity());//$NON-NLS-1$
+               fFlowControl = store.get("FlowControl", fProperties.getDefaultFlowControl());//$NON-NLS-1$
+               fTimeout = store.get("Timeout",fProperties.getDefaultTimeout()); //$NON-NLS-1$
+       }
+
+       @Override
+    public void save(ISettingsStore store) {
+               store.put("SerialPort", fSerialPort); //$NON-NLS-1$
+               store.put("BaudRate", fBaudRate); //$NON-NLS-1$
+               store.put("DataBits", fDataBits); //$NON-NLS-1$
+               store.put("StopBits", fStopBits); //$NON-NLS-1$
+               store.put("Parity", fParity); //$NON-NLS-1$
+               store.put("FlowControl", fFlowControl); //$NON-NLS-1$
+       }
+
+       public SerialProperties getProperties() {
+               return fProperties;
+       }
+
+       @Override
+    public int getTimeout() {
+               try {
+                       return Integer.parseInt(fTimeout);
+               } catch (NumberFormatException numberFormatException) {
+                       return 10;
+               }
+       }
+       public String getTimeoutString() {
+               return fTimeout;
+       }
+
+       public void setTimeout(String timeout) {
+               fTimeout = timeout;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/controls/SerialConfigurationPanel.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/controls/SerialConfigurationPanel.java
new file mode 100644 (file)
index 0000000..b1f6b66
--- /dev/null
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.controls;
+
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel;
+
+/**
+ * Serial wizard configuration panel implementation.
+ */
+public class SerialConfigurationPanel extends AbstractExtendedConfigurationPanel {
+
+       private SerialLinePanel serialSettingsPage;
+
+       /**
+        * Constructor.
+        *
+        * @param container The configuration panel container or <code>null</code>.
+        */
+       public SerialConfigurationPanel(IConfigurationPanelContainer container) {
+           super(container);
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       public void setupPanel(Composite parent) {
+               Composite panel = new Composite(parent, SWT.NONE);
+               panel.setLayout(new GridLayout());
+               GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+               panel.setLayoutData(data);
+
+               // Create the host selection combo
+               if (isWithoutSelection()) createHostsUI(panel, true);
+
+               serialSettingsPage = new SerialLinePanel(getContainer());
+               serialSettingsPage.setupPanel(panel);
+
+               // Create the encoding selection combo
+               createEncodingUI(panel, true);
+
+               setControl(panel);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map)
+        */
+       @Override
+       public void extractData(Map<String, Object> data) {
+       // set the terminal connector id for serial
+       data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, "org.eclipse.tm.terminal.connector.serial.SerialConnector"); //$NON-NLS-1$
+
+       serialSettingsPage.extractData(data);
+               data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding());
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#fillSettingsForHost(java.lang.String)
+        */
+       @Override
+       protected void fillSettingsForHost(String host){
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#saveSettingsForHost(boolean)
+        */
+       @Override
+       protected void saveSettingsForHost(boolean add){
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
+        */
+       @Override
+    public boolean isValid(){
+               return serialSettingsPage.isValid();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
+        */
+       @Override
+    public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
+               Assert.isNotNull(settings);
+               serialSettingsPage.doSaveWidgetValues(settings, idPrefix);
+               // Save the encodings widget values
+               doSaveEncodingsWidgetValues(settings, idPrefix);
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
+        */
+       @Override
+    public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) {
+               Assert.isNotNull(settings);
+               serialSettingsPage.doRestoreWidgetValues(settings, idPrefix);
+               // Restore the encodings widget values
+               doRestoreEncodingsWidgetValues(settings, idPrefix);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#getHostFromSettings()
+        */
+       @Override
+    protected String getHostFromSettings() {
+               return null;
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#isWithHostList()
+        */
+       @Override
+    public boolean isWithHostList() {
+       return false;
+    }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/controls/SerialLinePanel.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/controls/SerialLinePanel.java
new file mode 100644 (file)
index 0000000..fe760cb
--- /dev/null
@@ -0,0 +1,787 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.controls;
+
+import gnu.io.CommPortIdentifier;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.tm.terminal.connector.serial.activator.UIPlugin;
+import org.eclipse.tm.terminal.connector.serial.interfaces.ITraceIds;
+import org.eclipse.tm.terminal.connector.serial.nls.Messages;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Serial line terminal launcher configuration panel implementation.
+ */
+public class SerialLinePanel extends AbstractConfigurationPanel {
+       public static final String fcDefaultTTYSpeed = "9600"; //$NON-NLS-1$
+       public static final String fcDefaultTTYDeviceWin32 = "COM1"; //$NON-NLS-1$
+       public static final String fcDefaultTTYDeviceSolaris = "/dev/cua/a"; //$NON-NLS-1$
+       public static final String fcDefaultTTYDeviceLinux = "/dev/ttyS0"; //$NON-NLS-1$
+       public static final String fcDefaultTTYDatabits = "8"; //$NON-NLS-1$
+       public static final String fcDefaultTTYParity = "None"; //$NON-NLS-1$
+       public static final String fcDefaultTTYStopbits = "1"; //$NON-NLS-1$
+       public static final String fcDefaultTTYFlowControl = "None"; //$NON-NLS-1$
+       public static final String fcDefaultTTYTimeout = "5"; //$NON-NLS-1$
+       public static final String fcEditableTTYOther = "Other..."; //$NON-NLS-1$
+
+       private static final String[] fcTTYSpeedRates = { "600", //$NON-NLS-1$
+               "1200", //$NON-NLS-1$
+               "2400", //$NON-NLS-1$
+               "4800", //$NON-NLS-1$
+               "9600", //$NON-NLS-1$
+               "14400", //$NON-NLS-1$
+               "19200", //$NON-NLS-1$
+               "38400", //$NON-NLS-1$
+               "57600", //$NON-NLS-1$
+               "115200" //$NON-NLS-1$
+       };
+
+       private static final String[] fcTTYDatabits = {
+               "8", "7" //$NON-NLS-1$ //$NON-NLS-2$
+       };
+
+       private static final String[] fcTTYParity = {
+               "None", "Odd", "Even" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+       };
+
+       private static final String[] fcTTYStopbits = {
+               "1", "2" //$NON-NLS-1$ //$NON-NLS-2$
+       };
+
+       private static final String[] fcTTYFlowControl = {
+               "None", "Hardware", "Software" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+       };
+
+       Label hostTTYDeviceLabel;
+       Combo hostTTYDeviceCombo;
+       Label hostTTYSpeedLabel;
+       Combo hostTTYSpeedCombo;
+       Label hostTTYBitsLabel;
+       Combo hostTTYBitsCombo;
+       Label hostTTYParityLabel;
+       Combo hostTTYParityCombo;
+       Label hostTTYStopbitsLabel;
+       Combo hostTTYStopbitsCombo;
+       Label hostTTYFlowControlLabel;
+       Combo hostTTYFlowControlCombo;
+       Label hostTTYTimeoutLabel;
+       Text  hostTTYTimeoutText;
+
+       // Keep the fInputValidator protected!
+       protected IInputValidator inputValidatorBaud;
+
+       int lastSelected = -1;
+       int lastSelectedBaud = -1;
+
+       /**
+        * Constructor.
+        *
+        * @param container The configuration panel container or <code>null</code>.
+        */
+       public SerialLinePanel(IConfigurationPanelContainer container) {
+               super(container);
+       }
+
+       protected class CustomSerialBaudRateInputValidator implements IInputValidator {
+
+               /* (non-Javadoc)
+                * @see org.eclipse.jface.dialogs.IInputValidator#isValid(java.lang.String)
+                */
+               @Override
+        public String isValid(String newText) {
+                       if (newText != null && newText.trim().length() > 0) {
+                               if (!newText.matches("[0-9]*")) { //$NON-NLS-1$
+                                       return Messages.SerialLinePanel_error_invalidCharactesBaudRate;
+                               }
+                       } else if (newText != null) {
+                               // Empty string is an error without message (see interface)!
+                               return ""; //$NON-NLS-1$
+                       }
+                       return null;
+               }
+       }
+
+       /**
+        * Returns the input validator to be used for checking the custom serial
+        * baud rate for basic plausibility.
+        */
+       protected IInputValidator getCustomSerialBaudRateInputValidator() {
+               if (inputValidatorBaud == null) {
+                       inputValidatorBaud = new CustomSerialBaudRateInputValidator();
+               }
+               return inputValidatorBaud;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+    public void setupPanel(Composite parent) {
+               Assert.isNotNull(parent);
+
+               Composite panel = new Composite(parent, SWT.NONE);
+               GridLayout layout = new GridLayout();
+               layout.marginHeight = 0; layout.marginWidth = 0;
+               panel.setLayout(layout);
+               panel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+               panel.setBackground(parent.getBackground());
+
+               setControl(panel);
+
+               final Composite client = new Composite(parent, SWT.NONE);
+               Assert.isNotNull(client);
+               client.setLayout(new GridLayout(2, false));
+               client.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+               client.setBackground(panel.getBackground());
+
+               // Host TTY settings
+               hostTTYDeviceLabel = new Label(client, SWT.NONE);
+               hostTTYDeviceLabel.setText(Messages.SerialLinePanel_hostTTYDevice_label);
+
+               hostTTYDeviceCombo = new Combo(client, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
+               hostTTYDeviceCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               hostTTYDeviceCombo.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               // if the user selected the special editable device, show a dialog asking for the device name
+                               if (fcEditableTTYOther.equals(hostTTYDeviceCombo.getText())) {
+                                       List<String> tty = new ArrayList<String>();
+                                       List<String> tcp = new ArrayList<String>();
+                                       String selected = hostTTYDeviceCombo.getItem(lastSelected);
+                                       for (String device : hostTTYDeviceCombo.getItems()) {
+                                               if (!device.equalsIgnoreCase(fcEditableTTYOther)) {
+                                                       if (device.toUpperCase().startsWith("TCP:")) { //$NON-NLS-1$
+                                                               tcp.add(device);
+                                                       }
+                                                       else {
+                                                               tty.add(device);
+                                                       }
+                                               }
+                                       }
+                                       SerialPortAddressDialog dialog = new SerialPortAddressDialog(client.getShell(), selected, tty, tcp);
+                                       if (dialog.open() == Window.OK) {
+                                               // retrieve the custom serial device name and set it to the combobox drop
+                                               String device = dialog.getData();
+                                               if (device != null && device.trim().length() > 0) {
+                                                       hostTTYDeviceCombo.add(device.trim());
+                                                       hostTTYDeviceCombo.setText(device.trim());
+                                               } else if (lastSelected != -1) {
+                                                       hostTTYDeviceCombo.setText(hostTTYDeviceCombo.getItem(lastSelected));
+                                               }
+                                       } else if (lastSelected != -1){
+                                               hostTTYDeviceCombo.setText(hostTTYDeviceCombo.getItem(lastSelected));
+                                       }
+                               }
+                               lastSelected = hostTTYDeviceCombo.getSelectionIndex();
+
+                               IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
+                               if (container != null) container.validate();
+                       }
+               });
+
+               hostTTYSpeedLabel = new Label(client, SWT.NONE);
+               hostTTYSpeedLabel.setText(Messages.SerialLinePanel_hostTTYSpeed_label);
+
+               hostTTYSpeedCombo = new Combo(client, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
+               hostTTYSpeedCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               hostTTYSpeedCombo.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               // if the user selected the special editable baud rate, show a dialog asking for the baud rate
+                               if (fcEditableTTYOther.equals(hostTTYSpeedCombo.getText())) {
+                                       InputDialog dialog = new InputDialog(getControl().getShell(),
+                                                                            Messages.SerialLinePanel_customSerialBaudRate_title,
+                                                                            Messages.SerialLinePanel_customSerialBaudRate_message,
+                                                                            "", //$NON-NLS-1$
+                                                                            getCustomSerialBaudRateInputValidator());
+                                       if (dialog.open() == Window.OK) {
+                                               // retrieve the custom serial device name and set it to the combobox drop
+                                               String device = dialog.getValue();
+                                               if (device != null && device.trim().length() > 0) {
+                                                       int index = hostTTYSpeedCombo.indexOf(fcEditableTTYOther);
+                                                       if (index != -1 && index == hostTTYSpeedCombo.getItemCount() - 1) {
+                                                               hostTTYSpeedCombo.add(device.trim());
+                                                       } else if (index != -1) {
+                                                               hostTTYSpeedCombo.setItem(index + 1, device.trim());
+                                                       }
+                                                       hostTTYSpeedCombo.setText(device.trim());
+                                               } else if (lastSelectedBaud != -1) {
+                                                       hostTTYSpeedCombo.setText(hostTTYSpeedCombo.getItem(lastSelectedBaud));
+                                               }
+                                       } else if (lastSelectedBaud != -1){
+                                               hostTTYSpeedCombo.setText(hostTTYSpeedCombo.getItem(lastSelectedBaud));
+                                       }
+                               }
+                               lastSelectedBaud = hostTTYSpeedCombo.getSelectionIndex();
+
+                               IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
+                               if (container != null) container.validate();
+                       }
+               });
+
+               // Query the list of available serial port interfaces.
+               UIPlugin.getTraceHandler().trace("SerialLinePanel: Start quering the available comm ports.", ITraceIds.TRACE_SERIAL_LINE_PANEL, this); //$NON-NLS-1$
+
+               // Query the serial devices now.
+               BusyIndicator.showWhile(getControl().getDisplay(), new Runnable() {
+                       @Override
+                       public void run() {
+                               queryAvailableSerialDevices();
+                       }
+               });
+
+               // add a special device which is being the editable one if requested at the end of the list
+               hostTTYDeviceCombo.add(fcEditableTTYOther);
+
+               if (hostTTYDeviceCombo.indexOf(getDefaultHostTTYDevice()) != -1) {
+                       hostTTYDeviceCombo.setText(getDefaultHostTTYDevice());
+               } else {
+                       if ("".equals(hostTTYDeviceCombo.getText()) && hostTTYDeviceCombo.getItemCount() > 0) { //$NON-NLS-1$
+                               // USI: For SWT-GTK we need the special empty entry as well. Otherwise we will have problems
+                               // getting the selection changed event!
+                               if (hostTTYDeviceCombo.getItemCount() == 1
+                                       && fcEditableTTYOther.equals(hostTTYDeviceCombo.getItem(0))) {
+                                       hostTTYDeviceCombo.add("", 0); //$NON-NLS-1$
+                               }
+                               hostTTYDeviceCombo.setText(hostTTYDeviceCombo.getItem(0));
+                       }
+               }
+
+               if (hostTTYDeviceCombo.getItemCount() > 0) {
+                       hostTTYDeviceCombo.setEnabled(true);
+               } else {
+                       hostTTYDeviceCombo.setEnabled(false);
+               }
+               lastSelected = hostTTYDeviceCombo.getSelectionIndex();
+
+               for (String fcTTYSpeedRate : fcTTYSpeedRates) {
+                       hostTTYSpeedCombo.add(fcTTYSpeedRate);
+               }
+               hostTTYSpeedCombo.add(fcEditableTTYOther);
+
+               hostTTYSpeedCombo.setText(fcDefaultTTYSpeed);
+               lastSelectedBaud = hostTTYSpeedCombo.getSelectionIndex();
+
+               // add the advanced serial options
+               hostTTYBitsLabel = new Label(client, SWT.NONE);
+               hostTTYBitsLabel.setText(Messages.SerialLinePanel_hostTTYDatabits_label);
+               hostTTYBitsCombo = new Combo(client, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
+               hostTTYBitsCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               hostTTYBitsCombo.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
+                               if (container != null) container.validate();
+                       }
+               });
+
+               for (String fcTTYDatabit : fcTTYDatabits) {
+                       hostTTYBitsCombo.add(fcTTYDatabit);
+               }
+               hostTTYBitsCombo.setText(fcDefaultTTYDatabits);
+
+               hostTTYParityLabel = new Label(client, SWT.NONE);
+               hostTTYParityLabel.setText(Messages.SerialLinePanel_hostTTYParity_label);
+               hostTTYParityCombo = new Combo(client, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
+               hostTTYParityCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               hostTTYParityCombo.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
+                               if (container != null) container.validate();
+                       }
+               });
+
+               for (String element : fcTTYParity) {
+                       hostTTYParityCombo.add(element);
+               }
+               hostTTYParityCombo.setText(fcDefaultTTYParity);
+
+               hostTTYStopbitsLabel = new Label(client, SWT.NONE);
+               hostTTYStopbitsLabel.setText(Messages.SerialLinePanel_hostTTYStopbits_label);
+               hostTTYStopbitsCombo = new Combo(client, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
+               hostTTYStopbitsCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               hostTTYStopbitsCombo.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
+                               if (container != null) container.validate();
+                       }
+               });
+
+               for (String fcTTYStopbit : fcTTYStopbits) {
+                       hostTTYStopbitsCombo.add(fcTTYStopbit);
+               }
+               hostTTYStopbitsCombo.setText(fcDefaultTTYStopbits);
+
+               hostTTYFlowControlLabel = new Label(client, SWT.NONE);
+               hostTTYFlowControlLabel.setText(Messages.SerialLinePanel_hostTTYFlowControl_label);
+               hostTTYFlowControlCombo = new Combo(client, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
+               hostTTYFlowControlCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               hostTTYFlowControlCombo.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
+                               if (container != null) container.validate();
+                       }
+               });
+
+               for (String element : fcTTYFlowControl) {
+                       hostTTYFlowControlCombo.add(element);
+               }
+               hostTTYFlowControlCombo.setText(fcDefaultTTYFlowControl);
+
+               hostTTYTimeoutLabel = new Label(client, SWT.NONE);
+               hostTTYTimeoutLabel.setText(Messages.SerialLinePanel_hostTTYTimeout_label);
+               hostTTYTimeoutText = new Text(client, SWT.SINGLE | SWT.BORDER);
+               hostTTYTimeoutText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               hostTTYTimeoutText.addModifyListener(new ModifyListener() {
+                       @Override
+                       public void modifyText(ModifyEvent e) {
+                               IConfigurationPanelContainer container = SerialLinePanel.this.getContainer();
+                               if (container != null) container.validate();
+                       }
+               });
+               hostTTYTimeoutText.setText(fcDefaultTTYTimeout);
+       }
+
+       /**
+        * Query the list of serial devices.
+        */
+       protected void queryAvailableSerialDevices() {
+               // Avoid printing the library version output to stdout if the platform
+               // is not in debug mode.
+               String prop = System.getProperty("gnu.io.rxtx.NoVersionOutput"); //$NON-NLS-1$
+               if (prop == null && !Platform.inDebugMode()) {
+                       System.setProperty("gnu.io.rxtx.NoVersionOutput", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+               }
+
+               // java.lang.UnsatisfiedLinkError: ../plugins/gnu.io.rxtx.solaris.sparc_2.1.7.200702281917/os/solaris/sparc/librxtxSerial.so:
+               //       Can't load Sparc 32-bit .so on a Sparc 32-bit platform
+               // May happen in CommPortIdentifier static constructor!
+               try {
+            Enumeration<CommPortIdentifier> ttyPortIds = CommPortIdentifier.getPortIdentifiers();
+                       if (!ttyPortIds.hasMoreElements()) {
+                               UIPlugin.getTraceHandler().trace("SerialLinePanel: NO comm ports available at all!", ITraceIds.TRACE_SERIAL_LINE_PANEL, this); //$NON-NLS-1$
+                       }
+                       final List<String> ports = new ArrayList<String>();
+                       while (ttyPortIds.hasMoreElements()) {
+                               CommPortIdentifier port = ttyPortIds.nextElement();
+                               String type = "unknown"; //$NON-NLS-1$
+                               if (port.getPortType() == CommPortIdentifier.PORT_PARALLEL) {
+                                       type = "parallel"; //$NON-NLS-1$
+                               }
+                               if (port.getPortType() == CommPortIdentifier.PORT_SERIAL) {
+                                       type = "serial"; //$NON-NLS-1$
+                               }
+                               UIPlugin.getTraceHandler().trace("SerialLinePanel: Found comm port: name='" + port.getName() + "', type='" + type, ITraceIds.TRACE_SERIAL_LINE_PANEL, this); //$NON-NLS-1$ //$NON-NLS-2$
+                               // only add serial ports
+                               if (port.getPortType() == CommPortIdentifier.PORT_SERIAL) {
+                                       UIPlugin.getTraceHandler().trace("SerialLinePanel: Adding found serial comm port to combo!", ITraceIds.TRACE_SERIAL_LINE_PANEL, this); //$NON-NLS-1$
+                                       if (!ports.contains(port.getName())) {
+                                               ports.add(port.getName());
+                                       }
+                               }
+                       }
+                       if (!ports.isEmpty()) {
+                               Collections.sort(ports);
+                               // This method may executed in a separate thread. We must spawn back
+                               // into the UI thread to execute the adding of the ports to the control.
+                               PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
+                                       @Override
+                    public void run() {
+                                               for (String port : ports) {
+                                                       hostTTYDeviceCombo.add(port);
+                                               }
+                                       }
+                               });
+                       }
+               } catch (UnsatisfiedLinkError e) {
+                       IStatus status = new Status(IStatus.WARNING, UIPlugin.getUniqueIdentifier(),
+                                                                               Messages.SerialLinePanel_warning_FailedToLoadSerialPorts, e);
+                       UIPlugin.getDefault().getLog().log(status);
+               } catch (NoClassDefFoundError e) {
+                       // The NoClassDefFoundError happens the second time if the load of the library
+                       // failed once! We do ignore this error completely!
+               }
+       }
+
+       /**
+        * Enables or disables the configuration panels controls.
+        *
+        * @param enabled Specify <code>true</code> to enable the controls, <code>false</code> otherwise.
+        */
+       @Override
+    public void setEnabled(boolean enabled) {
+               hostTTYDeviceLabel.setEnabled(enabled);
+               hostTTYDeviceCombo.setEnabled(enabled);
+               hostTTYSpeedLabel.setEnabled(enabled);
+               hostTTYSpeedCombo.setEnabled(enabled);
+               hostTTYBitsLabel.setEnabled(enabled);
+               hostTTYBitsCombo.setEnabled(enabled);
+               hostTTYParityLabel.setEnabled(enabled);
+               hostTTYParityCombo.setEnabled(enabled);
+               hostTTYStopbitsLabel.setEnabled(enabled);
+               hostTTYStopbitsCombo.setEnabled(enabled);
+               hostTTYFlowControlLabel.setEnabled(enabled);
+               hostTTYFlowControlCombo.setEnabled(enabled);
+       }
+
+       /**
+        * The name of the serial ports differ between the host platforms, so we have to
+        * detect the default host TTY device based on the host platform.
+        */
+       public String getDefaultHostTTYDevice() {
+               String osName = System.getProperty("os.name"); //$NON-NLS-1$
+               // Linux ?
+               if (osName.equalsIgnoreCase("Linux")) { //$NON-NLS-1$
+                       return fcDefaultTTYDeviceLinux;
+               }
+               // Solaris ?
+               if (osName.equalsIgnoreCase("SunOS")) { //$NON-NLS-1$
+                       return fcDefaultTTYDeviceSolaris;
+               }
+               // Windows ?
+               if (osName.toLowerCase().startsWith("windows")) { //$NON-NLS-1$
+                       return fcDefaultTTYDeviceWin32;
+               }
+               return ""; //$NON-NLS-1$
+       }
+
+       /**
+        * Returns the default value for the serial port speed setting in bit/s
+        */
+       public String getDefaultHostTTYSpeed() {
+               return fcDefaultTTYSpeed;
+       }
+
+       /**
+        * Returns the default value for the serial port data bits setting
+        */
+       public String getDefaultHostTTYDatabits() {
+               return fcDefaultTTYDatabits;
+       }
+
+       /**
+        * Returns the default value for the serial port parity setting
+        */
+       public String getDefaultHostTTYParity() {
+               return fcDefaultTTYParity;
+       }
+
+       /**
+        * Returns the default value for the serial port stop bits setting
+        */
+       public String getDefaultHostTTYStopbits() {
+               return fcDefaultTTYStopbits;
+       }
+
+       /**
+        * Returns the default value for the serial port flow control setting
+        */
+       public String getDefaultHostTTYFlowControl() {
+               return fcDefaultTTYFlowControl;
+       }
+
+       /**
+        * Returns the default value for the serial port timeout setting.
+        */
+       public String getDefaultHostTTYTimeout() {
+               return fcDefaultTTYTimeout;
+       }
+
+       /**
+        * Set the text to the combo if available as selectable option.
+        *
+        * @param combo The combo box control. Must not be <code>null</code>.
+        * @param value The value to set. Must not be <code>null</code>.
+        */
+       protected void doSetTextInCombo(Combo combo, String value) {
+               Assert.isNotNull(combo);
+               Assert.isNotNull(value);
+               if (combo.indexOf(value) != 1) {
+                       combo.setText(value);
+               }
+       }
+
+       /**
+        * Select the given tty device if available.
+        *
+        * @param value The tty device to select. Must not be <code>null</code>.
+        */
+       public void setSelectedTTYDevice(String value) {
+               doSetTextInCombo(hostTTYDeviceCombo, value);
+       }
+
+       /**
+        * Select the given tty device if available. The method
+        * will do nothing if the specified index is invalid.
+        *
+        * @param index The index of the tty device to select.
+        */
+       public void setSelectedTTYDevice(int index) {
+               if (index >= 0 && index < hostTTYDeviceCombo.getItemCount()) {
+                       hostTTYDeviceCombo.setText(hostTTYDeviceCombo.getItem(index));
+               }
+       }
+
+       /**
+        * Select the given tty device speed if available.
+        *
+        * @param value The tty device speed to select. Must not be <code>null</code>.
+        */
+       public void setSelectedTTYSpeed(String value) {
+               doSetTextInCombo(hostTTYSpeedCombo, value);
+       }
+
+       /**
+        * Select the given tty device data bit configuration if available.
+        *
+        * @param value The tty device data bit configuration to select. Must not be <code>null</code>.
+        */
+       public void setSelectedTTYDatabits(String value) {
+               doSetTextInCombo(hostTTYBitsCombo, value);
+       }
+
+       /**
+        * Select the given tty device parity configuration if available.
+        *
+        * @param value The tty device parity configuration to select. Must not be <code>null</code>.
+        */
+       public void setSelectedTTYParity(String value) {
+               doSetTextInCombo(hostTTYParityCombo, value);
+       }
+
+       /**
+        * Select the given tty device stop bit configuration if available.
+        *
+        * @param value The tty device stop bit configuration to select. Must not be <code>null</code>.
+        */
+       public void setSelectedTTYStopbits(String value) {
+               doSetTextInCombo(hostTTYStopbitsCombo, value);
+       }
+
+       /**
+        * Select the given tty device flow control configuration if available.
+        *
+        * @param value The tty device flow control configuration to select. Must not be <code>null</code>.
+        */
+       public void setSelectedTTYFlowControl(String value) {
+               doSetTextInCombo(hostTTYFlowControlCombo, value);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
+        */
+       @Override
+       public boolean isValid() {
+               String selectedTTYDevice = hostTTYDeviceCombo.getText();
+               if (selectedTTYDevice == null || selectedTTYDevice.trim().length() == 0) {
+                       setMessage(Messages.SerialLinePanel_error_emptyHostTTYDevice, IMessageProvider.ERROR);
+                       return false;
+               }
+
+               if (fcEditableTTYOther.equals(selectedTTYDevice)) {
+                       setMessage(Messages.SerialLinePanel_info_editableTTYDeviceSelected, IMessageProvider.INFORMATION);
+                       return false;
+               }
+
+               String selectedTTYSpeedRate = hostTTYSpeedCombo.getText();
+               if (selectedTTYSpeedRate == null || selectedTTYSpeedRate.trim().length() == 0) {
+                       setMessage(Messages.SerialLinePanel_error_emptyHostTTYSpeedRate, IMessageProvider.ERROR);
+                       return false;
+               }
+
+               if (fcEditableTTYOther.equals(selectedTTYSpeedRate)) {
+                       setMessage(Messages.SerialLinePanel_info_editableTTYBaudRateSelected, IMessageProvider.INFORMATION);
+                       return false;
+               }
+
+               String option = hostTTYBitsCombo.getText();
+               if (option == null || option.trim().length() == 0) {
+                       setMessage(Messages.SerialLinePanel_error_emptyHostTTYDatabits, IMessageProvider.ERROR);
+                       return false;
+               }
+
+               option = hostTTYParityCombo.getText();
+               if (option == null || option.trim().length() == 0) {
+                       setMessage(Messages.SerialLinePanel_error_emptyHostTTYParity, IMessageProvider.ERROR);
+                       return false;
+               }
+
+               option = hostTTYStopbitsCombo.getText();
+               if (option == null || option.trim().length() == 0) {
+                       setMessage(Messages.SerialLinePanel_error_emptyHostTTYStopbits, IMessageProvider.ERROR);
+                       return false;
+               }
+
+               option = hostTTYFlowControlCombo.getText();
+               if (option == null || option.trim().length() == 0) {
+                       setMessage(Messages.SerialLinePanel_error_emptyHostTTYFlowControl, IMessageProvider.ERROR);
+                       return false;
+               }
+
+               option = hostTTYTimeoutText.getText();
+               if (option == null || option.trim().length() == 0) {
+                       setMessage(Messages.SerialLinePanel_error_emptyHostTTYFlowControl, IMessageProvider.ERROR);
+                       return false;
+               }
+
+               return true;
+       }
+
+       private final String fcSelectedTTYDeviceSlotId = "SerialLinePanel.selectedTTYDevice." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
+       private final String fcSelectedTTYSpeedRateSlotId = "SerialLinePanel.selectedTTYSpeedRate." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
+       private final String fcSelectedTTYDatabitsSlotId = "SerialLinePanel.selectedTTYDatabits." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
+       private final String fcSelectedTTYParitySlotId = "SerialLinePanel.selectedTTYParity." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
+       private final String fcSelectedTTYStopbitsSlotId = "SerialLinePanel.selectedTTYStopbits." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
+       private final String fcSelectedTTYFlowControlSlotId = "SerialLinePanel.selectedTTYFlowControl." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
+       private final String fcSelectedTTYTimeoutSlotId = "SerialLinePanel.selectedTTYTimeout." + System.getProperty("os.name"); //$NON-NLS-1$ //$NON-NLS-2$
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
+        */
+       @Override
+       public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) {
+               Assert.isNotNull(settings);
+
+               String selectedTTYDevice = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYDeviceSlotId, idPrefix));
+               if (selectedTTYDevice != null && selectedTTYDevice.trim().length() > 0) {
+                       if (hostTTYDeviceCombo.indexOf(selectedTTYDevice) != -1) {
+                               hostTTYDeviceCombo.setText(selectedTTYDevice);
+                       }
+               }
+
+               String selectedTTYSpeedRate = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYSpeedRateSlotId, idPrefix));
+               if (selectedTTYSpeedRate != null && selectedTTYSpeedRate.trim().length() > 0) {
+                       if (hostTTYSpeedCombo.indexOf(selectedTTYSpeedRate) != -1) {
+                               hostTTYSpeedCombo.setText(selectedTTYSpeedRate);
+                       }
+               }
+
+               String option = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYDatabitsSlotId, idPrefix));
+               if (option != null && option.trim().length() > 0 && hostTTYBitsCombo.indexOf(option) != -1) {
+                       hostTTYBitsCombo.setText(option);
+               }
+
+               option = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYParitySlotId, idPrefix));
+               if (option != null && option.trim().length() > 0 && hostTTYParityCombo.indexOf(option) != -1) {
+                       hostTTYParityCombo.setText(option);
+               }
+
+               option = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYStopbitsSlotId, idPrefix));
+               if (option != null && option.trim().length() > 0 && hostTTYStopbitsCombo.indexOf(option) != -1) {
+                       hostTTYStopbitsCombo.setText(option);
+               }
+
+               option = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYFlowControlSlotId, idPrefix));
+               if (option != null && option.trim().length() > 0 && hostTTYFlowControlCombo.indexOf(option) != -1) {
+                       hostTTYFlowControlCombo.setText(option);
+               }
+
+               option = settings.get(prefixDialogSettingsSlotId(fcSelectedTTYTimeoutSlotId, idPrefix));
+               if (option != null && option.trim().length() > 0 && !option.equals(hostTTYTimeoutText.getText())) {
+                       hostTTYTimeoutText.setText(option);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
+        */
+       @Override
+       public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
+               Assert.isNotNull(settings);
+
+               settings.put(prefixDialogSettingsSlotId(fcSelectedTTYDeviceSlotId, idPrefix), hostTTYDeviceCombo.getText());
+               settings.put(prefixDialogSettingsSlotId(fcSelectedTTYSpeedRateSlotId, idPrefix), hostTTYSpeedCombo.getText());
+
+               settings.put(prefixDialogSettingsSlotId(fcSelectedTTYDatabitsSlotId, idPrefix), hostTTYBitsCombo.getText());
+               settings.put(prefixDialogSettingsSlotId(fcSelectedTTYParitySlotId, idPrefix), hostTTYParityCombo.getText());
+               settings.put(prefixDialogSettingsSlotId(fcSelectedTTYStopbitsSlotId, idPrefix), hostTTYStopbitsCombo.getText());
+               settings.put(prefixDialogSettingsSlotId(fcSelectedTTYFlowControlSlotId, idPrefix), hostTTYFlowControlCombo.getText());
+               settings.put(prefixDialogSettingsSlotId(fcSelectedTTYTimeoutSlotId, idPrefix), hostTTYTimeoutText.getText());
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setupData(java.util.Map)
+        */
+       @Override
+       public void setupData(Map<String, Object> data) {
+               if (data == null) return;
+
+               hostTTYDeviceCombo.setText((String)data.get(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE));
+               hostTTYSpeedCombo.setText((String)data.get(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE));
+
+               hostTTYBitsCombo.setText((String)data.get(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS));
+               hostTTYParityCombo.setText((String)data.get(ITerminalsConnectorConstants.PROP_SERIAL_PARITY));
+               hostTTYStopbitsCombo.setText((String)data.get(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS));
+               hostTTYFlowControlCombo.setText((String)data.get(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL));
+
+               Object value = data.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
+               if (value instanceof Integer) {
+                       hostTTYTimeoutText.setText(((Integer)value).toString());
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map)
+        */
+       @Override
+       public void extractData(Map<String, Object> data) {
+               if (data == null) return;
+
+                       data.put(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE, hostTTYDeviceCombo.getText());
+                       data.put(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE, hostTTYSpeedCombo.getText());
+
+                       data.put(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS, hostTTYBitsCombo.getText());
+                       data.put(ITerminalsConnectorConstants.PROP_SERIAL_PARITY, hostTTYParityCombo.getText());
+                       data.put(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS, hostTTYStopbitsCombo.getText());
+                       data.put(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL, hostTTYFlowControlCombo.getText());
+
+                       if (hostTTYTimeoutText.getText() != null) {
+                               Integer timeout = null;
+                               try {
+                                       timeout = Integer.decode(hostTTYTimeoutText.getText());
+                               } catch (NumberFormatException e) { /* ignored on purpose */ }
+                               if (timeout != null) data.put(ITerminalsConnectorConstants.PROP_TIMEOUT, timeout);
+                               else data.remove(ITerminalsConnectorConstants.PROP_TIMEOUT);
+                       }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/controls/SerialPortAddressDialog.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/controls/SerialPortAddressDialog.java
new file mode 100644 (file)
index 0000000..52ff590
--- /dev/null
@@ -0,0 +1,689 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.controls;
+
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.tm.terminal.connector.serial.activator.UIPlugin;
+import org.eclipse.tm.terminal.connector.serial.nls.Messages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Serial line port or address dialog.
+ */
+public class SerialPortAddressDialog extends TitleAreaDialog implements IMessageProvider {
+       private String contextHelpId = null;
+
+       private String message;
+       private int messageType;
+       private String errorMessage;
+       private String title;
+
+       // The default message is shown to the user if no other message is set
+       private String defaultMessage;
+       private int defaultMessageType;
+
+       Button ttyControlSelector;
+       Combo ttyControl;
+       Button tcpControlSelector;
+       Combo addressControl;
+       Combo portControl;
+       Label portLabel;
+
+       List<String> ttyHistory;
+       List<String> tcpHistory;
+
+       String data = null;
+
+       // regular expressions for validator
+       /* default */ static final String IP_CHARACTERS_REGEX = "[0-9][0-9\\.]*"; //$NON-NLS-1$
+       /* default */ static final String IP_FRAGMENT_REGEX = "([0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])"; //$NON-NLS-1$
+       /* default */ static final String IP_REGEX = IP_FRAGMENT_REGEX + "(\\." + IP_FRAGMENT_REGEX + "){3}[ ]*"; //$NON-NLS-1$ //$NON-NLS-2$
+
+       // RFC 1034 - ftp://ftp.rfc-editor.org/in-notes/std/std13.txt
+       /* default */ static final String NAME_CHARACTERS_REGEX = "[a-zA-Z][0-9a-zA-Z\\-_\\.]*"; //$NON-NLS-1$
+       // characters that can be set at the beginning
+       /* default */ static final String NAME_START_REGEX = "[a-zA-Z]"; //$NON-NLS-1$
+       // characters that can be set after the starting character
+       /* default */ static final String NAME_FOLLOW_REGEX = "[a-zA-Z0-9-_]"; //$NON-NLS-1$
+       // characters that can be set at the end
+       /* default */ static final String NAME_END_REGEX = "[a-zA-Z0-9]"; //$NON-NLS-1$
+       // single name fragment
+       /* default */ static final String NAME_FRAGMENT_REGEX = "(" + NAME_START_REGEX + "(" + NAME_FOLLOW_REGEX + "*" + NAME_END_REGEX + ")?)"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+
+       /* default */ static final String NAME_REGEX = NAME_FRAGMENT_REGEX + "(\\." + NAME_FRAGMENT_REGEX + ")*[ ]*"; //$NON-NLS-1$ //$NON-NLS-2$
+
+       /**
+        * Constructor.
+        * @param parentShell
+        */
+       public SerialPortAddressDialog(Shell parentShell, String selected, List<String> ttyHistory, List<String> tcpHistory) {
+               super(parentShell);
+               this.ttyHistory = ttyHistory;
+               this.tcpHistory = tcpHistory;
+               this.data = selected;
+
+               this.contextHelpId = UIPlugin.getUniqueIdentifier() + ".SerialPortAddressDialog"; //$NON-NLS-1$
+               setHelpAvailable(true);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.Dialog#isResizable()
+        */
+       @Override
+       protected boolean isResizable() {
+               return true;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.Dialog#create()
+        */
+       @Override
+       public void create() {
+               super.create();
+
+               // If the dialog got set a message, make sure the message is really shown
+               // to the user from the beginning.
+               if (isMessageSet()) {
+                       if (errorMessage != null) {
+                               super.setErrorMessage(errorMessage);
+                       }
+                       else {
+                               super.setMessage(message, messageType);
+                       }
+               } else if (defaultMessage != null) {
+                       // Default message set
+                       super.setMessage(defaultMessage, defaultMessageType);
+               }
+
+               // If the dialog got set a title, make sure the title is shown
+               if (title != null) {
+                       super.setTitle(title);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       protected final Control createDialogArea(Composite parent) {
+               if (contextHelpId != null) {
+                       PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, contextHelpId);
+               }
+
+               // Let the super implementation create the dialog area control
+               Control control = super.createDialogArea(parent);
+               // Setup the inner panel as scrollable composite
+               if (control instanceof Composite) {
+                       ScrolledComposite sc = new ScrolledComposite((Composite)control, SWT.V_SCROLL);
+
+                       GridLayout layout = new GridLayout(1, true);
+                       layout.marginHeight = 0; layout.marginWidth = 0;
+                       layout.verticalSpacing = 0; layout.horizontalSpacing = 0;
+
+                       sc.setLayout(layout);
+                       sc.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
+
+                       sc.setExpandHorizontal(true);
+                       sc.setExpandVertical(true);
+
+                       Composite composite = new Composite(sc, SWT.NONE);
+                       composite.setLayout(new GridLayout());
+
+                       // Setup the dialog area content
+                       createDialogAreaContent(composite);
+
+                       sc.setContent(composite);
+                       sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+
+                       // Return the scrolled composite as new dialog area control
+                       control = sc;
+               }
+
+               return control;
+       }
+
+       /**
+        * Creates the dialog area content.
+        *
+        * @param parent The parent composite. Must not be <code>null</code>.
+        */
+    protected void createDialogAreaContent(Composite parent) {
+       Assert.isNotNull(parent);
+
+               setDialogTitle(Messages.SerialPortAddressDialog_dialogtitle);
+               setTitle(Messages.SerialPortAddressDialog_title);
+
+               Composite ttyComp = new Composite(parent, SWT.NONE);
+               GridLayout layout = new GridLayout();
+               ttyComp.setLayout(layout);
+               GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+               layoutData.widthHint = 250;
+               ttyComp.setLayoutData(layoutData);
+
+               Composite panel = new Composite(ttyComp, SWT.NONE);
+               layout = new GridLayout(2, false);
+               layout.marginHeight = 0; layout.marginWidth = 0;
+               panel.setLayout(layout);
+               layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+               panel.setLayoutData(layoutData);
+
+               ttyControlSelector = new Button(panel, SWT.RADIO);
+               ttyControlSelector.setText(Messages.SerialLinePanel_hostTTYDevice_label);
+               layoutData = new GridData(SWT.LEAD, SWT.CENTER, false, false);
+               ttyControlSelector.setLayoutData(layoutData);
+               ttyControlSelector.setSelection(true);
+               ttyControlSelector.addSelectionListener(new SelectionAdapter(){
+                       @Override
+            public void widgetSelected(SelectionEvent e) {
+                               boolean selected = ttyControlSelector.getSelection();
+                               setTTYControlEnabled(selected);
+                               setTCPControlEnabled(!selected);
+                               onModify();
+                       }
+               });
+
+               ttyControl = new Combo(panel, SWT.DROP_DOWN);
+               layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
+               ttyControl.setLayoutData(layoutData);
+               ttyControl.addModifyListener(new ModifyListener(){
+                       @Override
+            public void modifyText(ModifyEvent e) {
+                               onModify();
+                       }
+               });
+
+               parent.getDisplay().asyncExec(new Runnable() {
+                       @Override
+            public void run() {
+                               boolean enable = ttyHistory != null && ttyHistory.contains(data);
+                               setTTYControlEnabled(enable);
+                               setTCPControlEnabled(!enable);
+                               onModify();
+                       }
+               });
+
+               Composite tcpComp = new Composite(parent, SWT.NONE);
+               layout = new GridLayout(2, true);
+               tcpComp.setLayout(layout);
+               layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+               tcpComp.setLayoutData(layoutData);
+
+               Composite tcpAddrComp = new Composite(tcpComp, SWT.NONE);
+               layout = new GridLayout(2, false);
+               layout.marginWidth = 0; layout.marginHeight = 0;
+               tcpAddrComp.setLayout(layout);
+               layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+               tcpAddrComp.setLayoutData(layoutData);
+
+               tcpControlSelector = new Button(tcpAddrComp, SWT.RADIO);
+               tcpControlSelector.setText(Messages.SerialPortAddressDialog_address);
+               layoutData = new GridData(SWT.LEAD, SWT.CENTER, false, false);
+               tcpControlSelector.setLayoutData(layoutData);
+               tcpControlSelector.setSelection(false);
+               tcpControlSelector.addSelectionListener(new SelectionAdapter(){
+                       @Override
+            public void widgetSelected(SelectionEvent e) {
+                               boolean selected = tcpControlSelector.getSelection();
+                               setTTYControlEnabled(!selected);
+                               setTCPControlEnabled(selected);
+                               onModify();
+                       }
+               });
+
+               addressControl = new Combo(tcpAddrComp, SWT.DROP_DOWN);
+               layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
+               addressControl.setLayoutData(layoutData);
+               addressControl.addModifyListener(new ModifyListener(){
+                       @Override
+            public void modifyText(ModifyEvent e) {
+                               onModify();
+                       }
+               });
+
+               Composite tcpPortComp = new Composite(tcpComp, SWT.NONE);
+               layout = new GridLayout(2, false);
+               layout.marginWidth = 0; layout.marginHeight = 0;
+               tcpPortComp.setLayout(layout);
+               layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+               tcpPortComp.setLayoutData(layoutData);
+
+               portLabel = new Label(tcpPortComp, SWT.HORIZONTAL);
+               portLabel.setText(Messages.SerialPortAddressDialog_port);
+               layoutData = new GridData(SWT.LEAD, SWT.CENTER, false, false);
+               portLabel.setLayoutData(layoutData);
+
+               portControl = new Combo(tcpPortComp, SWT.DROP_DOWN);
+               layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
+               portControl.setLayoutData(layoutData);
+               portControl.addVerifyListener(new VerifyListener() {
+                       @Override
+                       public void verifyText(VerifyEvent e) {
+                               StringBuilder buffer = new StringBuilder(((Combo)e.widget).getText());
+
+                               try {
+                                       if (e.end > e.start) {
+                                               buffer.replace(e.start, e.end, e.text);
+                                       } else if (e.end >= 0) {
+                                               buffer.insert(e.end, e.text);
+                                       }
+                               } catch (StringIndexOutOfBoundsException exc) { /* ignored on purpose */ }
+
+                               String fulltext = buffer.toString();
+                               e.doit = fulltext.matches("([0-9]{0,5})|(0((x|X)[0-9a-fA-F]{0,4})?)"); //$NON-NLS-1$
+
+                               if (e.doit && fulltext.length() > 0 && !fulltext.equalsIgnoreCase("0x")) { //$NON-NLS-1$
+                                       try {
+                                               int value = Integer.decode(fulltext).intValue();
+                                               if (value < 0 || value > 65535) {
+                                                       e.doit = false;
+                                               }
+                                       }
+                                       catch (Exception ex) {
+                                               e.doit = false;
+                                       }
+                               }
+                       }
+               });
+               portControl.addModifyListener(new ModifyListener(){
+                       @Override
+            public void modifyText(ModifyEvent e) {
+                               onModify();
+                       }
+               });
+
+               // Trigger the runnable after having created all controls!
+               parent.getDisplay().asyncExec(new Runnable() {
+                       @Override
+            public void run() {
+                               boolean enable = tcpHistory != null && tcpHistory.contains(data);
+                               setTTYControlEnabled(!enable);
+                               setTCPControlEnabled(enable);
+                               onModify();
+                       }
+               });
+
+               applyDialogFont(ttyComp);
+               applyDialogFont(tcpComp);
+
+               setupData();
+       }
+
+       private void setupData() {
+               setTTYControlEnabled(true);
+               setTCPControlEnabled(false);
+               if (ttyHistory != null && !ttyHistory.isEmpty()) {
+                       for (String tty : ttyHistory) {
+                               if (tty != null && tty.trim().length() > 0 && ttyControl.indexOf(tty) == -1) {
+                                       ttyControl.add(tty.trim());
+                               }
+                               if (tty != null && tty.equals(data)) {
+                                       ttyControl.setText(tty.trim());
+                               }
+                       }
+               }
+               if (tcpHistory != null && !tcpHistory.isEmpty()) {
+                       for (String tcp : tcpHistory) {
+                               String[] data = tcp.split(":"); //$NON-NLS-1$
+                               if (data.length > 1) {
+                                       if (data[1] != null && data[1].trim().length() > 0 && ttyControl.indexOf(data[1]) == -1) {
+                                               addressControl.add(data[1].trim());
+                                       }
+                               }
+                               if (data.length > 2) {
+                                       if (data[2] != null && data[2].trim().length() > 0 && ttyControl.indexOf(data[2]) == -1) {
+                                               addressControl.add(data[2].trim());
+                                       }
+                               }
+                               if (tcp.equals(this.data)) {
+                                       setTTYControlEnabled(false);
+                                       setTCPControlEnabled(true);
+                                       if (data.length > 1) {
+                                               addressControl.setText(data[1]);
+                                       }
+                                       if (data.length > 2) {
+                                               portControl.setText(data[2]);
+                                       }
+                               }
+                       }
+               }
+               onModify();
+       }
+
+       void setTTYControlEnabled(boolean enable) {
+               ttyControlSelector.setSelection(enable);
+               ttyControl.setEnabled(enable);
+       }
+
+       void setTCPControlEnabled(boolean enable) {
+               tcpControlSelector.setSelection(enable);
+               addressControl.setEnabled(enable);
+               portControl.setEnabled(enable);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.TrayDialog#createButtonBar(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       protected Control createButtonBar(Composite parent) {
+               Control control =  super.createButtonBar(parent);
+               setButtonEnabled(OK, false);
+               return control;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+        */
+       @Override
+       protected void okPressed() {
+               if (ttyControlSelector.getSelection()) {
+                       data = ttyControl.getText();
+               }
+               else {
+                       data = "tcp:" + addressControl.getText() + ":" + portControl.getText(); //$NON-NLS-1$ //$NON-NLS-2$
+               }
+               super.okPressed();
+       }
+
+       /**
+        * Called from the single controls if the content of the controls changed.
+        */
+       protected void onModify() {
+               setMessage(null);
+
+               boolean valid = false;
+
+               if (ttyControlSelector.getSelection()) {
+                       valid = isTtyControlValid();
+               } else {
+                       valid = isAddressControlValid();
+                       valid &= isPortControlValid();
+               }
+
+               if (getMessage() == null) {
+                       setDefaultMessage(Messages.SerialPortAddressDialog_message, IMessageProvider.INFORMATION);
+               }
+
+               setButtonEnabled(OK, valid);
+       }
+
+       private static final Pattern validCharacters = Platform.OS_WIN32.equals(Platform.getOS()) ? Pattern.compile("[\\w]+") : Pattern.compile("[\\w/]+"); //$NON-NLS-1$ //$NON-NLS-2$
+
+       /**
+        * Validates the tty device control.
+        *
+        * @return <code>True</code> if the control is valid, <code>false</code> otherwise.
+        */
+       protected boolean isTtyControlValid() {
+               if (ttyControl == null || ttyControl.isDisposed()) return false;
+
+               boolean valid = true;
+
+               String m = null;
+               int mt = IMessageProvider.NONE;
+
+               String newText = ttyControl.getText();
+               Assert.isNotNull(newText);
+               if (newText.trim().length() > 0) {
+                       Matcher matcher = validCharacters.matcher(newText);
+                       if (!matcher.matches()) {
+                               m = Messages.SerialLinePanel_error_invalidCharactes;
+                               mt = IMessageProvider.ERROR;
+                       }
+               }
+               else {
+                       m = Messages.SerialLinePanel_error_emptyHostTTYDevice;
+                       mt = IMessageProvider.INFORMATION;
+               }
+
+               valid = mt != IMessageProvider.ERROR;
+               if (mt > getMessageType()) setMessage(m, mt);
+
+               return valid;
+       }
+
+       /**
+        * Validates the address control.
+        *
+        * @return <code>True</code> if the control is valid, <code>false</code> otherwise.
+        */
+       protected boolean isAddressControlValid() {
+               if (addressControl == null || addressControl.isDisposed()) return false;
+
+               boolean valid = true;
+
+               String m = null;
+               int mt = IMessageProvider.NONE;
+
+               String ipOrHostName = addressControl.getText();
+
+               // info message when value is empty
+               if (ipOrHostName == null || ipOrHostName.trim().length() == 0) {
+                       m = Messages.SerialPortAddressDialog_Information_MissingTargetNameAddress;
+                       mt = IMessageProvider.INFORMATION;
+               } else {
+                       ipOrHostName = ipOrHostName.trim();
+                       // check IP address when only numeric values and '.' are entered
+                       if (ipOrHostName.matches(IP_CHARACTERS_REGEX)) {
+                               if (!ipOrHostName.matches(IP_REGEX)) {
+                                       m = Messages.SerialPortAddressDialog_Error_InvalidTargetIpAddress;
+                                       mt = IMessageProvider.ERROR;
+                               }
+                       }
+                       else if (ipOrHostName.matches(NAME_CHARACTERS_REGEX)) {
+                               if (!ipOrHostName.matches(NAME_REGEX)) {
+                                       m = Messages.SerialPortAddressDialog_Error_InvalidTargetNameAddress;
+                                       mt = IMessageProvider.ERROR;
+                               }
+                       }
+                       else {
+                               m = Messages.SerialPortAddressDialog_Error_InvalidTargetNameAddress;
+                               mt = IMessageProvider.ERROR;
+                       }
+               }
+
+               valid = mt != IMessageProvider.ERROR;
+               if (mt > getMessageType()) setMessage(m, mt);
+
+               return valid;
+       }
+
+       /**
+        * Validates the port control.
+        *
+        * @return <code>True</code> if the control is valid, <code>false</code> otherwise.
+        */
+       protected boolean isPortControlValid() {
+               if (portControl == null || portControl.isDisposed()) return false;
+
+               boolean valid = true;
+
+               String m = null;
+               int mt = IMessageProvider.NONE;
+
+               String newText = portControl.getText();
+               Assert.isNotNull(newText);
+               if (newText.trim().length() > 0) {
+                       if (!newText.matches("([0-9]{0,5})|(0((x|X)[0-9a-fA-F]{0,4})?)")) { //$NON-NLS-1$
+                               m = Messages.SerialPortAddressDialog_Error_InvalidPort;
+                               mt = IMessageProvider.ERROR;
+                       } else {
+                               try {
+                                       int value = Integer.decode(newText).intValue();
+                                       if (value < 0 || value > 65535) {
+                                               m = Messages.SerialPortAddressDialog_Error_InvalidPortRange;
+                                               mt = IMessageProvider.ERROR;
+                                       }
+                               }
+                               catch (Exception ex) { /* ignored on purpose */ }
+                       }
+               }
+               else {
+                       m = Messages.SerialPortAddressDialog_Information_MissingPort;
+                       mt = IMessageProvider.INFORMATION;
+               }
+
+               valid = mt != IMessageProvider.ERROR;
+               if (mt > getMessageType()) setMessage(m, mt);
+
+               return valid;
+       }
+
+       /**
+        * Return the new name after OK was pressed.
+        * Unless OK was pressed, the old name is returned.
+        */
+       public String getData() {
+               return data;
+       }
+
+       /**
+        * Cleanup when dialog is closed.
+        */
+       protected void dispose() {
+               message = null;
+               messageType = IMessageProvider.NONE;
+               errorMessage = null;
+               title = null;
+               defaultMessage = null;
+               defaultMessageType = IMessageProvider.NONE;
+       }
+
+       /**
+        * Cleanup the Dialog and close it.
+        */
+       @Override
+       public boolean close() {
+               dispose();
+               return super.close();
+       }
+
+       /**
+        * Set the enabled state of the dialog button specified by the given id (@see <code>IDialogConstants</code>)
+        * to the given state.
+        *
+        * @param buttonId The button id for the button to change the enabled state for.
+        * @param enabled The new enabled state to set for the button.
+        */
+       public void setButtonEnabled(int buttonId, boolean enabled) {
+               Button button = getButton(buttonId);
+               if (button != null) {
+                       button.setEnabled(enabled);
+               }
+       }
+
+       /**
+        * Sets the title for this dialog.
+        *
+        * @param title The title.
+        */
+       public void setDialogTitle(String title) {
+               if (getShell() != null && !getShell().isDisposed()) {
+                       getShell().setText(title);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.TitleAreaDialog#setTitle(java.lang.String)
+        */
+       @Override
+       public void setTitle(String newTitle) {
+               title = newTitle;
+               super.setTitle(newTitle);
+       }
+
+       /**
+        * Set the default message. The default message is shown within the
+        * dialogs message area if no other message is set.
+        *
+        * @param message The default message or <code>null</code>.
+        * @param type The default message type. See {@link IMessageProvider}.
+        */
+       public void setDefaultMessage(String message, int type) {
+               defaultMessage = message;
+               defaultMessageType = type;
+               // Push the default message to the dialog if no other message is set
+               if (!isMessageSet() && getContents() != null) {
+                       super.setMessage(defaultMessage, defaultMessageType);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.TitleAreaDialog#setMessage(java.lang.String, int)
+        */
+       @Override
+       public void setMessage(String newMessage, int newType) {
+               // To be able to implement IMessageProvider, we have to remember the
+               // set message ourselfs. There is no access to these information by the
+               // base class.
+               message = newMessage; messageType = newType;
+               // Only pass on to super implementation if the control has been created yet
+               if (getContents() != null) {
+                       super.setMessage(message != null ? message : defaultMessage, message != null ? messageType : defaultMessageType);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.TitleAreaDialog#setErrorMessage(java.lang.String)
+        */
+       @Override
+       public void setErrorMessage(String newErrorMessage) {
+               // See setMessage(...)
+               errorMessage = newErrorMessage;
+               super.setErrorMessage(newErrorMessage);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.IMessageProvider#getMessage()
+        */
+       @Override
+       public String getMessage() {
+               return errorMessage != null ? errorMessage : message;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.IMessageProvider#getMessageType()
+        */
+       @Override
+       public int getMessageType() {
+               return errorMessage != null ? IMessageProvider.ERROR : messageType;
+       }
+
+       /**
+        * Returns if or if not an message is set to the dialog.
+        *
+        * @return <code>True</code> if a message has been set, <code>false</code> otherwise.
+        */
+       public boolean isMessageSet() {
+               return errorMessage != null || message != null;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/interfaces/ITraceIds.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/interfaces/ITraceIds.java
new file mode 100644 (file)
index 0000000..acfd6da
--- /dev/null
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.interfaces;
+
+/**
+ * Trace slot identifiers.
+ */
+public interface ITraceIds {
+
+       /**
+        * If activated, trace information about serial device discovery is printed out.
+        */
+       public static final String TRACE_SERIAL_LINE_PANEL = "trace/serialLinePanel"; //$NON-NLS-1$
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/interfaces/IWireTypeSerial.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/interfaces/IWireTypeSerial.java
new file mode 100644 (file)
index 0000000..c8d0485
--- /dev/null
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.interfaces;
+
+/**
+ * The properties specific to the wire type &quot;serial&quot;.
+ */
+public interface IWireTypeSerial {
+
+       /**
+        * The data container.
+        */
+       public static String PROPERTY_CONTAINER_NAME = "serial"; //$NON-NLS-1$
+
+       /**
+        * The serial device name.
+        */
+       public static final String PROPERTY_SERIAL_DEVICE = "device"; //$NON-NLS-1$
+
+       /**
+        * The baud rate.
+        */
+       public static final String PROPERTY_SERIAL_BAUD_RATE = "baudrate"; //$NON-NLS-1$
+
+       /**
+        * The data bits
+        */
+       public static final String PROPERTY_SERIAL_DATA_BITS = "databits"; //$NON-NLS-1$
+
+       /**
+        * The parity
+        */
+       public static final String PROPERTY_SERIAL_PARITY = "parity"; //$NON-NLS-1$
+
+       /**
+        * The stop bits
+        */
+       public static final String PROPERTY_SERIAL_STOP_BITS = "stopbits"; //$NON-NLS-1$
+
+       /**
+        * The flow control
+        */
+       public static final String PROPERTY_SERIAL_FLOW_CONTROL = "flowcontrol"; //$NON-NLS-1$
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/launcher/SerialLauncherDelegate.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/launcher/SerialLauncherDelegate.java
new file mode 100644 (file)
index 0000000..7e947b8
--- /dev/null
@@ -0,0 +1,159 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.launcher;
+
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
+import org.eclipse.tm.terminal.connector.serial.connector.SerialSettings;
+import org.eclipse.tm.terminal.connector.serial.controls.SerialConfigurationPanel;
+import org.eclipse.tm.terminal.connector.serial.nls.Messages;
+import org.eclipse.tm.terminal.view.core.TerminalServiceFactory;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
+import org.eclipse.tm.terminal.view.ui.internal.SettingsStore;
+import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate;
+
+/**
+ * Serial launcher delegate implementation.
+ */
+@SuppressWarnings("restriction")
+public class SerialLauncherDelegate extends AbstractLauncherDelegate {
+       // The serial terminal connection memento handler
+       private final IMementoHandler mementoHandler = new SerialMementoHandler();
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#needsUserConfiguration()
+        */
+       @Override
+       public boolean needsUserConfiguration() {
+               return true;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getPanel(org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer)
+        */
+       @Override
+       public IConfigurationPanel getPanel(IConfigurationPanelContainer container) {
+               return new SerialConfigurationPanel(container);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#execute(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
+        */
+       @Override
+       public void execute(Map<String, Object> properties, ITerminalService.Done done) {
+               Assert.isNotNull(properties);
+
+               // Set the terminal tab title
+               String terminalTitle = getTerminalTitle(properties);
+               if (terminalTitle != null) {
+                       properties.put(ITerminalsConnectorConstants.PROP_TITLE, terminalTitle);
+               }
+
+               // Get the terminal service
+               ITerminalService terminal = TerminalServiceFactory.getService();
+               // If not available, we cannot fulfill this request
+               if (terminal != null) {
+                       terminal.openConsole(properties, done);
+               }
+       }
+
+       /**
+        * Returns the terminal title string.
+        * <p>
+        * The default implementation constructs a title like &quot;Serial &lt;port&gt; (Start time) &quot;.
+        *
+        * @return The terminal title string or <code>null</code>.
+        */
+       private String getTerminalTitle(Map<String, Object> properties) {
+               // Try to see if the user set a title explicitly via the properties map.
+               String title = getDefaultTerminalTitle(properties);
+               if (title != null) return title;
+
+               String device = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE);
+
+               if (device != null) {
+                       DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
+                       String date = format.format(new Date(System.currentTimeMillis()));
+                       return NLS.bind(Messages.SerialLauncherDelegate_terminalTitle, new String[]{device, date});
+               }
+
+               return Messages.SerialLauncherDelegate_terminalTitle_default;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
+        */
+       @Override
+       public Object getAdapter(Class adapter) {
+               if (IMementoHandler.class.equals(adapter)) {
+                       return mementoHandler;
+               }
+           return super.getAdapter(adapter);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map)
+        */
+    @Override
+       public ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
+       Assert.isNotNull(properties);
+
+       // Check for the terminal connector id
+       String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
+               if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.serial.SerialConnector"; //$NON-NLS-1$
+
+               String port = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE);
+               String baud = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE);
+               Object value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
+               String timeout = value instanceof Integer ? ((Integer)value).toString() : null;
+               String databits = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS);
+               String stopbits = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS);
+               String parity = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_PARITY);
+               String flowcontrol = (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL);
+
+               // Construct the terminal settings store
+               ISettingsStore store = new SettingsStore();
+
+               // Construct the serial settings
+               SerialSettings serialSettings = new SerialSettings();
+               serialSettings.setSerialPort(port);
+               serialSettings.setBaudRate(baud);
+               serialSettings.setTimeout(timeout);
+               serialSettings.setDataBits(databits);
+               serialSettings.setStopBits(stopbits);
+               serialSettings.setParity(parity);
+               serialSettings.setFlowControl(flowcontrol);
+
+               // And save the settings to the store
+               serialSettings.save(store);
+
+               // Construct the terminal connector instance
+               ITerminalConnector connector = TerminalConnectorExtension.makeTerminalConnector(connectorId);
+               if (connector != null) {
+                       // Apply default settings
+                       connector.setDefaultSettings();
+                       // And load the real settings
+                       connector.load(store);
+               }
+
+               return connector;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/launcher/SerialMementoHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/launcher/SerialMementoHandler.java
new file mode 100644 (file)
index 0000000..5af0ef8
--- /dev/null
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.launcher;
+
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
+import org.eclipse.ui.IMemento;
+
+/**
+ * Serial terminal connection memento handler implementation.
+ */
+public class SerialMementoHandler implements IMementoHandler {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#saveState(org.eclipse.ui.IMemento, java.util.Map)
+        */
+       @Override
+       public void saveState(IMemento memento, Map<String, Object> properties) {
+               Assert.isNotNull(memento);
+               Assert.isNotNull(properties);
+
+               // Do not write the terminal title to the memento -> needs to
+               // be recreated at the time of restoration.
+               memento.putString(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE, (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE));
+               memento.putString(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE, (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE));
+               memento.putString(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS, (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS));
+               memento.putString(ITerminalsConnectorConstants.PROP_SERIAL_PARITY, (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_PARITY));
+               memento.putString(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS, (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS));
+               memento.putString(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL, (String)properties.get(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL));
+               Object value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
+               memento.putInteger(ITerminalsConnectorConstants.PROP_TIMEOUT, value instanceof Integer ? ((Integer)value).intValue() : -1);
+               memento.putString(ITerminalsConnectorConstants.PROP_ENCODING, (String)properties.get(ITerminalsConnectorConstants.PROP_ENCODING));
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#restoreState(org.eclipse.ui.IMemento, java.util.Map)
+        */
+       @Override
+       public void restoreState(IMemento memento, Map<String, Object> properties) {
+               Assert.isNotNull(memento);
+               Assert.isNotNull(properties);
+
+               // Restore the terminal properties from the memento
+               properties.put(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE, memento.getString(ITerminalsConnectorConstants.PROP_SERIAL_DEVICE));
+               properties.put(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE, memento.getString(ITerminalsConnectorConstants.PROP_SERIAL_BAUD_RATE));
+               properties.put(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS, memento.getString(ITerminalsConnectorConstants.PROP_SERIAL_DATA_BITS));
+               properties.put(ITerminalsConnectorConstants.PROP_SERIAL_PARITY, memento.getString(ITerminalsConnectorConstants.PROP_SERIAL_PARITY));
+               properties.put(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS, memento.getString(ITerminalsConnectorConstants.PROP_SERIAL_STOP_BITS));
+               properties.put(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL, memento.getString(ITerminalsConnectorConstants.PROP_SERIAL_FLOW_CONTROL));
+               Integer timeout = memento.getInteger(ITerminalsConnectorConstants.PROP_TIMEOUT);
+               if (timeout != null && timeout.intValue() != -1) properties.put(ITerminalsConnectorConstants.PROP_TIMEOUT, timeout);
+               properties.put(ITerminalsConnectorConstants.PROP_ENCODING, memento.getString(ITerminalsConnectorConstants.PROP_ENCODING));
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/nls/Messages.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/nls/Messages.java
new file mode 100644 (file)
index 0000000..19de4b7
--- /dev/null
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.serial.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Externalized strings management.
+ */
+public class Messages extends NLS {
+
+       // The plug-in resource bundle name
+       private static final String BUNDLE_NAME = "org.eclipse.tm.terminal.connector.serial.nls.Messages"; //$NON-NLS-1$
+
+       /**
+        * Static constructor.
+        */
+       static {
+               // Load message values from bundle file
+               NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+       }
+
+       // **** Declare externalized string id's down here *****
+
+       public static String SerialLauncherDelegate_terminalTitle;
+       public static String SerialLauncherDelegate_terminalTitle_default;
+
+       public static String SerialLinePanel_hostTTYDevice_label;
+       public static String SerialLinePanel_hostTTYSpeed_label;
+       public static String SerialLinePanel_hostTTYDatabits_label;
+       public static String SerialLinePanel_hostTTYParity_label;
+       public static String SerialLinePanel_hostTTYStopbits_label;
+       public static String SerialLinePanel_hostTTYFlowControl_label;
+       public static String SerialLinePanel_hostTTYTimeout_label;
+       public static String SerialLinePanel_customSerialBaudRate_title;
+       public static String SerialLinePanel_customSerialBaudRate_message;
+       public static String SerialLinePanel_error_invalidCharactes;
+       public static String SerialLinePanel_error_invalidCharactesBaudRate;
+       public static String SerialLinePanel_error_emptyHostTTYDevice;
+       public static String SerialLinePanel_error_emptyHostTTYSpeedRate;
+       public static String SerialLinePanel_error_emptyHostTTYDatabits;
+       public static String SerialLinePanel_error_emptyHostTTYParity;
+       public static String SerialLinePanel_error_emptyHostTTYStopbits;
+       public static String SerialLinePanel_error_emptyHostTTYFlowControl;
+       public static String SerialLinePanel_error_emptyHostTTYTimeout;
+       public static String SerialLinePanel_info_editableTTYDeviceSelected;
+       public static String SerialLinePanel_info_editableTTYBaudRateSelected;
+       public static String SerialLinePanel_warning_FailedToLoadSerialPorts;
+
+       public static String SerialPortAddressDialog_dialogtitle;
+       public static String SerialPortAddressDialog_title;
+       public static String SerialPortAddressDialog_message;
+       public static String SerialPortAddressDialog_address;
+       public static String SerialPortAddressDialog_port;
+       public static String SerialPortAddressDialog_Information_MissingTargetNameAddress;
+       public static String SerialPortAddressDialog_Error_InvalidTargetNameAddress;
+       public static String SerialPortAddressDialog_Error_InvalidTargetIpAddress;
+       public static String SerialPortAddressDialog_Information_MissingPort;
+       public static String SerialPortAddressDialog_Error_InvalidPort;
+       public static String SerialPortAddressDialog_Error_InvalidPortRange;
+
+       public static String SerialConnector_Error_LiberayNotInstalled;
+
+       public static String SerialConnectWorker_PROP_TITLE;
+       public static String SerialConnectWorker_PORT_IN_USE;
+       public static String SerialConnectWorker_ANOTHER_TERMINAL;
+       public static String SerialConnectWorker_PORT_STOLEN;
+       public static String SerialConnectWorker_PORT_NOT_STOLEN;
+       public static String SerialConnectWorker_NO_SUCH_PORT;
+       public static String SerialConnectWorker_OWNERSHIP_GRANTED;
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/nls/Messages.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.serial/src/org/eclipse/tm/terminal/connector/serial/nls/Messages.properties
new file mode 100644 (file)
index 0000000..37a9473
--- /dev/null
@@ -0,0 +1,71 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+
+SerialLauncherDelegate_terminalTitle=Serial {0} ({1})
+SerialLauncherDelegate_terminalTitle_default=Serial Terminal
+
+SerialLinePanel_hostTTYDevice_label=Port:
+SerialLinePanel_hostTTYSpeed_label=Baud Rate:
+SerialLinePanel_hostTTYDatabits_label=Data Bits:
+SerialLinePanel_hostTTYParity_label=Parity:
+SerialLinePanel_hostTTYStopbits_label=Stop Bits:
+SerialLinePanel_hostTTYFlowControl_label=Flow Control:
+SerialLinePanel_hostTTYTimeout_label=Timeout (sec):
+SerialLinePanel_customSerialBaudRate_title=Configure Custom Serial Baud Rate
+SerialLinePanel_customSerialBaudRate_message=Please enter the custom serial baud rate:
+SerialLinePanel_error_invalidCharactes=The device name you've entered contains invalid characters.
+SerialLinePanel_error_invalidCharactesBaudRate=The baud rate you've entered contains invalid characters.
+SerialLinePanel_error_emptyHostTTYDevice=Please select a valid host serial device.
+SerialLinePanel_error_emptyHostTTYSpeedRate=Please select a valid serial device speed.
+SerialLinePanel_error_emptyHostTTYDatabits=Please select a valid number of data bits.
+SerialLinePanel_error_emptyHostTTYParity=Please select a valid parity.
+SerialLinePanel_error_emptyHostTTYStopbits=Please select a valid number of stop bits.
+SerialLinePanel_error_emptyHostTTYFlowControl=Please select a valid flow control.
+SerialLinePanel_error_emptyHostTTYTimeout=Please select a valid timeout.
+SerialLinePanel_info_editableTTYDeviceSelected=Please re-select ''Other...'' again to activate the custom serial device input dialog.
+SerialLinePanel_info_editableTTYBaudRateSelected=Please re-select ''Other...'' again to activate the custom serial baud rate input dialog.
+SerialLinePanel_warning_FailedToLoadSerialPorts=Failed to enumerate the systems serial ports.
+
+SerialPortAddressDialog_dialogtitle=Other...
+SerialPortAddressDialog_title=Configure Custom Serial Device
+SerialPortAddressDialog_message=Select the type of the custom serial device and configure the device properties.
+SerialPortAddressDialog_address=Address:
+SerialPortAddressDialog_port=Port:
+SerialPortAddressDialog_Information_MissingTargetNameAddress=Please enter a valid target name or IP address.
+SerialPortAddressDialog_Error_InvalidTargetNameAddress=Target name or IP address is not valid.
+SerialPortAddressDialog_Error_InvalidTargetIpAddress=Target IP address is not valid.
+SerialPortAddressDialog_Information_MissingPort=Please enter a valid port number.
+SerialPortAddressDialog_Error_InvalidPort=Target port number must be a valid number in the range of 0 to 65535.
+SerialPortAddressDialog_Error_InvalidPortRange=Target port number must be in the range of 0 to 65535.
+
+
+SerialConnector_Error_LiberayNotInstalled = The RXTX library has not been installed properly! \n\
+\n\
+Installation:\n\
+-------------\n\
+* Either (a) Use Help > Software Updates, Add Site and install from:\n\
+\ \ \ http://rxtx.qbang.org/eclipse/\n\
+* Or (b) Download and install RXTX for Eclipse from:\n\
+\ \ \ http://rxtx.qbang.org/eclipse/downloads/\n\
+\n\
+For other Platforms, more info and help see\n\
+\ \ \ http://www.rxtx.org/\n\
+\ \ \ https://bugs.eclipse.org/bugs/show_bug.cgi?id=175336#c6\n\
+\n\
+This message is also available in your Error Log for Copy & Paste.
+
+# Port Ownership Handling
+SerialConnectWorker_PROP_TITLE = Terminal
+SerialConnectWorker_PORT_IN_USE = Serial port \''{0}\'' is currently in use by {1}\!\nDo you want to try and steal the port?
+SerialConnectWorker_ANOTHER_TERMINAL = another Terminal View
+SerialConnectWorker_PORT_STOLEN = Port \''{0}\'' successfully obtained from {1}\r\n
+SerialConnectWorker_PORT_NOT_STOLEN = Connection Error!\r\n \''{0}\'' is already in use by {1}.\r\n
+SerialConnectWorker_NO_SUCH_PORT = No such port: \''{0}\''\r\n
+SerialConnectWorker_OWNERSHIP_GRANTED = Connection canceled due to ownership request from {0}.\r\n
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.classpath b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.classpath
new file mode 100644 (file)
index 0000000..ad32c83
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.gitignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.options b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.options
new file mode 100644 (file)
index 0000000..8ec18da
--- /dev/null
@@ -0,0 +1 @@
+org.eclipse.tm.terminal.connector.ssh/debugmode = 0
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.project b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.project
new file mode 100644 (file)
index 0000000..be963db
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.ssh</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>1329502091181</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.settings/org.eclipse.jdt.core.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..4754bba
--- /dev/null
@@ -0,0 +1,362 @@
+#Wed Oct 19 12:10:57 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=4
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=4
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.settings/org.eclipse.jdt.ui.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..0d73226
--- /dev/null
@@ -0,0 +1,62 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Target Explorer Java STD
+formatter_settings_version=12
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.settings/org.eclipse.pde.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/.settings/org.eclipse.pde.prefs
new file mode 100644 (file)
index 0000000..cf80c8b
--- /dev/null
@@ -0,0 +1,32 @@
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.encodings=2
+compilers.p.build.java.compiler=2
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/META-INF/MANIFEST.MF b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..bc849b0
--- /dev/null
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.tm.terminal.connector.ssh;singleton:=true
+Bundle-Version: 4.2.0.qualifier
+Bundle-Activator: org.eclipse.tm.terminal.connector.ssh.activator.UIPlugin
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.core.expressions;bundle-version="3.4.400",
+ org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.equinox.security;bundle-version="1.1.100",
+ org.eclipse.tm.terminal.view.core;bundle-version="4.0.0";resolution:=optional,
+ org.eclipse.tm.terminal.view.ui;bundle-version="4.1.0";resolution:=optional,
+ org.eclipse.tm.terminal.control;bundle-version="4.0.0",
+ org.eclipse.ui;bundle-version="3.8.0",
+ com.jcraft.jsch;bundle-version="[0.1.31,1.0.0)",
+ org.eclipse.jsch.core;bundle-version="[1.0.0,2.0.0)"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Export-Package: org.eclipse.tm.terminal.connector.ssh.activator;x-internal:=true,
+ org.eclipse.tm.terminal.connector.ssh.connector,
+ org.eclipse.tm.terminal.connector.ssh.controls,
+ org.eclipse.tm.terminal.connector.ssh.launcher,
+ org.eclipse.tm.terminal.connector.ssh.nls;x-internal:=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/about.html b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/about.html
new file mode 100644 (file)
index 0000000..0f07cf0
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+<p>May 24, 2012</p>    
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/build.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/build.properties
new file mode 100644 (file)
index 0000000..3333540
--- /dev/null
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties,\
+               plugin.xml,\
+               about.html
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/plugin.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/plugin.properties
new file mode 100644 (file)
index 0000000..4a58217
--- /dev/null
@@ -0,0 +1,20 @@
+##################################################################################
+# Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+
+pluginName = Terminal SSH Connector
+providerName = Eclipse.org - Target Management
+
+# ----- Terminal Connector -----
+
+SshConnector.label=SSH
+
+# ----- Terminal Launcher Delegates -----
+
+SshLauncherDelegate.label=SSH Terminal
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/plugin.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/plugin.xml
new file mode 100644 (file)
index 0000000..09a3052
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+<!-- Terminal connector contributions -->
+   <extension point="org.eclipse.tm.terminal.control.connectors">
+      <connector
+            name="%SshConnector.label"
+            id="org.eclipse.tm.terminal.connector.ssh.SshConnector"
+            class="org.eclipse.tm.terminal.connector.ssh.connector.SshConnector"/>
+   </extension>
+
+<!-- Terminal launcher delegate contributions -->
+   <extension point="org.eclipse.tm.terminal.view.ui.launcherDelegates">
+      <delegate
+            class="org.eclipse.tm.terminal.connector.ssh.launcher.SshLauncherDelegate"
+            id="org.eclipse.tm.terminal.connector.ssh.launcher.ssh"
+            label="%SshLauncherDelegate.label">
+            <enablement>
+               <with variable="selection">
+                  <count value="1"/>
+                  <iterate operator="and" ifEmpty="false">
+                     <test
+                           forcePluginActivation="true"
+                           property="org.eclipse.tm.terminal.view.core.hasContextPropertiesProvider"
+                           value="true"/>
+                  </iterate>
+               </with>
+            </enablement>
+      </delegate>
+   </extension>
+</plugin>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/pom.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/pom.xml
new file mode 100644 (file)
index 0000000..cd99ede
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.ssh</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/activator/UIPlugin.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/activator/UIPlugin.java
new file mode 100644 (file)
index 0000000..8fcbc08
--- /dev/null
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.activator;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jsch.core.IJSchService;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.tm.terminal.connector.ssh.connector.SshConnection;
+import org.eclipse.tm.terminal.view.core.tracing.TraceHandler;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class UIPlugin extends AbstractUIPlugin {
+       // The shared instance
+       private static UIPlugin plugin;
+       // The trace handler instance
+       private static volatile TraceHandler traceHandler;
+
+       // ServiceTracker for IJschService
+       private ServiceTracker tracker;
+
+       /**
+        * The constructor
+        */
+       public UIPlugin() {
+       }
+
+       /**
+        * Returns the shared instance
+        *
+        * @return the shared instance
+        */
+       public static UIPlugin getDefault() {
+               return plugin;
+       }
+
+       /**
+        * Convenience method which returns the unique identifier of this plugin.
+        */
+       public static String getUniqueIdentifier() {
+               if (getDefault() != null && getDefault().getBundle() != null) {
+                       return getDefault().getBundle().getSymbolicName();
+               }
+               return "org.eclipse.tm.terminal.connector.ssh"; //$NON-NLS-1$
+       }
+
+       /**
+        * Returns the bundles trace handler.
+        *
+        * @return The bundles trace handler.
+        */
+       public static TraceHandler getTraceHandler() {
+               if (traceHandler == null) {
+                       traceHandler = new TraceHandler(getUniqueIdentifier());
+               }
+               return traceHandler;
+       }
+
+    //---------------------------------------------------------------------------
+       //<copied code from org.eclipse.team.cvs.ssh2/CVSSSH2Plugin (Copyright IBM)>
+    //---------------------------------------------------------------------------
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+        */
+       @SuppressWarnings("unchecked")
+    @Override
+    public void start(BundleContext context) throws Exception {
+               super.start(context);
+               plugin = this;
+
+           tracker = new ServiceTracker(getBundle().getBundleContext(), IJSchService.class.getName(), null);
+           tracker.open();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void stop(BundleContext context) throws Exception {
+               try {
+                       SshConnection.shutdown();
+                       tracker.close();
+               } finally {
+                       plugin = null;
+                       super.stop(context);
+               }
+       }
+
+       /**
+        * Returns an instance of IJSchService from the OSGi Registry.
+        * @return An instance of IJSchService, or <code>null</code> if no
+        *              IJschService service is available.
+        */
+    public IJSchService getJSchService() {
+        return (IJSchService)tracker.getService();
+    }
+
+    //---------------------------------------------------------------------------
+       //<copied code from org.eclipse.team.cvs.ssh2/CVSSSH2Plugin (Copyright IBM)>
+    //---------------------------------------------------------------------------
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)
+        */
+       @Override
+       protected void initializeImageRegistry(ImageRegistry registry) {
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>Image</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>Image</code> object instance or <code>null</code>.
+        */
+       public static Image getImage(String key) {
+               return getDefault().getImageRegistry().get(key);
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>ImageDescriptor</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>ImageDescriptor</code> object instance or <code>null</code>.
+        */
+       public static ImageDescriptor getImageDescriptor(String key) {
+               return getDefault().getImageRegistry().getDescriptor(key);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/ISshConstants.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/ISshConstants.java
new file mode 100644 (file)
index 0000000..8132439
--- /dev/null
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * Martin Oberhuber (Wind River) - extracted from various team.cvs plugins
+ * Martin Oberhuber (Wind River) - [175686] Adapted to new IJSchService API 
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.connector;
+
+
+/**
+ * Defines the constants used by the terminal.ssh Plugin
+ */
+public interface ISshConstants {
+
+    // These are from cvs.ui.IHelpContextIds
+       public static final String CVSUIPREFIX = "org.eclipse.team.cvs.ui."; //$NON-NLS-1$
+       public static final String HELP_USER_VALIDATION_DIALOG = CVSUIPREFIX + "user_validation_dialog_context"; //$NON-NLS-1$
+       public static final String HELP_KEYBOARD_INTERACTIVE_DIALOG = CVSUIPREFIX + "keyboard_interactive_dialog_context"; //$NON-NLS-1$
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/ISshSettings.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/ISshSettings.java
new file mode 100644 (file)
index 0000000..4daa156
--- /dev/null
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.connector;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+
+public interface ISshSettings {
+
+       public static int DEFAULT_SSH_PORT = 22;
+
+       /** 
+        * Get the host name or IP address of remote system to connect.
+        * @return host name or IP address of the remote system.
+        */ 
+       String getHost();
+
+       /**
+        * Get the login name for connecting to the remote system.
+        * @return remote login name
+        */ 
+       String getUser();
+
+       /**
+        *  Get the password for connecting to the remote system.
+        *  May be empty if connecting via SSH public key authentication
+        *  (with or without passphrase).
+        *  @return password to use 
+        */ 
+       String getPassword();
+       
+       /**
+        * Get the timeout (in seconds) after which the SSH connection is assumed dead.
+        * @return timeout (in seconds) for the SSH connection.
+        */
+       int getTimeout();
+
+       /**
+        * Get the keepalive interval (in seconds).
+        * After this time of inactivity, the SSH connector will send a message to the
+        * remote system in order to avoid timeouts on the remote. A maximum of 6 
+        * keepalive messages will be sent if enabled. When set to 0, the keepalive 
+        * feature is disabled. 
+        * @return interval (in seconds) for keepalive messages.
+        */
+       int getKeepalive();
+
+       /**
+        * Get the TCP/IP port on the remote system to use.
+        * @return TCP/IP port on the remote system to use.
+        */
+       int getPort();
+
+       /**
+        * Return a human-readable String summarizing all relevant connection data.
+        * This String can be displayed in the Terminal caption, for instance.
+        * @return a human-readable String summarizing relevant connection data.
+        */
+       String getSummary();
+
+       /**
+        * Load connection data from a settings store.
+        * @param store the settings store to access.
+        */
+       void load(ISettingsStore store);
+
+       /**
+        * Store connection data into a settings store.
+        * @param store the settings store to access.
+        */
+       void save(ISettingsStore store);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/KeyboardInteractiveDialog.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/KeyboardInteractiveDialog.java
new file mode 100644 (file)
index 0000000..464e301
--- /dev/null
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Atsuhiko Yamanaka, JCraft,Inc. - initial API and implementation.
+ * IBM Corporation - ongoing maintenance
+ * Martin Oberhuber (Wind River) - copied and adapted from team.cvs.ui
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.connector;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * A dialog for keyboad-interactive authentication for the ssh2 connection.
+ */
+public class KeyboardInteractiveDialog extends TrayDialog {
+  // widgets
+  private Text[] texts;
+
+  protected String domain;
+  protected String destination;
+  protected String name;
+  protected String instruction;
+  protected String lang;
+  protected String[] prompt;
+  protected boolean[] echo;
+  private String message;
+  private String[] result;
+
+  /**
+   * Creates a nwe KeyboardInteractiveDialog.
+   *
+   * @param parentShell the parent shell
+   * @param connectionId an id for the connection
+   * @param destination the location
+   * @param name the name
+   * @param instruction the instruction
+   * @param prompt the titles for textfields
+   * @param echo '*' should be used or not
+   */
+  public KeyboardInteractiveDialog(Shell parentShell,
+                                  String connectionId,
+                                  String destination,
+                                  String name,
+                                  String instruction,
+                                  String[] prompt,
+                                  boolean[] echo){
+    super(parentShell);
+    this.domain=connectionId;
+    this.destination=destination;
+    this.name=name;
+    this.instruction=instruction;
+    this.prompt=prompt;
+    this.echo=echo;
+    this.message=NLS.bind(SshMessages.KeyboardInteractiveDialog_message, new String[] { destination+(name!=null && name.length()>0 ? ": "+name : "") }); //NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-2$
+  }
+  /**
+   * @see Window#configureShell
+   */
+  @Override
+protected void configureShell(Shell newShell) {
+    super.configureShell(newShell);
+    newShell.setText(message);
+  }
+  /**
+   * @see Window#create
+   */
+  @Override
+public void create() {
+    super.create();
+    if(texts.length>0){
+      texts[0].setFocus();
+    }
+  }
+  /**
+   * @see Dialog#createDialogArea
+   */
+  @Override
+protected Control createDialogArea(Composite parent) {
+    Composite main=new Composite(parent, SWT.NONE);
+    GridLayout layout=new GridLayout();
+    layout.numColumns=3;
+    main.setLayout(layout);
+    main.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+       // set F1 help
+    PlatformUI.getWorkbench().getHelpSystem().setHelp(main, ISshConstants.HELP_KEYBOARD_INTERACTIVE_DIALOG);
+
+    if (message!=null) {
+      Label messageLabel=new Label(main, SWT.WRAP);
+      messageLabel.setText(message);
+      GridData data=new GridData(GridData.FILL_HORIZONTAL);
+      data.horizontalSpan=3;
+      messageLabel.setLayoutData(data);
+    }
+    if(domain!=null){
+      Label label = new Label(main, SWT.WRAP);
+      label.setText(NLS.bind(SshMessages.KeyboardInteractiveDialog_labelConnection, new String[] { domain }));
+      GridData data=new GridData(GridData.FILL_HORIZONTAL);
+      data.horizontalSpan=3;
+      label.setLayoutData(data);
+    }
+    if (instruction!=null && instruction.length()>0) {
+      Label messageLabel=new Label(main, SWT.WRAP);
+      messageLabel.setText(instruction);
+      GridData data=new GridData(GridData.FILL_HORIZONTAL);
+      data.horizontalSpan=3;
+      messageLabel.setLayoutData(data);
+    }
+    createPasswordFields(main);
+    return main;
+  }
+  /**
+   * Creates the widgets that represent the entry area.
+   *
+   * @param parent  the parent of the widgets
+   */
+  @SuppressWarnings("unused")
+protected void createPasswordFields(Composite parent) {
+    texts=new Text[prompt.length];
+
+    for(int i=0; i<prompt.length; i++){
+      new Label(parent, SWT.NONE).setText(prompt[i]);
+      texts[i]=new Text(parent, SWT.BORDER);
+      GridData data=new GridData(GridData.FILL_HORIZONTAL);
+      data.widthHint=convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH);
+      texts[i].setLayoutData(data);
+
+      if(!echo[i]){
+       texts[i].setEchoChar('*');
+      }
+      new Label(parent, SWT.NONE);
+    }
+
+  }
+  /**
+   * Returns the entered values, or null
+   * if the user cancelled.
+   *
+   * @return the entered values
+   */
+  public String[] getResult() {
+    return result;
+  }
+  /**
+   * Notifies that the ok button of this dialog has been pressed.
+   * <p>
+   * The default implementation of this framework method sets
+   * this dialog's return code to <code>Window.OK</code>
+   * and closes the dialog. Subclasses may override.
+   * </p>
+   */
+  @Override
+protected void okPressed() {
+    result=new String[prompt.length];
+    for(int i=0; i<texts.length; i++){
+      result[i]=texts[i].getText();
+    }
+    super.okPressed();
+  }
+  /**
+   * Notifies that the cancel button of this dialog has been pressed.
+   * <p>
+   * The default implementation of this framework method sets
+   * this dialog's return code to <code>Window.CANCEL</code>
+   * and closes the dialog. Subclasses may override.
+   * </p>
+   */
+  @Override
+protected void cancelPressed() {
+    result=null;
+    super.cancelPressed();
+  }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshConnection.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshConnection.java
new file mode 100644 (file)
index 0000000..7117b56
--- /dev/null
@@ -0,0 +1,373 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [175686] Adapted to new IJSchService API
+ *    - copied code from org.eclipse.team.cvs.ssh2/JSchSession (Copyright IBM)
+ * Martin Oberhuber (Wind River) - [198790] make SSH createSession() protected
+ * Mikhail Kalugin <fourdman@xored.com> - [201864] Fix Terminal SSH keyboard interactive authentication
+ * Martin Oberhuber (Wind River) - [155026] Add keepalives for SSH connection
+ * Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives
+ * Martin Oberhuber (Wind River) - [225792] Rename SshConnector.getTelnetSettings() to getSshSettings()
+ * Martin Oberhuber (Wind River) - [168197] Replace JFace MessagDialog by SWT MessageBox
+ * Martin Oberhuber (Wind River) - [205674][ssh] Terminal remains "connecting" when authentication is cancelled
+ * Michael Scharf (Wind River) - 240420: [terminal][ssh]Channel is not closed when the connection is closed with the close button
+ * Martin Oberhuber (Wind River) - [206919] Improve SSH Terminal Error Reporting
+ * Andrei Sobolev (Xored) - [250456] Ssh banner message causes IllegalArgumentException popup
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.connector;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InterruptedIOException;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jsch.core.IJSchService;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.connector.ssh.activator.UIPlugin;
+
+import com.jcraft.jsch.ChannelShell;
+import com.jcraft.jsch.JSchException;
+import com.jcraft.jsch.Session;
+import com.jcraft.jsch.UIKeyboardInteractive;
+import com.jcraft.jsch.UserInfo;
+
+public class SshConnection extends Thread {
+       private static int fgNo;
+       /* default */ final ITerminalControl fControl;
+       private final SshConnector fConn;
+       private Session fSession;
+       private boolean fDisconnectHasBeenCalled;
+       protected SshConnection(SshConnector conn,ITerminalControl control) {
+               super("SshConnection-"+fgNo++); //$NON-NLS-1$
+               fControl = control;
+               fConn = conn;
+               fControl.setState(TerminalState.CONNECTING);
+       }
+
+       //----------------------------------------------------------------------
+       // <copied code from org.eclipse.team.cvs.ssh2/JSchSession (Copyright IBM)>
+       //----------------------------------------------------------------------
+
+       /**
+        * Create a Jsch session.
+        * Subclasses can override in order to replace the UserInfo wrapper
+        * (for non-interactive usage, for instance), or in order to change
+        * the Jsch config (for instance, in order to switch off strict
+        * host key checking or in order to add specific ciphers).
+        */
+    protected Session createSession(String username, String password, String hostname, int port, UserInfo wrapperUI, IProgressMonitor monitor) throws JSchException {
+        IJSchService service = UIPlugin.getDefault().getJSchService();
+        if (service == null)
+               return null;
+        Session session = service.createSession(hostname, port, username);
+        //session.setTimeout(getSshTimeoutInMillis());
+        session.setTimeout(0); //never time out on the session
+        session.setServerAliveCountMax(6); //give up after 6 tries (remote will be dead after 30 min)
+        if (password != null)
+                       session.setPassword(password);
+        session.setUserInfo(wrapperUI);
+        return session;
+    }
+
+       public static void shutdown() {
+               //TODO: Store all Jsch sessions in a pool and disconnect them on shutdown
+       }
+
+       //----------------------------------------------------------------------
+       // </copied code from org.eclipse.team.cvs.ssh2/JSchSession (Copyright IBM)>
+       //----------------------------------------------------------------------
+
+       @Override
+    public void run() {
+               boolean connectSucceeded = false;
+               String host = ""; //$NON-NLS-1$
+               int port = ISshSettings.DEFAULT_SSH_PORT;
+               try {
+                       int nTimeout = fConn.getSshSettings().getTimeout() * 1000;
+                       int nKeepalive = fConn.getSshSettings().getKeepalive() * 1000;
+                       host = fConn.getSshSettings().getHost();
+                       String user = fConn.getSshSettings().getUser();
+                       String password = fConn.getSshSettings().getPassword();
+                       port = fConn.getSshSettings().getPort();
+
+                       UserInfo ui=new MyUserInfo(null, user, password);
+
+            Session session = createSession(user, password, host, port,
+                       ui, new NullProgressMonitor());
+                       synchronized (this) {
+                               fSession = session;
+                       }
+
+            //java.util.Hashtable config=new java.util.Hashtable();
+            //config.put("StrictHostKeyChecking", "no");
+            //session.setConfig(config);
+            //ui.aboutToConnect();
+            if (nKeepalive > 0) {
+                session.setServerAliveInterval(nKeepalive); //default is 5 minutes
+            }
+            // dont try to connect if disconnect has been requested already
+                       synchronized (this) {
+                               if (fDisconnectHasBeenCalled)
+                                       return;
+                       }
+
+                       session.connect(nTimeout);   // making connection with timeout.
+                       // if we got disconnected, do not continue
+                       if(!isSessionConnected())
+                               return;
+                       ChannelShell channel=(ChannelShell) session.openChannel("shell"); //$NON-NLS-1$
+                       channel.setPtyType("xterm"); //$NON-NLS-1$
+                       // TERM=xterm implies VT100 line wrapping mode
+                       fControl.setVT100LineWrapping(true);
+                       channel.connect();
+
+                       // maybe the terminal was disconnected while we were connecting
+                       if (isSessionConnected() && channel.isConnected()) {
+                               connectSucceeded = true;
+                               fConn.setInputStream(channel.getInputStream());
+                               fConn.setOutputStream(channel.getOutputStream());
+                               fConn.setChannel(channel);
+                               fControl.setState(TerminalState.CONNECTED);
+                               try {
+                                       // read data until the connection gets terminated
+                                       readDataForever(fConn.getInputStream());
+                               } catch (InterruptedIOException e) {
+                                       // we got interrupted: we are done...
+                               }
+                       }
+               } catch (Exception e) {
+                       Throwable cause = e;
+                       while (cause.getCause() != null) {
+                               cause = cause.getCause();
+                       }
+                       String origMsg = cause.getMessage();
+                       String msg = SshMessages.getMessageFor(cause);
+                       if ((cause instanceof JSchException) && origMsg != null && origMsg.startsWith("Auth")) { //$NON-NLS-1$
+                               if (origMsg.indexOf("cancel") >= 0) { //$NON-NLS-1$
+                                       msg = SshMessages.SSH_AUTH_CANCEL;
+                               } else if (origMsg.indexOf("fail") >= 0) { //$NON-NLS-1$
+                                       msg = SshMessages.SSH_AUTH_FAIL;
+                               }
+                       }
+                       if (!connectSucceeded) {
+                               String hostPort = host;
+                               if (port != ISshSettings.DEFAULT_SSH_PORT) {
+                                       hostPort = hostPort + ':' + port;
+                               }
+                               msg = NLS.bind(SshMessages.ERROR_CONNECTING, hostPort, msg);
+                       }
+                       connectFailed(msg, msg);
+               } finally {
+                       // make sure the terminal is disconnected when the thread ends
+                       try {
+                               disconnect();
+                       } finally {
+                               // when reading is done, we set the state to closed
+                               fControl.setState(TerminalState.CLOSED);
+                       }
+               }
+       }
+
+       /* default */ synchronized boolean isSessionConnected() {
+               return !fDisconnectHasBeenCalled && fSession != null && fSession.isConnected();
+       }
+
+       /**
+        * disconnect the ssh session
+        */
+       void disconnect() {
+               interrupt();
+               synchronized (this) {
+                       fDisconnectHasBeenCalled=true;
+                       if(fSession!=null) {
+                               try {
+                                       fSession.disconnect();
+                               } catch (Exception e) {
+                                       // Ignore NPE due to bug in JSch if disconnecting
+                                       // while not yet authenticated
+                               }
+                               fSession=null;
+                       }
+               }
+       }
+       /**
+        * Read the data from the ssh connection and display it in the terminal.
+        * @param in
+        * @throws IOException
+        */
+       private void readDataForever(InputStream in) throws IOException {
+               // read the data
+               byte bytes[]=new byte[32*1024];
+               int n;
+               // read until the thread gets interrupted....
+               while( (n=in.read(bytes))!=-1) {
+                       fControl.getRemoteToTerminalOutputStream().write(bytes,0,n);
+               }
+       }
+
+       protected static Display getStandardDisplay() {
+       Display display = Display.getCurrent();
+       if( display==null ) {
+               display = Display.getDefault();
+       }
+       return display;
+    }
+
+    private class MyUserInfo implements UserInfo, UIKeyboardInteractive {
+       /* default */ final String fConnectionId;
+       /* default */ final String fUser;
+       private String fPassword;
+       private String fPassphrase;
+       private int fAttemptCount;
+
+               public MyUserInfo(String connectionId, String user, String password) {
+                       fConnectionId = connectionId;
+                       fUser = user;
+                       fPassword = password;
+               }
+               @Override
+        public String getPassword() {
+                       return fPassword;
+               }
+               @Override
+        public boolean promptYesNo(final String str) {
+                       //need to switch to UI thread for prompting
+                       final boolean[] retval = new boolean[1];
+                       Display.getDefault().syncExec(new Runnable() {
+                               @Override
+                public void run() {
+                                       // [168197] Replace JFace MessagDialog by SWT MessageBox
+                                       //retval[0] = MessageDialog.openQuestion(null, SshMessages.WARNING, str);
+                                       if (isSessionConnected()) {
+                                               MessageBox mb = new MessageBox(fControl.getShell(), SWT.ICON_QUESTION | SWT.YES | SWT.NO);
+                                               mb.setText(SshMessages.WARNING);
+                                               mb.setMessage(str);
+                                               retval[0] = (mb.open() == SWT.YES);
+                                       } else {
+                                               retval[0] = false;
+                                       }
+                               }
+                       });
+                       return retval[0];
+               }
+               private String promptSecret(final String message) {
+                       final String[] retval = new String[1];
+                       getStandardDisplay().syncExec(new Runnable() {
+                               @Override
+                public void run() {
+                                       if (isSessionConnected()) {
+                                               UserValidationDialog uvd = new UserValidationDialog(null, fConnectionId, fUser, message);
+                                               uvd.setUsernameMutable(false);
+                                               if (uvd.open() == Window.OK) {
+                                                       retval[0] = uvd.getPassword();
+                                               } else {
+                                                       retval[0] = null;
+                                               }
+                                       } else {
+                                               retval[0] = null;
+                                       }
+                               }
+                       });
+                       return retval[0];
+               }
+               @Override
+        public String getPassphrase() {
+                       return fPassphrase;
+               }
+               @Override
+        public boolean promptPassphrase(String message) {
+                       fPassphrase = promptSecret(message);
+                       return (fPassphrase!=null);
+               }
+               @Override
+        public boolean promptPassword(final String message) {
+                       String _password = promptSecret(message);
+                       if (_password!=null) {
+                               fPassword=_password;
+                       return true;
+               }
+                       return false;
+               }
+               @Override
+        public void showMessage(final String message) {
+                       Display.getDefault().syncExec(new Runnable() {
+                               @Override
+                public void run() {
+                                       // [168197] Replace JFace MessagDialog by SWT MessageBox
+                                       // MessageDialog.openInformation(null, SshMessages.INFO, message);
+                                       if (isSessionConnected()) {
+                                               MessageBox mb = new MessageBox(fControl.getShell(), SWT.ICON_INFORMATION | SWT.OK);
+                                               mb.setText(SshMessages.INFO);
+                                               mb.setMessage(message);
+                                               mb.open();
+                                       }
+                               }
+                       });
+               }
+               @Override
+        public String[] promptKeyboardInteractive(final String destination,
+                               final String name, final String instruction,
+                               final String[] prompt, final boolean[] echo)
+               {
+                   if (prompt.length == 0) {
+                       // No need to prompt, just return an empty String array
+                       return new String[0];
+                   }
+                       try{
+                           if (fAttemptCount == 0 && fPassword != null && prompt.length == 1 && prompt[0].trim().equalsIgnoreCase("password:")) { //$NON-NLS-1$
+                               // Return the provided password the first time but always prompt on subsequent tries
+                               fAttemptCount++;
+                               return new String[] { fPassword };
+                           }
+                           final String[][] finResult = new String[1][];
+                           getStandardDisplay().syncExec(new Runnable() {
+                               @Override
+                    public void run() {
+                                       if (isSessionConnected()) {
+                                                       KeyboardInteractiveDialog dialog = new KeyboardInteractiveDialog(null, fConnectionId, destination, name, instruction, prompt, echo);
+                                                       dialog.open();
+                                                       finResult[0] = dialog.getResult();
+                                               } else {
+                                                       finResult[0] = null; // indicate cancel to JSch
+                                               }
+                               }
+                           });
+                           String[] result=finResult[0];
+                if (result == null)
+                    return null; // cancelled
+                           if (result.length == 1 && prompt.length == 1 && prompt[0].trim().equalsIgnoreCase("password:")) { //$NON-NLS-1$
+                               fPassword = result[0];
+                           }
+                           fAttemptCount++;
+                               return result;
+                       }
+                       catch(OperationCanceledException e){
+                               return null;
+                       }
+               }
+    }
+
+    private void connectFailed(String terminalText, String msg) {
+               Logger.log(terminalText);
+               fControl.displayTextInTerminal(terminalText);
+               // fControl.setMsg(msg);
+       }
+
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshConnector.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshConnector.java
new file mode 100644 (file)
index 0000000..1373e04
--- /dev/null
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [225792] Rename SshConnector.getTelnetSettings() to getSshSettings()
+ * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.connector;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.internal.terminal.provisional.api.NullSettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
+
+import com.jcraft.jsch.ChannelShell;
+import com.jcraft.jsch.JSch;
+
+public class SshConnector extends TerminalConnectorImpl {
+       private OutputStream fOutputStream;
+       private InputStream fInputStream;
+       private JSch fJsch;
+       private ChannelShell fChannel;
+       private SshConnection fConnection;
+       private final SshSettings fSettings;
+       private int fWidth;
+       private int fHeight;
+       public SshConnector() {
+               this(new SshSettings());
+       }
+       public SshConnector(SshSettings settings) {
+               fSettings=settings;
+       }
+       @Override
+    public void initialize() throws Exception {
+               fJsch=new JSch();
+       }
+       @Override
+    public void connect(ITerminalControl control) {
+               super.connect(control);
+               fConnection = new SshConnection(this,control);
+               fConnection.start();
+       }
+       @Override
+    synchronized public void doDisconnect() {
+               fConnection.disconnect();
+               if (getInputStream() != null) {
+                       try {
+                               getInputStream().close();
+                       } catch (Exception exception) {
+                               Logger.logException(exception);
+                       }
+               }
+
+               if (getTerminalToRemoteStream() != null) {
+                       try {
+                               getTerminalToRemoteStream().close();
+                       } catch (Exception exception) {
+                               Logger.logException(exception);
+                       }
+               }
+       }
+       @Override
+    public void setTerminalSize(int newWidth, int newHeight) {
+               if(fChannel!=null && (newWidth!=fWidth || newHeight!=fHeight)) {
+                       //avoid excessive communications due to change size requests by caching previous size
+                       fChannel.setPtySize(newWidth, newHeight, 8*newWidth, 8*newHeight);
+                       fWidth=newWidth;
+                       fHeight=newHeight;
+               }
+       }
+       public InputStream getInputStream() {
+               return fInputStream;
+       }
+       @Override
+    public OutputStream getTerminalToRemoteStream() {
+               return fOutputStream;
+       }
+       void setInputStream(InputStream inputStream) {
+               fInputStream = inputStream;
+       }
+       void setOutputStream(OutputStream outputStream) {
+               fOutputStream = outputStream;
+       }
+       /**
+        * Return the SSH Settings.
+        *
+        * @return the settings for a concrete connection.
+        * @since org.eclipse.tm.terminal.ssh 2.0 renamed from getTelnetSettings()
+        */
+       public ISshSettings getSshSettings() {
+               return fSettings;
+       }
+       @Override
+       public void setDefaultSettings() {
+               fSettings.load(new NullSettingsStore());
+       }
+       @Override
+    public String getSettingsSummary() {
+               return fSettings.getSummary();
+       }
+       @Override
+    public void load(ISettingsStore store) {
+               fSettings.load(store);
+       }
+       @Override
+    public void save(ISettingsStore store) {
+               fSettings.save(store);
+       }
+       protected JSch getJsch() {
+               return fJsch;
+       }
+       ChannelShell getChannel() {
+               return fChannel;
+       }
+       void setChannel(ChannelShell channel) {
+               fChannel = channel;
+               fWidth=-1;
+               fHeight=-1;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshMessages.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshMessages.java
new file mode 100644 (file)
index 0000000..d826e71
--- /dev/null
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives
+ * Martin Oberhuber (Wind River) - [206919] Improve SSH Terminal Error Reporting (Adopting code from org.eclipse.team.cvs.core)
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.connector;
+
+import java.lang.reflect.Field;
+
+import org.eclipse.osgi.util.NLS;
+
+public class SshMessages extends NLS {
+       static {
+               NLS.initializeMessages(SshMessages.class.getName(), SshMessages.class);
+       }
+       public static String USER;
+       public static String HOST;
+       public static String PORT;
+       public static String PASSWORD;
+       public static String TIMEOUT;
+       public static String KEEPALIVE;
+       public static String KEEPALIVE_Tooltip;
+       public static String WARNING;
+       public static String INFO;
+
+       //These are from org.eclipse.team.cvs.ui.CVSUIMessages
+       public static String UserValidationDialog_required;
+       public static String UserValidationDialog_labelUser;
+       public static String UserValidationDialog_labelPassword;
+       public static String UserValidationDialog_password;
+       public static String UserValidationDialog_user;
+       public static String UserValidationDialog_5;
+       public static String UserValidationDialog_6;
+       public static String UserValidationDialog_7;
+
+       public static String KeyboardInteractiveDialog_message;
+       public static String KeyboardInteractiveDialog_labelConnection;
+
+       public static String ERROR_CONNECTING;
+       public static String TerminalCommunicationException_io;
+       public static String SSH_AUTH_CANCEL;
+       public static String SSH_AUTH_FAIL;
+       public static String com_jcraft_jsch_JSchException;
+       public static String java_io_IOException;
+       public static String java_io_EOFException;
+       public static String java_io_InterruptedIOException;
+       public static String java_net_UnknownHostException;
+       public static String java_net_ConnectException;
+       public static String java_net_SocketException;
+       public static String java_net_NoRouteToHostException;
+
+    // <Copied from org.eclipse.team.cvs.core / CVSCommunicationException (c) IBM 2000, 2007>
+
+       public static String getMessageFor(Throwable throwable) {
+               String message = getMessage(getMessageKey(throwable));
+               if (message == null) {
+                       message = NLS.bind(SshMessages.TerminalCommunicationException_io, (new Object[] { throwable.toString() }));
+               } else {
+                       message = NLS.bind(message, (new Object[] { throwable.getMessage() }));
+               }
+               return message;
+       }
+
+       private static String getMessageKey(Throwable t) {
+               String name = t.getClass().getName();
+               name = name.replace('.', '_');
+               return name;
+       }
+
+       // </Copied from org.eclipse.team.cvs.core / CVSCommunicationException>
+       // <Copied from org.eclipse.team.cvs.core / Policy (c) IBM 2000, 2005>
+
+       public static String getMessage(String key) {
+               try {
+                       Field f = SshMessages.class.getDeclaredField(key);
+                       Object o = f.get(null);
+                       if (o instanceof String)
+                               return (String) o;
+               } catch (SecurityException e) {
+               } catch (NoSuchFieldException e) {
+               } catch (IllegalArgumentException e) {
+               } catch (IllegalAccessException e) {
+               }
+               return null;
+       }
+
+       // </Copied from org.eclipse.team.cvs.core / Policy>
+
+ }
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshMessages.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshMessages.properties
new file mode 100644 (file)
index 0000000..c6ed4b2
--- /dev/null
@@ -0,0 +1,53 @@
+###############################################################################
+# Copyright (c) 2000, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Michael Scharf (Wind River) - initial API and implementation 
+# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+# Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives
+# Martin Oberhuber (Wind River) - [206919] Improve SSH Terminal Error Reporting (Adopting code from org.eclipse.team.cvs.core)
+###############################################################################
+
+# NLS_MESSAGEFORMAT_VAR
+
+HOST = Host
+USER = User
+PORT = Port
+PASSWORD = Password
+TIMEOUT = Timeout (sec)
+KEEPALIVE = KeepAlive (sec)
+KEEPALIVE_Tooltip=Interval for sending keepalive messages in case of inactivity. Enter 0 to disable keepalives.
+WARNING = Warning
+INFO = Info
+
+#These are from cvs.ui/messages.properties
+UserValidationDialog_required=Password Required
+UserValidationDialog_labelUser={0}
+UserValidationDialog_labelPassword={1}
+UserValidationDialog_password=&Password:
+UserValidationDialog_user=&User name:
+UserValidationDialog_5=Connection:
+UserValidationDialog_6=&Save password
+UserValidationDialog_7=Saved passwords are stored on your computer in a file that is difficult, but not impossible, for an intruder to read.
+
+KeyboardInteractiveDialog_message=Keyboard Interactive authentication for {0}
+KeyboardInteractiveDialog_labelConnection=Enter values for the following connection: {0}
+
+#<Copied> from org.eclipse.team.cvs.core/messages.properties (c) IBM 2000, 2007
+ERROR_CONNECTING=Error connecting {0} : {1}
+TerminalCommunicationException_io=Communication error: {0}
+SSH_AUTH_CANCEL=SSH Authentication cancelled.
+SSH_AUTH_FAIL=SSH Authentication failed.
+com_jcraft_jsch_JSchException=SSH client error: {0}
+java_io_IOException=I/O exception occurred: {0}
+java_io_EOFException=End of file encountered: {0}
+java_io_InterruptedIOException=I/O has been interrupted.
+java_net_UnknownHostException=Cannot locate host: {0}
+java_net_ConnectException=Cannot connect to host: {0}
+java_net_SocketException=Socket Exception: {0}
+java_net_NoRouteToHostException={0}
+#</Copied> from org.eclipse.team.cvs.core 
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshSettings.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshSettings.java
new file mode 100644 (file)
index 0000000..f570bb6
--- /dev/null
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Mikhail Kalugin <fourdman@xored.com> - [201867] Improve Terminal SSH connection summary string
+ * Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives
+ *  Bryan Hunt - [313991] cannot programatically pass password to SshConnector
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.connector;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+
+public class SshSettings implements ISshSettings {
+    protected String fHost;
+    protected String fUser;
+    protected String fPassword;
+    protected String fPort;
+    protected String fTimeout;
+    protected String fKeepalive;
+       @Override
+    public String getHost() {
+               return fHost;
+       }
+
+       public void setHost(String strHost) {
+               fHost = strHost;
+       }
+
+       @Override
+    public String getSummary() {
+               String settings = getUser()+'@'+getHost();
+               if(getPort()!=ISshSettings.DEFAULT_SSH_PORT) {
+                       settings += ":" + getPort(); //$NON-NLS-1$
+               }
+               return settings;
+       }
+
+       @Override
+    public void load(ISettingsStore store) {
+               fHost = store.get("Host", "");//$NON-NLS-1$ //$NON-NLS-2$
+               fUser = store.get("User", "");//$NON-NLS-1$ //$NON-NLS-2$
+               // ISettingsStore providers have to make sure that
+               // the password is not saved in some as plain text
+               // on disk. [bug 313991]
+               fPassword = store.get("Password", "");//$NON-NLS-1$ //$NON-NLS-2$
+               fPort = store.get("Port", String.valueOf(ISshSettings.DEFAULT_SSH_PORT));//$NON-NLS-1$
+               fTimeout = store.get("Timeout", "0");//$NON-NLS-1$ //$NON-NLS-2$
+               fKeepalive = store.get("Keepalive", "300");//$NON-NLS-1$ //$NON-NLS-2$
+       }
+
+       @Override
+    public void save(ISettingsStore store) {
+               store.put("Host", fHost);//$NON-NLS-1$
+               store.put("User", fUser);//$NON-NLS-1$
+               store.put("Port", fPort);//$NON-NLS-1$
+               // We do *not* store the password in the settings because
+               // this can cause the password to be stored as plain text
+               // in some settings file
+               store.put("Timeout", fTimeout);//$NON-NLS-1$
+               store.put("Keepalive", fKeepalive);//$NON-NLS-1$
+       }
+
+
+       @Override
+    public int getTimeout() {
+               try {
+                       return Integer.parseInt(fTimeout);
+               } catch (NumberFormatException numberFormatException) {
+                       return 10;
+               }
+       }
+       public String getTimeoutString() {
+               return fTimeout;
+       }
+
+       public void setTimeout(String timeout) {
+               fTimeout = timeout;
+       }
+
+       @Override
+    public int getKeepalive() {
+               try {
+                       return Integer.parseInt(fKeepalive);
+               } catch (NumberFormatException numberFormatException) {
+                       return 300;
+               }
+       }
+       public String getKeepaliveString() {
+               return fKeepalive;
+       }
+
+       public void setKeepalive(String keepalive) {
+               fKeepalive = keepalive;
+       }
+
+       @Override
+    public String getUser() {
+               return fUser;
+       }
+
+       public void setUser(String user) {
+               fUser = user;
+       }
+       @Override
+    public int getPort() {
+               try {
+                       return Integer.parseInt(fPort);
+               } catch (NumberFormatException numberFormatException) {
+                       return ISshSettings.DEFAULT_SSH_PORT;
+               }
+       }
+
+       public String getPortString() {
+               return fPort;
+       }
+
+       public void setPort(String port) {
+               fPort = port;
+       }
+
+       @Override
+    public String getPassword() {
+               return fPassword;
+       }
+
+       public void setPassword(String password) {
+               fPassword = password;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshSettingsPage.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/SshSettingsPage.java
new file mode 100644 (file)
index 0000000..2887c39
--- /dev/null
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives
+ * Martin Oberhuber (Wind River) - [206917] Add validation for Terminal Settings
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.connector;
+
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.tm.internal.terminal.provisional.api.AbstractSettingsPage;
+
+public class SshSettingsPage extends AbstractSettingsPage {
+       private Text fHostText;
+       private Text fUser;
+       private Text fTimeout;
+       private Text fKeepalive;
+       private final SshSettings fTerminalSettings;
+       private Text fPort;
+       private Text fPassword;
+
+       public SshSettingsPage(SshSettings settings) {
+               fTerminalSettings=settings;
+       }
+       @Override
+    public void saveSettings() {
+               fTerminalSettings.setHost(fHostText.getText());
+               fTerminalSettings.setUser(fUser.getText());
+               fTerminalSettings.setPassword(fPassword.getText());
+               fTerminalSettings.setPort(fPort.getText());
+               fTerminalSettings.setTimeout(fTimeout.getText());
+               fTerminalSettings.setKeepalive(fKeepalive.getText());
+       }
+
+       @Override
+    public void loadSettings() {
+               if(fTerminalSettings!=null) {
+                       fHostText.setText(get(fTerminalSettings.getHost(),""));//$NON-NLS-1$
+                       fTimeout.setText(get(fTerminalSettings.getTimeoutString(),"0"));//$NON-NLS-1$
+                       fKeepalive.setText(get(fTerminalSettings.getKeepaliveString(),"300"));//$NON-NLS-1$
+                       fUser.setText(get(fTerminalSettings.getUser(),""));//$NON-NLS-1$
+                       fPort.setText(get(fTerminalSettings.getPortString(), String.valueOf(ISshSettings.DEFAULT_SSH_PORT)));
+                       fPassword.setText(get(fTerminalSettings.getPassword(),""));//$NON-NLS-1$
+               }
+       }
+       String get(String value, String def) {
+               if(value==null || value.length()==0)
+                       return def;
+               return value;
+       }
+       @Override
+    public boolean validateSettings() {
+               String message = null;
+               int messageType = IMessageProvider.NONE;
+               boolean valid = true;
+
+               if (fHostText.getText().trim().length() == 0) {
+                       String m = "Please enter a host IP or name."; //$NON-NLS-1$
+                       int mt = IMessageProvider.INFORMATION;
+                       updateControlDecoration(fHostText, m, mt);
+                       if (mt > messageType) { message = m; messageType = mt; }
+
+                       valid = false;
+               } else {
+                       updateControlDecoration(fHostText, null, IMessageProvider.NONE);
+               }
+               if (fUser.getText().trim().length() == 0) {
+                       String m = "Please enter a username."; //$NON-NLS-1$
+                       int mt = IMessageProvider.INFORMATION;
+                       updateControlDecoration(fUser, m, mt);
+                       if (mt > messageType) { message = m; messageType = mt; }
+
+                       valid = false;
+               } else {
+                       updateControlDecoration(fUser, null, IMessageProvider.NONE);
+               }
+               try {
+                       int p = Integer.parseInt(fPort.getText().trim());
+                       if (p <= 0 || p > 65535) {
+                               String m = "Invalid network port. Must be between 0 and 65535."; //$NON-NLS-1$
+                               int mt = IMessageProvider.ERROR;
+                               updateControlDecoration(fPort, m, mt);
+                               if (mt > messageType) { message = m; messageType = mt; }
+
+                               valid = false;
+                       } else {
+                               updateControlDecoration(fPort, null, IMessageProvider.NONE);
+                       }
+                       p = Integer.parseInt(fTimeout.getText().trim());
+                       if (p < 0) {
+                               String m = "Invalid timeout. Must be greater than 0."; //$NON-NLS-1$
+                               int mt = IMessageProvider.ERROR;
+                               updateControlDecoration(fTimeout, m, mt);
+                               if (mt > messageType) { message = m; messageType = mt; }
+
+                               valid = false;
+                       } else {
+                               updateControlDecoration(fTimeout, null, IMessageProvider.NONE);
+                       }
+                       p = Integer.parseInt(fKeepalive.getText().trim());
+                       if (p < 0) {
+                               String m = "Invalid keep alive. Must be greater than 0."; //$NON-NLS-1$
+                               int mt = IMessageProvider.ERROR;
+                               updateControlDecoration(fKeepalive, m, mt);
+                               if (mt > messageType) { message = m; messageType = mt; }
+
+                               valid = false;
+                       } else {
+                               updateControlDecoration(fKeepalive, null, IMessageProvider.NONE);
+                       }
+               } catch (Exception e) {
+                       valid = false;
+               }
+
+               setMessage(message, messageType);
+               return valid;
+       }
+       @Override
+    public void createControl(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NONE);
+               GridLayout gridLayout = new GridLayout(2, false);
+               GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+               gridData.horizontalIndent = FieldDecorationRegistry.getDefault().getMaximumDecorationWidth();
+
+               composite.setLayout(gridLayout);
+               composite.setLayoutData(gridData);
+
+               fHostText = createTextField(composite, SshMessages.HOST);
+               fUser = createTextField(composite, SshMessages.USER);
+               fPassword = createTextField(composite, SshMessages.PASSWORD,SWT.PASSWORD);
+               fTimeout = createTextField(composite, SshMessages.TIMEOUT);
+               fKeepalive = createTextField(composite, SshMessages.KEEPALIVE);
+               fKeepalive.setToolTipText(SshMessages.KEEPALIVE_Tooltip);
+               fPort = createTextField(composite, SshMessages.PORT);
+               loadSettings();
+       }
+       private Text createTextField(Composite composite, String labelTxt, int textOptions) {
+               GridData gridData;
+               // Add label
+               Label ctlLabel = new Label(composite, SWT.RIGHT);
+               ctlLabel.setText(labelTxt + ":"); //$NON-NLS-1$
+
+               // Add control
+               gridData = new GridData(GridData.FILL_HORIZONTAL);
+               final Text text= new Text(composite, SWT.BORDER | textOptions);
+               text.setLayoutData(gridData);
+               text.addModifyListener(new ModifyListener() {
+                       @Override
+            public void modifyText(ModifyEvent e) {
+                               fireListeners(text);
+                       }
+               });
+               createControlDecoration(text);
+               return text;
+       }
+       private Text createTextField(Composite composite, String labelTxt) {
+               return createTextField(composite, labelTxt, 0);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/UserValidationDialog.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/connector/UserValidationDialog.java
new file mode 100644 (file)
index 0000000..ab81b3b
--- /dev/null
@@ -0,0 +1,283 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * Martin Oberhuber (Wind River) - copied from org.eclipse.team.cvs.ui
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.connector;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * A dialog for prompting for a username and password
+ */
+public class UserValidationDialog extends TrayDialog {
+       // widgets
+       protected Text usernameField;
+       protected Text passwordField;
+       protected Button allowCachingButton;
+
+       protected String domain;
+       protected String defaultUsername;
+       protected String password = null;
+       protected boolean allowCaching = false;
+       protected Image keyLockImage;
+
+       // whether or not the username can be changed
+       protected boolean isUsernameMutable = true;
+       protected String username = null;
+       protected String message = null;
+
+       /**
+        * Creates a new UserValidationDialog.
+        *
+        * @param parentShell  the parent shell
+        * @param location  the location
+        * @param defaultName  the default user name
+        * @param message  a mesage to display to the user
+        */
+       public UserValidationDialog(Shell parentShell, String location, String defaultName, String message) {
+               super(parentShell);
+        setShellStyle(getShellStyle() | SWT.RESIZE);
+               this.defaultUsername = defaultName;
+               this.domain = location;
+               this.message = message;
+       }
+       /**
+        * @see Window#configureShell
+        */
+       @Override
+    protected void configureShell(Shell newShell) {
+               super.configureShell(newShell);
+               newShell.setText(SshMessages.UserValidationDialog_required);
+               // set F1 help
+        PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, ISshConstants.HELP_USER_VALIDATION_DIALOG);
+       }
+       /**
+        * @see Window#create
+        */
+       @Override
+    public void create() {
+               super.create();
+               // add some default values
+               usernameField.setText(defaultUsername);
+
+               if (isUsernameMutable) {
+                       // give focus to username field
+                       usernameField.selectAll();
+                       usernameField.setFocus();
+               } else {
+                       usernameField.setEditable(false);
+                       passwordField.setFocus();
+               }
+       }
+
+       /**
+        * @see Dialog#createDialogArea
+        */
+       @Override
+    protected Control createDialogArea(Composite parent) {
+               Composite top = new Composite(parent, SWT.NONE);
+               GridLayout layout = new GridLayout();
+               layout.numColumns = 2;
+
+               top.setLayout(layout);
+               top.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               Composite imageComposite = new Composite(top, SWT.NONE);
+               layout = new GridLayout();
+               imageComposite.setLayout(layout);
+               imageComposite.setLayoutData(new GridData(GridData.FILL_VERTICAL));
+
+               Composite main = new Composite(top, SWT.NONE);
+               layout = new GridLayout();
+               layout.numColumns = 3;
+               main.setLayout(layout);
+               main.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               Label imageLabel = new Label(imageComposite, SWT.NONE);
+               //keyLockImage = TeamImages.getImageDescriptor(ITeamUIImages.IMG_KEY_LOCK).createImage();
+               //imageLabel.setImage(keyLockImage);
+               GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
+               imageLabel.setLayoutData(data);
+
+               if (message != null) {
+                       Label messageLabel = new Label(main, SWT.WRAP);
+                       messageLabel.setText(message);
+                       data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
+                       data.horizontalSpan = 3;
+                       data.widthHint = 300;
+                       messageLabel.setLayoutData(data);
+               }
+               if (domain != null) {
+                       Label d = new Label(main, SWT.WRAP);
+                       d.setText(SshMessages.UserValidationDialog_5);
+                       data = new GridData();
+                       d.setLayoutData(data);
+                       Label label = new Label(main, SWT.WRAP);
+                       if (isUsernameMutable) {
+                               label.setText(NLS.bind(SshMessages.UserValidationDialog_labelUser, new String[] { domain }));
+                       } else {
+                               label.setText(NLS.bind(SshMessages.UserValidationDialog_labelPassword, (new Object[]{defaultUsername, domain})));
+                       }
+                       data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
+                       data.horizontalSpan = 2;
+                       data.widthHint = 300;
+                       label.setLayoutData(data);
+               }
+               createUsernameFields(main);
+               createPasswordFields(main);
+
+               if(domain != null) {
+                       allowCachingButton = new Button(main, SWT.CHECK);
+                       allowCachingButton.setText(SshMessages.UserValidationDialog_6);
+                       data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
+                       data.horizontalSpan = 3;
+                       allowCachingButton.setLayoutData(data);
+                       allowCachingButton.addSelectionListener(new SelectionAdapter() {
+                               @Override
+                public void widgetSelected(SelectionEvent e) {
+                                       allowCaching = allowCachingButton.getSelection();
+                               }
+                       });
+                       Composite warningComposite = new Composite(main, SWT.NONE);
+                       layout = new GridLayout();
+                       layout.numColumns = 2;
+                       layout.marginHeight = 0;
+                       layout.marginHeight = 0;
+                       warningComposite.setLayout(layout);
+                       data = new GridData(GridData.FILL_HORIZONTAL);
+                       data.horizontalSpan = 3;
+                       warningComposite.setLayoutData(data);
+                       Label warningLabel = new Label(warningComposite, SWT.NONE);
+                       warningLabel.setImage(getImage(DLG_IMG_MESSAGE_WARNING));
+                       warningLabel.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_BEGINNING));
+                       Label warningText = new Label(warningComposite, SWT.WRAP);
+                       warningText.setText(SshMessages.UserValidationDialog_7);
+                       data = new GridData(GridData.FILL_HORIZONTAL);
+                       data.widthHint = 300;
+                       warningText.setLayoutData(data);
+               }
+
+        Dialog.applyDialogFont(parent);
+
+               return main;
+       }
+
+       /**
+        * Creates the three widgets that represent the password entry area.
+        *
+        * @param parent  the parent of the widgets
+        */
+       protected void createPasswordFields(Composite parent) {
+               new Label(parent, SWT.NONE).setText(SshMessages.UserValidationDialog_password);
+
+               passwordField = new Text(parent, SWT.BORDER | SWT.PASSWORD);
+               GridData data = new GridData(GridData.FILL_HORIZONTAL);
+               data.horizontalSpan = 2;
+               data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH);
+               passwordField.setLayoutData(data);
+       }
+       /**
+        * Creates the three widgets that represent the user name entry area.
+        *
+        * @param parent  the parent of the widgets
+        */
+       protected void createUsernameFields(Composite parent) {
+               new Label(parent, SWT.NONE).setText(SshMessages.UserValidationDialog_user);
+
+               usernameField = new Text(parent, SWT.BORDER);
+               GridData data = new GridData(GridData.FILL_HORIZONTAL);
+               data.horizontalSpan = 2;
+               data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH);
+               usernameField.setLayoutData(data);
+       }
+
+       /**
+        * Returns the password entered by the user, or null
+        * if the user cancelled.
+        *
+        * @return the entered password
+        */
+       public String getPassword() {
+               return password;
+       }
+
+       /**
+        * Returns the username entered by the user, or null
+        * if the user cancelled.
+        *
+        * @return the entered username
+        */
+       public String getUsername() {
+               return username;
+       }
+
+       /**
+        * Returns <code>true</code> if the save password checkbox was selected.
+        * @return <code>true</code> if the save password checkbox was selected and <code>false</code>
+        * otherwise.
+        */
+       public boolean getAllowCaching() {
+               return allowCaching;
+       }
+
+       /**
+        * Notifies that the ok button of this dialog has been pressed.
+        * <p>
+        * The default implementation of this framework method sets
+        * this dialog's return code to <code>Window.OK</code>
+        * and closes the dialog. Subclasses may override.
+        * </p>
+        */
+       @Override
+    protected void okPressed() {
+               password = passwordField.getText();
+               username = usernameField.getText();
+
+               super.okPressed();
+       }
+       /**
+        * Sets whether or not the username field should be mutable.
+        * This method must be called before create(), otherwise it
+        * will be ignored.
+        *
+        * @param value  whether the username is mutable
+        */
+       public void setUsernameMutable(boolean value) {
+               isUsernameMutable = value;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.Dialog#close()
+        */
+       @Override
+    public boolean close() {
+               if(keyLockImage != null) {
+                       keyLockImage.dispose();
+               }
+               return super.close();
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/controls/SshWizardConfigurationPanel.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/controls/SshWizardConfigurationPanel.java
new file mode 100644 (file)
index 0000000..16cae8c
--- /dev/null
@@ -0,0 +1,422 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [361352] [TERMINALS][SSH] Add SSH terminal support
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.controls;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.equinox.security.storage.ISecurePreferences;
+import org.eclipse.equinox.security.storage.SecurePreferencesFactory;
+import org.eclipse.equinox.security.storage.StorageException;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.tm.internal.terminal.provisional.api.AbstractSettingsPage;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
+import org.eclipse.tm.terminal.connector.ssh.connector.SshConnector;
+import org.eclipse.tm.terminal.connector.ssh.connector.SshSettings;
+import org.eclipse.tm.terminal.connector.ssh.connector.SshSettingsPage;
+import org.eclipse.tm.terminal.connector.ssh.nls.Messages;
+import org.eclipse.tm.terminal.view.core.TerminalContextPropertiesProviderFactory;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.IContextPropertiesConstants;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel;
+
+/**
+ * SSH wizard configuration panel implementation.
+ */
+public class SshWizardConfigurationPanel extends AbstractExtendedConfigurationPanel {
+
+       private static final String SAVE_USER = "saveUser"; //$NON-NLS-1$
+       private static final String SAVE_PASSWORD = "savePassword"; //$NON-NLS-1$
+
+    private SshSettings sshSettings;
+       private ISettingsPage sshSettingsPage;
+       private Button userButton;
+       private Button passwordButton;
+
+       /**
+        * Constructor.
+        *
+        * @param container The configuration panel container or <code>null</code>.
+        */
+       public SshWizardConfigurationPanel(IConfigurationPanelContainer container) {
+           super(container);
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       public void setupPanel(Composite parent) {
+               Composite panel = new Composite(parent, SWT.NONE);
+               panel.setLayout(new GridLayout());
+               GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+               panel.setLayoutData(data);
+
+               // Create the host selection combo
+               if (isWithoutSelection()) createHostsUI(panel, true);
+
+               SshConnector conn = new SshConnector();
+               sshSettings = (SshSettings) conn.getSshSettings();
+               sshSettings.setHost(getSelectionHost());
+               sshSettings.setUser(getDefaultUser());
+
+               sshSettingsPage = new SshSettingsPage(sshSettings);
+               if (sshSettingsPage instanceof AbstractSettingsPage) {
+                       ((AbstractSettingsPage)sshSettingsPage).setHasControlDecoration(true);
+               }
+               sshSettingsPage.createControl(panel);
+
+               // Add the listener to the settings page
+               sshSettingsPage.addListener(new ISettingsPage.Listener() {
+                       @Override
+                       public void onSettingsPageChanged(Control control) {
+                               if (getContainer() != null) getContainer().validate();
+                       }
+               });
+
+               // Create the encoding selection combo
+               createEncodingUI(panel, true);
+
+               // if user and password for host should be saved or not
+               createSaveButtonsUI(panel, true);
+
+               setControl(panel);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setupData(java.util.Map)
+        */
+       @Override
+       public void setupData(Map<String, Object> data) {
+               if (data == null || sshSettings == null || sshSettingsPage == null) return;
+
+               String value = (String)data.get(ITerminalsConnectorConstants.PROP_IP_HOST);
+               if (value != null) sshSettings.setHost(value);
+
+               Object v = data.get(ITerminalsConnectorConstants.PROP_IP_PORT);
+               value = v != null ? v.toString() : null;
+               if (value != null) sshSettings.setPort(value);
+
+               v = data.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
+               value = v != null ? v.toString() : null;
+               if (value != null) sshSettings.setTimeout(value);
+
+               v = data.get(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE);
+               value = v != null ? v.toString() : null;
+               if (value != null) sshSettings.setKeepalive(value);
+
+               value = (String)data.get(ITerminalsConnectorConstants.PROP_SSH_PASSWORD);
+               if (value != null) sshSettings.setPassword(value);
+
+               value = (String)data.get(ITerminalsConnectorConstants.PROP_SSH_USER);
+               if (value != null) sshSettings.setUser(value);
+
+               value = (String)data.get(ITerminalsConnectorConstants.PROP_ENCODING);
+               if (value != null) setEncoding(value);
+
+               sshSettingsPage.loadSettings();
+    }
+
+       /**
+        * Returns the default user name.
+        *
+        * @return The default user name.
+        */
+       private String getDefaultUser() {
+               ISelection selection = getSelection();
+               if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+                       Object element = ((IStructuredSelection) selection).getFirstElement();
+                       ITerminalContextPropertiesProvider provider = TerminalContextPropertiesProviderFactory.getProvider(element);
+                       if (provider != null) {
+                               Object user = provider.getProperty(element, IContextPropertiesConstants.PROP_DEFAULT_USER);
+                               if (user instanceof String) return ((String) user).trim();
+                       }
+               }
+
+               return System.getProperty("user.name"); //$NON-NLS-1$
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map)
+        */
+       @Override
+       public void extractData(Map<String, Object> data) {
+               if (data == null) return;
+
+       // set the terminal connector id for ssh
+       data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, "org.eclipse.tm.terminal.connector.ssh.SshConnector"); //$NON-NLS-1$
+
+       sshSettingsPage.saveSettings();
+               data.put(ITerminalsConnectorConstants.PROP_IP_HOST,sshSettings.getHost());
+               data.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.valueOf(sshSettings.getPort()));
+               data.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.valueOf(sshSettings.getTimeout()));
+               data.put(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE, Integer.valueOf(sshSettings.getKeepalive()));
+               data.put(ITerminalsConnectorConstants.PROP_SSH_PASSWORD, sshSettings.getPassword());
+               data.put(ITerminalsConnectorConstants.PROP_SSH_USER, sshSettings.getUser());
+               data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding());
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String)
+        */
+       @Override
+       protected void fillSettingsForHost(String host) {
+               boolean saveUser = true;
+               boolean savePassword = false;
+               if (host != null && host.length() != 0){
+                       if (hostSettingsMap.containsKey(host)){
+                               Map<String, String> hostSettings = hostSettingsMap.get(host);
+                               if (hostSettings.get(ITerminalsConnectorConstants.PROP_IP_HOST) != null) {
+                                       sshSettings.setHost(hostSettings.get(ITerminalsConnectorConstants.PROP_IP_HOST));
+                               }
+                               if (hostSettings.get(ITerminalsConnectorConstants.PROP_IP_PORT) != null) {
+                                       sshSettings.setPort(hostSettings.get(ITerminalsConnectorConstants.PROP_IP_PORT));
+                               }
+                               if (hostSettings.get(ITerminalsConnectorConstants.PROP_TIMEOUT) != null) {
+                                       sshSettings.setTimeout(hostSettings.get(ITerminalsConnectorConstants.PROP_TIMEOUT));
+                               }
+                               if (hostSettings.get(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE) != null) {
+                                       sshSettings.setKeepalive(hostSettings.get(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE));
+                               }
+                               if (hostSettings.get(ITerminalsConnectorConstants.PROP_SSH_USER) != null) {
+                                       sshSettings.setUser(hostSettings.get(ITerminalsConnectorConstants.PROP_SSH_USER));
+                               }
+                               if (hostSettings.get(SAVE_PASSWORD) != null) {
+                                       savePassword = new Boolean(hostSettings.get(SAVE_PASSWORD)).booleanValue();
+                               }
+                               if (!savePassword){
+                                       sshSettings.setPassword(""); //$NON-NLS-1$
+                               } else {
+                                       String password = accessSecurePassword(sshSettings.getHost());
+                                       if (password != null) {
+                                               sshSettings.setPassword(password);
+                                       }
+                               }
+
+                               String encoding = hostSettings.get(ITerminalsConnectorConstants.PROP_ENCODING);
+                               if (encoding == null || "null".equals(encoding)) { //$NON-NLS-1$
+                                       String defaultEncoding = getSelectionEncoding();
+                                       encoding = defaultEncoding != null && !"".equals(defaultEncoding.trim()) ? defaultEncoding.trim() : "ISO-8859-1"; //$NON-NLS-1$ //$NON-NLS-2$
+                               }
+                               setEncoding(encoding);
+                       } else {
+                               sshSettings.setHost(getSelectionHost());
+                               sshSettings.setUser(getDefaultUser());
+                               saveUser = true;
+                               savePassword = false;
+                       }
+                       // set settings in page
+                       sshSettingsPage.loadSettings();
+                       userButton.setSelection(saveUser);
+                       passwordButton.setSelection(savePassword);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
+        */
+       @Override
+    public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
+       saveSettingsForHost(true);
+       super.doSaveWidgetValues(settings, idPrefix);
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean)
+        */
+       @Override
+       protected void saveSettingsForHost(boolean add) {
+               boolean saveUser = userButton.getSelection();
+               boolean savePassword = passwordButton.getSelection();
+               String host = getHostFromSettings();
+               if (host != null && host.length() != 0) {
+                       if (hostSettingsMap.containsKey(host)){
+                               Map<String, String> hostSettings = hostSettingsMap.get(host);
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_IP_HOST, sshSettings.getHost());
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.toString(sshSettings.getPort()));
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.toString(sshSettings.getTimeout()));
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE, Integer.toString(sshSettings.getKeepalive()));
+                               if (saveUser) {
+                                       if (sshSettings.getUser() != null) {
+                                               hostSettings.put(ITerminalsConnectorConstants.PROP_SSH_USER, sshSettings.getUser());
+                                       } else {
+                                               hostSettings.remove(ITerminalsConnectorConstants.PROP_SSH_USER);
+                                       }
+                               }
+                               else {
+                                       hostSettings.remove(ITerminalsConnectorConstants.PROP_SSH_USER);
+                               }
+
+                               String encoding = getEncoding();
+                               if (encoding != null) {
+                                       String defaultEncoding = getSelectionEncoding();
+                                       if (defaultEncoding != null && defaultEncoding.trim().equals(encoding)) {
+                                               encoding = null;
+                                       }
+                               }
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_ENCODING, encoding);
+                               hostSettings.put(SAVE_USER, Boolean.toString(saveUser));
+                               hostSettings.put(SAVE_PASSWORD, Boolean.toString(savePassword));
+
+                               if (savePassword && sshSettings.getPassword() != null && sshSettings.getPassword().length() != 0){
+                                       saveSecurePassword(host, sshSettings.getPassword());
+                               }
+
+                               // maybe unchecked the password button - so try to remove a saved password - if any
+                               if (!savePassword) removeSecurePassword(host);
+                       } else if (add) {
+                               Map<String, String> hostSettings = new HashMap<String, String>();
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_IP_HOST, sshSettings.getHost());
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.toString(sshSettings.getPort()));
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.toString(sshSettings.getTimeout()));
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE, Integer.toString(sshSettings.getKeepalive()));
+                               if (saveUser) {
+                                       if (sshSettings.getUser() != null) {
+                                               hostSettings.put(ITerminalsConnectorConstants.PROP_SSH_USER, sshSettings.getUser());
+                                       }
+                               }
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding());
+                               hostSettings.put(SAVE_USER, Boolean.toString(saveUser));
+                               hostSettings.put(SAVE_PASSWORD, Boolean.toString(savePassword));
+                               hostSettingsMap.put(host, hostSettings);
+
+                               if (savePassword && sshSettings.getPassword() != null && sshSettings.getPassword().length() != 0){
+                                       saveSecurePassword(host, sshSettings.getPassword());
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Save the password to the secure storage.
+        *
+        * @param host The host. Must not be <code>null</code>.
+        * @param password The password. Must not be <code>null</code>.
+        */
+       private void saveSecurePassword(String host, String password) {
+               Assert.isNotNull(host);
+               Assert.isNotNull(password);
+
+               // To access the secure storage, we need the preference instance
+               ISecurePreferences preferences = SecurePreferencesFactory.getDefault();
+               if (preferences != null) {
+                       // Construct the secure preferences node key
+                       String nodeKey = "/Target Explorer SSH Password/" + host; //$NON-NLS-1$
+                       ISecurePreferences node = preferences.node(nodeKey);
+                       if (node != null) {
+                               try {
+                                       node.put("password", password, true); //$NON-NLS-1$
+                               }
+                               catch (StorageException ex) { /* ignored on purpose */ }
+                       }
+               }
+       }
+
+       /**
+        * Reads the password from the secure storage.
+        *
+        * @param host The host. Must not be <code>null</code>.
+        * @return The password or <code>null</code>.
+        */
+       private String accessSecurePassword(String host) {
+               Assert.isNotNull(host);
+
+               // To access the secure storage, we need the preference instance
+               ISecurePreferences preferences = SecurePreferencesFactory.getDefault();
+               if (preferences != null) {
+                       // Construct the secure preferences node key
+                       String nodeKey = "/Target Explorer SSH Password/" + host; //$NON-NLS-1$
+                       ISecurePreferences node = preferences.node(nodeKey);
+                       if (node != null) {
+                               String password = null;
+                               try {
+                                       password = node.get("password", null); //$NON-NLS-1$
+                               }
+                               catch (StorageException ex) { /* ignored on purpose */ }
+
+                               return password;
+                       }
+               }
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#removeSecurePassword(java.lang.String)
+        */
+       @Override
+       protected void removeSecurePassword(String host) {
+               Assert.isNotNull(host);
+
+               // To access the secure storage, we need the preference instance
+               ISecurePreferences preferences = SecurePreferencesFactory.getDefault();
+               if (preferences != null) {
+                       // Construct the secure preferences node key
+                       String nodeKey = "/Target Explorer SSH Password/" + host; //$NON-NLS-1$
+                       ISecurePreferences node = preferences.node(nodeKey);
+                       if (node != null) {
+                               node.remove("password"); //$NON-NLS-1$
+                       }
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
+        */
+       @Override
+    public boolean isValid(){
+               return isEncodingValid() && sshSettingsPage.validateSettings();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings()
+        */
+       @Override
+    protected String getHostFromSettings() {
+               sshSettingsPage.saveSettings();
+           return sshSettings.getHost();
+    }
+
+       private void createSaveButtonsUI(final Composite parent, boolean separator) {
+               Assert.isNotNull(parent);
+
+               if (separator) {
+                       Label sep = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
+                       sep.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+               }
+
+               Composite panel = new Composite(parent, SWT.NONE);
+               GridLayout layout = new GridLayout(2, false);
+               layout.marginHeight = 0;
+               layout.marginWidth = 0;
+               panel.setLayout(layout);
+               panel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+               userButton = new Button(panel, SWT.CHECK);
+               userButton.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, false, false));
+               userButton.setText(Messages.SshWizardConfigurationPanel_saveUser);
+
+               passwordButton = new Button(panel, SWT.CHECK);
+               passwordButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+               passwordButton.setText(Messages.SshWizardConfigurationPanel_savePassword);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/launcher/SshLauncherDelegate.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/launcher/SshLauncherDelegate.java
new file mode 100644 (file)
index 0000000..a7e4aed
--- /dev/null
@@ -0,0 +1,189 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [361352] [TERMINALS][SSH] Add SSH terminal support
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.launcher;
+
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
+import org.eclipse.tm.terminal.connector.ssh.connector.ISshSettings;
+import org.eclipse.tm.terminal.connector.ssh.connector.SshSettings;
+import org.eclipse.tm.terminal.connector.ssh.controls.SshWizardConfigurationPanel;
+import org.eclipse.tm.terminal.connector.ssh.nls.Messages;
+import org.eclipse.tm.terminal.view.core.TerminalServiceFactory;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
+import org.eclipse.tm.terminal.view.ui.internal.SettingsStore;
+import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate;
+
+/**
+ * SSH launcher delegate implementation.
+ */
+@SuppressWarnings("restriction")
+public class SshLauncherDelegate extends AbstractLauncherDelegate {
+       // The SSH terminal connection memento handler
+       private final IMementoHandler mementoHandler = new SshMementoHandler();
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#needsUserConfiguration()
+        */
+       @Override
+       public boolean needsUserConfiguration() {
+               return true;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getPanel(org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer)
+        */
+       @Override
+       public IConfigurationPanel getPanel(IConfigurationPanelContainer container) {
+               return new SshWizardConfigurationPanel(container);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#execute(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
+        */
+       @Override
+       public void execute(Map<String, Object> properties, ITerminalService.Done done) {
+               Assert.isNotNull(properties);
+
+               // Set the terminal tab title
+               String terminalTitle = getTerminalTitle(properties);
+               if (terminalTitle != null) {
+                       properties.put(ITerminalsConnectorConstants.PROP_TITLE, terminalTitle);
+               }
+
+               // For SSH terminals, force a new terminal tab each time it is launched,
+               // if not set otherwise from outside
+               if (!properties.containsKey(ITerminalsConnectorConstants.PROP_FORCE_NEW)) {
+                       properties.put(ITerminalsConnectorConstants.PROP_FORCE_NEW, Boolean.TRUE);
+               }
+
+               // Get the terminal service
+               ITerminalService terminal = TerminalServiceFactory.getService();
+               // If not available, we cannot fulfill this request
+               if (terminal != null) {
+                       terminal.openConsole(properties, done);
+               }
+       }
+
+       /**
+        * Returns the terminal title string.
+        * <p>
+        * The default implementation constructs a title like &quot;SSH @ host (Start time) &quot;.
+        *
+        * @return The terminal title string or <code>null</code>.
+        */
+    private String getTerminalTitle(Map<String, Object> properties) {
+               // Try to see if the user set a title explicitly via the properties map.
+               String title = getDefaultTerminalTitle(properties);
+               if (title != null) return title;
+
+               //No title,try to calculate the title
+               String host = (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST);
+               String user = (String)properties.get(ITerminalsConnectorConstants.PROP_SSH_USER);
+               Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT);
+               String port = value != null ? value.toString() : null;
+
+               if (host != null && user!= null) {
+                       DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
+                       String date = format.format(new Date(System.currentTimeMillis()));
+                       if (port != null && Integer.valueOf(port).intValue() != ISshSettings.DEFAULT_SSH_PORT) {
+                               return NLS.bind(Messages.SshLauncherDelegate_terminalTitle_port, new String[]{user, host, port, date});
+                       }
+                       return NLS.bind(Messages.SshLauncherDelegate_terminalTitle, new String[]{user, host, date});
+               }
+
+               return Messages.SshLauncherDelegate_terminalTitle_default;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
+        */
+    @Override
+       public Object getAdapter(Class adapter) {
+               if (IMementoHandler.class.equals(adapter)) {
+                       return mementoHandler;
+               }
+           return super.getAdapter(adapter);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map)
+        */
+    @Override
+       public ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
+       Assert.isNotNull(properties);
+
+       // Check for the terminal connector id
+       String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
+               if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.ssh.SshConnector"; //$NON-NLS-1$
+
+               // Extract the ssh properties
+               String host = (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST);
+               Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT);
+               String port = value != null ? value.toString() : null;
+               value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
+               String timeout = value != null ? value.toString() : null;
+               value = properties.get(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE);
+               String keepAlive = value != null ? value.toString() : null;
+               String password = (String)properties.get(ITerminalsConnectorConstants.PROP_SSH_PASSWORD);
+               String user = (String)properties.get(ITerminalsConnectorConstants.PROP_SSH_USER);
+
+               int portOffset = 0;
+               if (properties.get(ITerminalsConnectorConstants.PROP_IP_PORT_OFFSET) instanceof Integer) {
+                       portOffset = ((Integer)properties.get(ITerminalsConnectorConstants.PROP_IP_PORT_OFFSET)).intValue();
+                       if (portOffset < 0) portOffset = 0;
+               }
+
+               // The real port to connect to is port + portOffset
+               if (port != null) {
+                       port = Integer.toString(Integer.decode(port).intValue() + portOffset);
+               }
+
+               // Construct the ssh settings store
+               ISettingsStore store = new SettingsStore();
+
+               // Construct the telnet settings
+               SshSettings sshSettings = new SshSettings();
+               sshSettings.setHost(host);
+               sshSettings.setPort(port);
+               sshSettings.setTimeout(timeout);
+               sshSettings.setKeepalive(keepAlive);
+               sshSettings.setPassword(password);
+               sshSettings.setUser(user);
+
+               // And save the settings to the store
+               sshSettings.save(store);
+
+               // MWE TODO make sure this is NOT passed outside as this is plain text
+               store.put("Password", password); //$NON-NLS-1$
+
+               // Construct the terminal connector instance
+               ITerminalConnector connector = TerminalConnectorExtension.makeTerminalConnector(connectorId);
+               if (connector != null) {
+                       // Apply default settings
+                       connector.setDefaultSettings();
+                       // And load the real settings
+                       connector.load(store);
+               }
+
+               return connector;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/launcher/SshMementoHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/launcher/SshMementoHandler.java
new file mode 100644 (file)
index 0000000..cc74c14
--- /dev/null
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.launcher;
+
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.equinox.security.storage.ISecurePreferences;
+import org.eclipse.equinox.security.storage.SecurePreferencesFactory;
+import org.eclipse.equinox.security.storage.StorageException;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
+import org.eclipse.ui.IMemento;
+
+/**
+ * SSH terminal connection memento handler implementation.
+ */
+public class SshMementoHandler implements IMementoHandler {
+
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#saveState(org.eclipse.ui.IMemento, java.util.Map)
+        */
+       @Override
+       public void saveState(IMemento memento, Map<String, Object> properties) {
+               Assert.isNotNull(memento);
+               Assert.isNotNull(properties);
+
+               // Do not write the terminal title to the memento -> needs to
+               // be recreated at the time of restoration.
+               memento.putString(ITerminalsConnectorConstants.PROP_IP_HOST, (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST));
+               Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT);
+               memento.putInteger(ITerminalsConnectorConstants.PROP_IP_PORT, value instanceof Integer ? ((Integer)value).intValue() : -1);
+               value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
+               memento.putInteger(ITerminalsConnectorConstants.PROP_TIMEOUT, value instanceof Integer ? ((Integer)value).intValue() : -1);
+               value = properties.get(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE);
+               memento.putInteger(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE, value instanceof Integer ? ((Integer)value).intValue() : -1);
+               memento.putString(ITerminalsConnectorConstants.PROP_SSH_USER, (String)properties.get(ITerminalsConnectorConstants.PROP_SSH_USER));
+               memento.putString(ITerminalsConnectorConstants.PROP_ENCODING, (String)properties.get(ITerminalsConnectorConstants.PROP_ENCODING));
+
+               // The password is stored within the Eclipse secure preferences -> no need to store it to the memento
+               //
+               // If ever needed, this is an example on how to encrypt the password using 3DES. Do not remove!
+
+               /*
+               String password = properties.getStringProperty(ITerminalsConnectorConstants.PROP_SSH_PASSWORD);
+               if (password != null) {
+                       try {
+                       // Generate a temporary key. In practice, you would save this key.
+                       // See also Encrypting with DES Using a Pass Phrase.
+                       // SecretKey key = KeyGenerator.getInstance("DESede").generateKey();
+
+                               SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede"); //$NON-NLS-1$
+                               SecretKey key = factory.generateSecret(new DESKeySpec((ITerminalsConnectorConstants.PROP_SSH_PASSWORD + ".SshMementoHandler").getBytes("UTF-8"))); //$NON-NLS-1$ //$NON-NLS-2$
+
+                   Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); //$NON-NLS-1$
+                   cipher.init(Cipher.ENCRYPT_MODE, key);
+
+                   String encrypedPwd = new String(Base64.encode(cipher.doFinal(password.getBytes("UTF-8")))); //$NON-NLS-1$
+                   memento.putString(ITerminalsConnectorConstants.PROP_SSH_PASSWORD, encrypedPwd);
+            }
+            catch (Exception e) {
+               if (Platform.inDebugMode()) e.printStackTrace();
+            }
+               }
+               */
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#restoreState(org.eclipse.ui.IMemento, java.util.Map)
+        */
+       @Override
+       public void restoreState(IMemento memento, Map<String, Object> properties) {
+               Assert.isNotNull(memento);
+               Assert.isNotNull(properties);
+
+               // Restore the terminal properties from the memento
+               properties.put(ITerminalsConnectorConstants.PROP_IP_HOST, memento.getString(ITerminalsConnectorConstants.PROP_IP_HOST));
+               properties.put(ITerminalsConnectorConstants.PROP_IP_PORT, memento.getInteger(ITerminalsConnectorConstants.PROP_IP_PORT));
+               properties.put(ITerminalsConnectorConstants.PROP_TIMEOUT, memento.getInteger(ITerminalsConnectorConstants.PROP_TIMEOUT));
+               properties.put(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE, memento.getInteger(ITerminalsConnectorConstants.PROP_SSH_KEEP_ALIVE));
+               properties.put(ITerminalsConnectorConstants.PROP_SSH_USER, memento.getString(ITerminalsConnectorConstants.PROP_SSH_USER));
+               properties.put(ITerminalsConnectorConstants.PROP_ENCODING, memento.getString(ITerminalsConnectorConstants.PROP_ENCODING));
+
+               // The password is stored within the Eclipse secure preferences -> restore it from there
+               // To access the secure storage, we need the preference instance
+               String password = null;
+               ISecurePreferences preferences = SecurePreferencesFactory.getDefault();
+               if (preferences != null && (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST) != null) {
+                       // Construct the secure preferences node key
+                       String nodeKey = "/Target Explorer SSH Password/" + (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST); //$NON-NLS-1$
+                       ISecurePreferences node = preferences.node(nodeKey);
+                       if (node != null) {
+                               try {
+                                       password = node.get("password", null); //$NON-NLS-1$
+                               }
+                               catch (StorageException ex) { /* ignored on purpose */ }
+                       }
+               }
+
+               // Example of restoring the password from an 3DES encrypted string. Do not remove!
+               /*
+        String encrypedPwd = memento.getString(ITerminalsConnectorConstants.PROP_SSH_PASSWORD);
+        if (encrypedPwd != null) {
+               try {
+                       SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede"); //$NON-NLS-1$
+                       SecretKey key = factory.generateSecret(new DESKeySpec((ITerminalsConnectorConstants.PROP_SSH_PASSWORD + ".SshMementoHandler").getBytes("UTF-8"))); //$NON-NLS-1$ //$NON-NLS-2$
+
+                       Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); //$NON-NLS-1$
+                       cipher.init(Cipher.DECRYPT_MODE, key);
+
+                       byte[] encBytes = Base64.decode(encrypedPwd.getBytes("UTF-8")); //$NON-NLS-1$
+                       byte[] decBytes = cipher.doFinal(encBytes);
+
+                       password = new String(decBytes);
+               }
+               catch (Exception e) {
+                       if (Platform.inDebugMode()) e.printStackTrace();
+               }
+        }
+        */
+
+               properties.put(ITerminalsConnectorConstants.PROP_SSH_PASSWORD, password);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/nls/Messages.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/nls/Messages.java
new file mode 100644 (file)
index 0000000..290a53c
--- /dev/null
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2011 - 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [361352] [TERMINALS][SSH] Add SSH terminal support
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.ssh.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Externalized strings management.
+ */
+public class Messages extends NLS {
+
+       // The plug-in resource bundle name
+       private static final String BUNDLE_NAME = "org.eclipse.tm.terminal.connector.ssh.nls.Messages"; //$NON-NLS-1$
+
+       /**
+        * Static constructor.
+        */
+       static {
+               // Load message values from bundle file
+               NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+       }
+
+       // **** Declare externalized string id's down here *****
+
+       public static String SshLauncherDelegate_terminalTitle;
+       public static String SshLauncherDelegate_terminalTitle_port;
+       public static String SshLauncherDelegate_terminalTitle_default;
+       public static String SshWizardConfigurationPanel_saveUser;
+       public static String SshWizardConfigurationPanel_savePassword;
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/nls/Messages.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.ssh/src/org/eclipse/tm/terminal/connector/ssh/nls/Messages.properties
new file mode 100644 (file)
index 0000000..8040d4b
--- /dev/null
@@ -0,0 +1,15 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+
+SshLauncherDelegate_terminalTitle=SSH {0}@{1} ({2})
+SshLauncherDelegate_terminalTitle_port=SSH {0}@{1}:{2} ({3})
+SshLauncherDelegate_terminalTitle_default=SSH Terminal
+SshWizardConfigurationPanel_saveUser=Save user
+SshWizardConfigurationPanel_savePassword=Save password
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.classpath b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.classpath
new file mode 100644 (file)
index 0000000..ad32c83
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.gitignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.options b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.options
new file mode 100644 (file)
index 0000000..77c6a13
--- /dev/null
@@ -0,0 +1 @@
+org.eclipse.tm.terminal.connector.telnet/debugmode = 0
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.project b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.project
new file mode 100644 (file)
index 0000000..8304522
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.connector.telnet</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>1329502098231</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.settings/org.eclipse.jdt.core.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..4754bba
--- /dev/null
@@ -0,0 +1,362 @@
+#Wed Oct 19 12:10:57 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=4
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=4
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.settings/org.eclipse.jdt.ui.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..0d73226
--- /dev/null
@@ -0,0 +1,62 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Target Explorer Java STD
+formatter_settings_version=12
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.settings/org.eclipse.pde.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/.settings/org.eclipse.pde.prefs
new file mode 100644 (file)
index 0000000..cf80c8b
--- /dev/null
@@ -0,0 +1,32 @@
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.encodings=2
+compilers.p.build.java.compiler=2
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/META-INF/MANIFEST.MF b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..2eb102d
--- /dev/null
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.tm.terminal.connector.telnet;singleton:=true
+Bundle-Version: 4.2.0.qualifier
+Bundle-Activator: org.eclipse.tm.terminal.connector.telnet.activator.UIPlugin
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.core.expressions;bundle-version="3.4.400",
+ org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.equinox.security;bundle-version="1.1.100",
+ org.eclipse.tm.terminal.view.core;bundle-version="4.2.0";resolution:=optional,
+ org.eclipse.tm.terminal.view.ui;bundle-version="4.1.0";resolution:=optional,
+ org.eclipse.tm.terminal.control;bundle-version="4.0.0",
+ org.eclipse.ui;bundle-version="3.8.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Export-Package: org.eclipse.tm.terminal.connector.telnet.activator;x-internal:=true,
+ org.eclipse.tm.terminal.connector.telnet.connector,
+ org.eclipse.tm.terminal.connector.telnet.controls,
+ org.eclipse.tm.terminal.connector.telnet.launcher,
+ org.eclipse.tm.terminal.connector.telnet.nls;x-internal:=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/about.html b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/about.html
new file mode 100644 (file)
index 0000000..0f07cf0
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+<p>May 24, 2012</p>    
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/build.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/build.properties
new file mode 100644 (file)
index 0000000..3333540
--- /dev/null
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties,\
+               plugin.xml,\
+               about.html
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/plugin.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/plugin.properties
new file mode 100644 (file)
index 0000000..57255b4
--- /dev/null
@@ -0,0 +1,20 @@
+##################################################################################
+# Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+
+pluginName = Terminal Telnet Connector
+providerName = Eclipse.org - Target Management
+
+# ----- Terminal Connector -----
+
+TelnetConnector.label=Telnet
+
+# ----- Terminal Launcher Delegates -----
+
+TelnetLauncherDelegate.label=Telnet Terminal
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/plugin.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/plugin.xml
new file mode 100644 (file)
index 0000000..346d276
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+<!-- Terminal connector contributions -->
+   <extension point="org.eclipse.tm.terminal.control.connectors">
+      <connector
+            name="%TelnetConnector.label"
+            id="org.eclipse.tm.terminal.connector.telnet.TelnetConnector"
+            class="org.eclipse.tm.terminal.connector.telnet.connector.TelnetConnector"/>
+   </extension>
+
+<!-- Terminal launcher delegate contributions -->
+   <extension point="org.eclipse.tm.terminal.view.ui.launcherDelegates">
+      <delegate
+            class="org.eclipse.tm.terminal.connector.telnet.launcher.TelnetLauncherDelegate"
+            id="org.eclipse.tm.terminal.connector.telnet.launcher.telnet"
+            label="%TelnetLauncherDelegate.label">
+            <enablement>
+               <with variable="selection">
+                  <count value="1"/>
+                  <iterate operator="and" ifEmpty="false">
+                     <test
+                           forcePluginActivation="true"
+                           property="org.eclipse.tm.terminal.view.core.hasContextPropertiesProvider"
+                           value="true"/>
+                  </iterate>
+               </with>
+            </enablement>
+      </delegate>
+   </extension>
+</plugin>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/pom.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/pom.xml
new file mode 100644 (file)
index 0000000..29a1503
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.connector.telnet</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/activator/UIPlugin.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/activator/UIPlugin.java
new file mode 100644 (file)
index 0000000..0635b76
--- /dev/null
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [366374] [TERMINALS][TELNET] Add Telnet terminal support
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.activator;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.tm.terminal.view.core.tracing.TraceHandler;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class UIPlugin extends AbstractUIPlugin {
+       // The shared instance
+       private static UIPlugin plugin;
+       // The trace handler instance
+       private static volatile TraceHandler traceHandler;
+
+       /**
+        * The constructor
+        */
+       public UIPlugin() {
+       }
+
+       /**
+        * Returns the shared instance
+        *
+        * @return the shared instance
+        */
+       public static UIPlugin getDefault() {
+               return plugin;
+       }
+
+       /**
+        * Convenience method which returns the unique identifier of this plugin.
+        */
+       public static String getUniqueIdentifier() {
+               if (getDefault() != null && getDefault().getBundle() != null) {
+                       return getDefault().getBundle().getSymbolicName();
+               }
+               return "org.eclipse.tm.terminal.connector.telnet"; //$NON-NLS-1$
+       }
+
+       /**
+        * Returns the bundles trace handler.
+        *
+        * @return The bundles trace handler.
+        */
+       public static TraceHandler getTraceHandler() {
+               if (traceHandler == null) {
+                       traceHandler = new TraceHandler(getUniqueIdentifier());
+               }
+               return traceHandler;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void start(BundleContext context) throws Exception {
+               super.start(context);
+               plugin = this;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void stop(BundleContext context) throws Exception {
+               plugin = null;
+               super.stop(context);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)
+        */
+       @Override
+       protected void initializeImageRegistry(ImageRegistry registry) {
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>Image</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>Image</code> object instance or <code>null</code>.
+        */
+       public static Image getImage(String key) {
+               return getDefault().getImageRegistry().get(key);
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>ImageDescriptor</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>ImageDescriptor</code> object instance or <code>null</code>.
+        */
+       public static ImageDescriptor getImageDescriptor(String key) {
+               return getDefault().getImageRegistry().getDescriptor(key);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/ITelnetSettings.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/ITelnetSettings.java
new file mode 100644 (file)
index 0000000..a7e40ae
--- /dev/null
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.connector;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+
+/**
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ */
+public interface ITelnetSettings {
+       /**
+        * @since 4.2
+        */
+       static final String EOL_CRNUL = "CR+NUL"; //$NON-NLS-1$
+       /**
+        * @since 4.2
+        */
+       static final String EOL_CRLF = "CR+LF"; //$NON-NLS-1$
+
+       String getHost();
+       int getNetworkPort();
+       int getTimeout();
+       /**
+        * @since 4.2
+        */
+       String getEndOfLine();
+       String getSummary();
+       void load(ISettingsStore store);
+       void save(ISettingsStore store);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/NetworkPortMap.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/NetworkPortMap.java
new file mode 100644 (file)
index 0000000..7a179fb
--- /dev/null
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - extracted from TerminalNetworkPortMap
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.connector;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class NetworkPortMap {
+       public static final String  PROP_NAMETGTCONS              = "tgtcons"; //$NON-NLS-1$
+       public static final String  PROP_NAMETELNET                = "telnet"; //$NON-NLS-1$
+       public static final String  PROP_VALUENET                  = "1233"; //$NON-NLS-1$
+       public static final String  PROP_VALUETGTCONS             = "1232"; //$NON-NLS-1$
+       public static final String  PROP_VALUETELNET               = "23"; //$NON-NLS-1$
+
+       String[][] fPortMap=new String[][] {
+                       // portName, port
+                       {PROP_NAMETGTCONS, PROP_VALUETGTCONS},
+                       {PROP_NAMETELNET, PROP_VALUETELNET}
+       };
+
+       public String getDefaultNetworkPort() {
+               return PROP_VALUETELNET;
+       }
+
+       public String findPortName(String strPort) {
+               for (int i = 0; i < fPortMap.length; i++) {
+                       if(fPortMap[i][1].equals(strPort))
+                               return fPortMap[i][0];
+               }
+               return null;
+       }
+
+       public String findPort(String strPortName) {
+               for (int i = 0; i < fPortMap.length; i++) {
+                       if(fPortMap[i][0].equals(strPortName))
+                               return fPortMap[i][1];
+               }
+               return null;
+       }
+
+       public List<String> getNameTable() {
+               List<String>  names=new ArrayList<String>();
+               for (int i = 0; i < fPortMap.length; i++) {
+                       names.add(fPortMap[i][0]);
+               }
+               return names;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetCodes.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetCodes.java
new file mode 100644 (file)
index 0000000..3c43eae
--- /dev/null
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Fran Litterio (Wind River) - initial API and implementation 
+ * Helmut Haigermoser (Wind River) - repackaged 
+ * Ted Williams (Wind River) - repackaged into org.eclipse namespace 
+ * Michael Scharf (Wind River) - split into core, view and connector plugins 
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.connector;
+
+/**
+ * This interface defines symbolic constants for numeric TELNET protocol command and
+ * option codes.  Any class that needs to use these constants must implement this
+ * interface.  The meanings of these constants are defined in the various TELNET RFCs
+ * (RFC 854 to RFC 861, and others).
+ */
+interface TelnetCodes
+{
+    /** Command code: Subnegotiation End. */
+    static final byte TELNET_SE         = (byte)240;
+
+    /** Command code: No-op. */
+    static final byte TELNET_NOP        = (byte)241;
+
+    /** Command code: Data Mark. */
+    static final byte TELNET_DM         = (byte)242;
+
+    /** Command code: Break. */
+    static final byte TELNET_BREAK      = (byte)243;
+
+    /** Command code: Interrupt Process. */
+    static final byte TELNET_IP         = (byte)244;
+
+    /** Command code: Abort Output. */
+    static final byte TELNET_AO         = (byte)245;
+
+    /** Command code: Are You There. */
+    static final byte TELNET_AYT        = (byte)246;
+
+    /** Command code: Erase Character. */
+    static final byte TELNET_EC         = (byte)247;
+
+    /** Command code: Erase Line. */
+    static final byte TELNET_EL         = (byte)248;
+
+    /** Command code: Go Ahead. */
+    static final byte TELNET_GA         = (byte)249;
+
+    /** Command code: Subnegotiation Begin. */
+    static final byte TELNET_SB         = (byte)250;
+
+    /** Command code: Will. */
+    static final byte TELNET_WILL       = (byte)251;
+
+    /** Command code: Won't. */
+    static final byte TELNET_WONT       = (byte)252;
+
+    /** Command code: Do. */
+    static final byte TELNET_DO         = (byte)253;
+
+    /** Command code: Don't. */
+    static final byte TELNET_DONT       = (byte)254;
+
+    /** Command code: Interpret As Command. */
+    static final byte TELNET_IAC        = (byte)255;
+
+    /** Command code: IS. */
+    static final byte TELNET_IS         = 0;
+
+    /** Command code: SEND. */
+    static final byte TELNET_SEND       = 1;
+
+
+    /** Option code: Transmit Binary option. */
+    static final byte TELNET_OPTION_TRANSMIT_BINARY     = 0;
+
+    /** Option code: Echo option. */
+    static final byte TELNET_OPTION_ECHO                = 1;
+
+    /** Option code: Suppress Go Ahead option. */
+    static final byte TELNET_OPTION_SUPPRESS_GA         = 3;
+
+    /** Option code: Terminal Type */
+    static final byte TELNET_OPTION_TERMINAL_TYPE       = 24;
+
+    /** Option code: Negotitate About Window Size (NAWS) */
+    static final byte TELNET_OPTION_NAWS                = 31;
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetConnectWorker.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetConnectWorker.java
new file mode 100644 (file)
index 0000000..ec51cfb
--- /dev/null
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - extracted from TerminalControl
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Uwe Stieber (Wind River) - [287158][terminal][telnet] Connect worker is giving up to early
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.connector;
+
+import java.net.ConnectException;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketTimeoutException;
+import java.net.UnknownHostException;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+
+class TelnetConnectWorker extends Thread {
+       private final ITerminalControl fControl;
+       private final TelnetConnector fConn;
+       protected TelnetConnectWorker(TelnetConnector conn,ITerminalControl control) {
+               fControl = control;
+               fConn = conn;
+               fControl.setState(TerminalState.CONNECTING);
+       }
+       @Override
+    public void run() {
+               // Retry the connect with after a little pause in case the
+               // remote telnet server isn't ready. ConnectExceptions might
+               // happen if the telnet server process did not initialized itself.
+               // This is seen especially if the telnet server is a process
+               // providing it's input and output via a built in telnet server.
+               int remaining = 10;
+
+               while (remaining >= 0) {
+                       // Pause before we re-try if the remaining tries are less than the initial value
+                       if (remaining < 10) try { Thread.sleep(500); } catch (InterruptedException e) { /* ignored on purpose */ }
+
+                       try {
+                               int nTimeout = fConn.getTelnetSettings().getTimeout() * 1000;
+                               String strHost = fConn.getTelnetSettings().getHost();
+                               int nPort = fConn.getTelnetSettings().getNetworkPort();
+                               InetSocketAddress address = new InetSocketAddress(strHost, nPort);
+                               Socket socket=new Socket();
+
+                               socket.connect(address, nTimeout);
+
+                               // If we get to this point, the connect succeeded and we will
+                               // force the remaining counter to be 0.
+                               remaining = 0;
+
+                               // This next call causes reads on the socket to see TCP urgent data
+                               // inline with the rest of the non-urgent data.  Without this call, TCP
+                               // urgent data is silently dropped by Java.  This is required for
+                               // TELNET support, because when the TELNET server sends "IAC DM", the
+                               // IAC byte is TCP urgent data.  If urgent data is silently dropped, we
+                               // only see the DM, which looks like an ISO Latin-1 '�' character.
+
+                               socket.setOOBInline(true);
+
+                               fConn.setSocket(socket);
+
+                               TelnetConnection connection=new TelnetConnection(fConn, socket);
+                               socket.setKeepAlive(true);
+                               fConn.setTelnetConnection(connection);
+                               connection.start();
+                               fControl.setState(TerminalState.CONNECTED);
+
+                       } catch (UnknownHostException ex) {
+                               // No re-try in case of UnknownHostException, there is no indication that
+                               // the DNS will fix itself
+                               remaining = 0;
+                               //Construct error message and signal failed
+                               String txt="Unknown host: " + ex.getMessage(); //$NON-NLS-1$
+                               connectFailed(txt,"Unknown host: " + ex.getMessage() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+                       } catch (SocketTimeoutException socketTimeoutException) {
+                               // Time out occurred. No re-try in this case either. Time out can
+                               // be increased by the user. Multiplying the timeout with the remaining
+                               // counter is not desired.
+                               remaining = 0;
+                               // Construct error message and signal failed
+                               connectFailed(socketTimeoutException.getMessage(), "Connection Error!\n" + socketTimeoutException.getMessage()); //$NON-NLS-1$
+                       } catch (ConnectException connectException) {
+                               // In case of a ConnectException, do a re-try. The server could have been
+                               // simply not ready yet and the worker would give up to early. If the terminal
+                               // control is already closed (disconnected), don't print "Connection refused" errors
+                               if (remaining == 0 && TerminalState.CLOSED != fControl.getState()) {
+                                       connectFailed(connectException.getMessage(),"Connection refused!"); //$NON-NLS-1$
+                               }
+                       } catch (Exception exception) {
+                               // Any other exception on connect. No re-try in this case either
+                               remaining = 0;
+                               // Log the exception
+                               Logger.logException(exception);
+                               // And signal failed
+                               connectFailed(exception.getMessage(),""); //$NON-NLS-1$
+                       } finally {
+                               remaining--;
+                       }
+               }
+       }
+
+       private void connectFailed(String terminalText, String msg) {
+               Logger.log(terminalText);
+               fControl.displayTextInTerminal(terminalText);
+               fConn.cleanSocket();
+               fControl.setState(TerminalState.CLOSED);
+               fControl.setMsg(msg);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetConnection.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetConnection.java
new file mode 100644 (file)
index 0000000..fdc2378
--- /dev/null
@@ -0,0 +1,695 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Fran Litterio (Wind River) - initial API and implementation
+ * Helmut Haigermoser (Wind River) - repackaged
+ * Ted Williams (Wind River) - repackaged into org.eclipse namespace
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Michael Scharf (Wind River) - [209665] Add ability to log byte streams from terminal
+ * Alex Panchenko (Xored) - [277061]  TelnetConnection.isConnected() should check if socket was not closed
+ * Uwe Stieber (Wind River) - [281329] Telnet connection not handling "SocketException: Connection reset" correct
+ * Nils Hagge (Siemens AG) - [276023] close socket streams after connection is disconnected
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.connector;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.net.SocketException;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+
+/**
+ * This class encapsulates a TELNET connection to a remote server. It processes
+ * incoming TELNET protocol data and generates outbound TELNET protocol data. It
+ * also manages two sets of TelnetOption objects: one for the local endpoint and
+ * one for the remote endpoint.
+ * <p>
+ *
+ * IMPORTANT: Understanding this code requires understanding the TELNET protocol
+ * and TELNET option processing, as defined in the RFCs listed below.
+ * <p>
+ *
+ * @author Fran Litterio (francis.litterio@windriver.com)
+ *
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc854.txt">RFC 854</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc855.txt">RFC 855</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc856.txt">RFC 856</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc857.txt">RFC 857</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc858.txt">RFC 858</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc859.txt">RFC 859</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc860.txt">RFC 860</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc861.txt">RFC 861</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc1091.txt">RFC 1091</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc1096.txt">RFC 1096</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc1073.txt">RFC 1073</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc1079.txt">RFC 1079</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc1143.txt">RFC 1143</a>
+ * @see <a href="ftp://ftp.rfc-editor.org/in-notes/rfc1572.txt">RFC 1572</a>
+ */
+public class TelnetConnection extends Thread implements TelnetCodes {
+       /**
+        * TELNET connection state: Initial state.
+        */
+       protected static final int STATE_INITIAL = 0;
+
+       /**
+        * TELNET connection state: Last byte processed was IAC code. code.
+        */
+       protected static final int STATE_IAC_RECEIVED = 1;
+
+       /**
+        * TELNET connection state: Last byte processed was WILL code. code.
+        */
+       protected static final int STATE_WILL_RECEIVED = 2;
+
+       /**
+        * TELNET connection state: Last byte processed was WONT code.
+        */
+       protected static final int STATE_WONT_RECEIVED = 3;
+
+       /**
+        * TELNET connection state: Last byte processed was DO code.
+        */
+       protected static final int STATE_DO_RECEIVED = 4;
+
+       /**
+        * TELNET connection state: Last byte processed was DONT code.
+        */
+       protected static final int STATE_DONT_RECEIVED = 5;
+
+       /**
+        * TELNET connection state: Last byte processed was SB.
+        */
+       protected static final int STATE_SUBNEGOTIATION_STARTED = 6;
+
+       /**
+        * TELNET connection state: Currently receiving sub-negotiation data.
+        */
+       protected static final int STATE_RECEIVING_SUBNEGOTIATION = 7;
+
+       /**
+        * Size of buffer for processing data received from remote endpoint.
+        */
+       protected static final int BUFFER_SIZE = 2048;
+
+       /**
+        * Holds raw bytes received from the remote endpoint, prior to any TELNET
+        * protocol processing.
+        */
+       protected byte[] rawBytes = new byte[BUFFER_SIZE];
+
+       /**
+        * Holds incoming network data after the TELNET protocol bytes have been
+        * processed and removed.
+        */
+       protected byte[] processedBytes = new byte[BUFFER_SIZE];
+
+       /**
+        * This field holds a StringBuffer containing text recently received from
+        * the remote endpoint (after all TELNET protocol bytes have been processed
+        * and removed).
+        */
+       protected StringBuffer processedStringBuffer = new StringBuffer(BUFFER_SIZE);
+
+       /**
+        * Holds the current state of the TELNET protocol processor.
+        */
+       protected int telnetState = STATE_INITIAL;
+
+       /**
+        * This field is true if the remote endpoint is a TELNET server, false if
+        * not. We set this to true if and only if the remote endpoint sends
+        * recognizable TELNET protocol data. We do not assume that the remote
+        * endpoint is a TELNET server just because it is listening on port 23. This
+        * allows us to successfully connect to a TELNET server listening on a port
+        * other than 23.
+        * <p>
+        *
+        * When this field first changes from false to true, we send all WILL or DO
+        * commands to the remote endpoint.
+        * <p>
+        *
+        * @see #telnetServerDetected()
+        */
+       protected boolean remoteIsTelnetServer = false;
+
+       /**
+        * An array of TelnetOption objects representing the local endpoint's TELNET
+        * options. The array is indexed by the numeric TELNET option code.
+        */
+       protected TelnetOption[] localOptions = new TelnetOption[256];
+
+       /**
+        * An array of TelnetOption objects representing the remote endpoint's
+        * TELNET options. The array is indexed by the numeric TELNET option code.
+        */
+       protected TelnetOption[] remoteOptions = new TelnetOption[256];
+
+       /**
+        * An array of bytes that holds the TELNET subnegotiation command most
+        * recently received from the remote endpoint. This array does _not_ include
+        * the leading IAC SB bytes, nor does it include the trailing IAC SE bytes.
+        * The first byte of this array is always a TELNET option code.
+        */
+       protected byte[] receivedSubnegotiation = new byte[128];
+
+       /**
+        * This field holds the index into array {@link #receivedSubnegotiation} of
+        * the next unused byte. This is used by method
+        * {@link #processTelnetProtocol(int)} when the state machine is in states
+        * {@link #STATE_SUBNEGOTIATION_STARTED} and {@link
+        * #STATE_RECEIVING_SUBNEGOTIATION}.
+        */
+       protected int nextSubnegotiationByteIndex = 0;
+
+       /**
+        * This field is true if an error occurs while processing a subnegotiation
+        * command.
+        *
+        * @see #processTelnetProtocol(int)
+        */
+       protected boolean ignoreSubnegotiation = false;
+
+       /**
+        * This field holds the width of the Terminal screen in columns.
+        */
+       protected int width = 0;
+
+       /**
+        * This field holds the height of the Terminal screen in rows.
+        */
+       protected int height = 0;
+
+       /**
+        * This field holds a reference to the {@link ITerminalControl} singleton.
+        */
+       protected TelnetConnector terminalControl;
+
+       /**
+        * This method holds the Socket object for the TELNET connection.
+        */
+       protected Socket socket;
+
+       /**
+        * This field holds a reference to an {@link InputStream} object used to
+        * receive data from the remote endpoint.
+        */
+       protected InputStream inputStream;
+
+       /**
+        * This field holds a reference to an {@link OutputStream} object used to
+        * send data to the remote endpoint.
+        */
+       protected OutputStream outputStream;
+
+       /**
+        * UNDER CONSTRUCTION
+        */
+       protected boolean localEcho = true;
+
+       /**
+        * This constructor just initializes some internal object state from its
+        * arguments.
+        */
+       public TelnetConnection(TelnetConnector terminalControl, Socket socket) throws IOException {
+               super();
+
+               Logger.log("entered"); //$NON-NLS-1$
+
+               this.terminalControl = terminalControl;
+               this.socket = socket;
+
+               inputStream = socket.getInputStream();
+               outputStream = socket.getOutputStream();
+
+               initializeOptions();
+       }
+
+       /**
+        * Returns true if the TCP connection represented by this object is
+        * connected, false otherwise.
+        */
+       public boolean isConnected() {
+               return socket != null && socket.isConnected() && !socket.isClosed();
+       }
+
+       /**
+        * Returns true if the TCP connection represented by this object is
+        * connected and the remote endpoint is a TELNET server, false otherwise.
+        */
+       public boolean isRemoteTelnetServer() {
+               return remoteIsTelnetServer;
+       }
+
+       /**
+        * This method sets the terminal width and height to the supplied values. If
+        * either new value differs from the corresponding old value, we initiate a
+        * NAWS subnegotiation to inform the remote endpoint of the new terminal
+        * size.
+        */
+       public void setTerminalSize(int newWidth, int newHeight) {
+               Logger.log("Setting new size: width = " + newWidth + ", height = " + newHeight); //$NON-NLS-1$ //$NON-NLS-2$
+               if (!isConnected() || !isRemoteTelnetServer())
+                       return;
+               boolean sizeChanged = false;
+
+               if (newWidth != width || newHeight != height)
+                       sizeChanged = true;
+
+               width = newWidth;
+               height = newHeight;
+
+               if (sizeChanged && remoteIsTelnetServer && localOptions[TELNET_OPTION_NAWS].isEnabled()) {
+                       Integer[] sizeData = { Integer.valueOf(width), Integer.valueOf(height) };
+
+                       localOptions[TELNET_OPTION_NAWS].sendSubnegotiation(sizeData);
+               }
+       }
+
+       /**
+        * Returns true if local echoing is enabled for this TCP connection, false
+        * otherwise.
+        */
+       public boolean localEcho() {
+               return localEcho;
+       }
+
+       private void displayTextInTerminal(String string) {
+               terminalControl.displayTextInTerminal(string);
+       }
+
+       /**
+        * This method runs in its own thread. It reads raw bytes from the TELNET
+        * connection socket, processes any TELNET protocol bytes (and removes
+        * them), and passes the remaining bytes to a TerminalDisplay object for
+        * display.
+        */
+       @Override
+    public void run() {
+               Logger.log("Entered"); //$NON-NLS-1$
+
+               try {
+                       while (socket.isConnected()) {
+                               int nRawBytes = inputStream.read(rawBytes);
+
+                               if (nRawBytes == -1) {
+                                       // End of input on inputStream.
+                                       Logger.log("End of input reading from socket!"); //$NON-NLS-1$
+
+                                       // Announce to the user that the remote endpoint has closed the
+                                       // connection.
+
+                                       displayTextInTerminal(TelnetMessages.CONNECTION_CLOSED_BY_FOREIGN_HOST);
+
+                                       // Tell the ITerminalControl object that the connection is
+                                       // closed.
+                                       terminalControl.setState(TerminalState.CLOSED);
+                                       break;
+                               }
+
+                               // Process any TELNET protocol data that we receive. Don't
+                               // send any TELNET protocol data until we are sure the remote
+                               // endpoint is a TELNET server.
+
+                               int nProcessedBytes = processTelnetProtocol(nRawBytes);
+
+                               if (nProcessedBytes > 0) {
+                                       terminalControl.getRemoteToTerminalOutputStream().write(processedBytes, 0, nProcessedBytes);
+                               }
+                       }
+               } catch (SocketException ex) {
+                       String message = ex.getMessage();
+
+                       // A "socket closed" exception is normal here. It's caused by the
+                       // user clicking the disconnect button on the Terminal view toolbar.
+
+                       if (message != null && !message.equalsIgnoreCase("Socket closed") && !message.equalsIgnoreCase("Connection reset")) //$NON-NLS-1$ //$NON-NLS-2$
+                       {
+                               Logger.logException(ex);
+                       }
+
+               } catch (Exception ex) {
+                       Logger.logException(ex);
+               } finally {
+                       // Tell the ITerminalControl object that the connection is closed.
+                       terminalControl.setState(TerminalState.CLOSED);
+                       try { inputStream.close(); } catch(IOException ioe) { /*ignore*/ }
+                       try { outputStream.close(); } catch(IOException ioe) { /*ignore*/ }
+               }
+       }
+
+       /**
+        * This method initializes the localOptions[] and remoteOptions[] arrays so
+        * that they contain references to TelnetOption objects representing our
+        * desired state for each option. The goal is to achieve server-side
+        * echoing, suppression of Go Aheads, and to send the local terminal type
+        * and size to the remote endpoint.
+        */
+       protected void initializeOptions() {
+               // First, create all the TelnetOption objects in the "undesired" state.
+
+               for (int i = 0; i < localOptions.length; ++i) {
+                       localOptions[i] = new TelnetOption((byte) i, false, true, outputStream);
+               }
+
+               for (int i = 0; i < localOptions.length; ++i) {
+                       remoteOptions[i] = new TelnetOption((byte) i, false, false, outputStream);
+               }
+
+               // Next, set some of the options to the "desired" state. The options we
+               // desire to be enabled are as follows:
+               //
+               // TELNET Option Desired for Desired for
+               // Name and Code Local Endpoint Remote Endpoint
+               // --------------------- -------------- ---------------
+               // Echo (1) No Yes
+               // Suppress Go Ahead (3) Yes Yes
+               // Terminal Type (24) Yes Yes
+               // NAWS (31) Yes Yes
+               //
+               // All other options remain in the "undesired" state, and thus will be
+               // disabled (since either endpoint can force any option to be disabled by simply
+               // answering WILL with DONT and DO with WONT).
+
+               localOptions[TELNET_OPTION_ECHO].setDesired(false);
+               remoteOptions[TELNET_OPTION_ECHO].setDesired(true);
+
+               localOptions[TELNET_OPTION_SUPPRESS_GA].setDesired(true);
+               remoteOptions[TELNET_OPTION_SUPPRESS_GA].setDesired(true);
+
+               localOptions[TELNET_OPTION_TERMINAL_TYPE].setDesired(true);
+               remoteOptions[TELNET_OPTION_TERMINAL_TYPE].setDesired(true);
+
+               localOptions[TELNET_OPTION_NAWS].setDesired(true);
+               remoteOptions[TELNET_OPTION_NAWS].setDesired(true);
+       }
+
+       /**
+        * Process TELNET protocol data contained in the first <i>count</i> bytes
+        * of <i>rawBytes</i>. This function preserves its state between calls,
+        * because a multi-byte TELNET command might be split between two (or more)
+        * calls to this function. The state is preserved in field <i>telnetState</i>.
+        * This function implements an FSA that recognizes TELNET option codes.
+        * TELNET option sub-negotiation is delegated to instances of TelnetOption.
+        *
+        * @return The number of bytes remaining in the buffer after removing all
+        *         TELNET protocol bytes.
+        */
+       //TELNET option state is stored in instances of TelnetOption.
+       protected int processTelnetProtocol(int count) {
+               // This is too noisy to leave on all the time.
+               // Logger.log("Processing " + count + " bytes of data.");
+
+               int nextProcessedByte = 0;
+
+               for (int byteIndex = 0; byteIndex < count; ++byteIndex) {
+                       // It is possible for control to flow through the below code such
+                       // that nothing happens. This happens when array rawBytes[] contains no
+                       // TELNET protocol data.
+
+                       byte inputByte = rawBytes[byteIndex];
+                       int ubyte = inputByte & 0xFF;
+
+                       switch (telnetState) {
+                       case STATE_INITIAL:
+                               if (inputByte == TELNET_IAC) {
+                                       telnetState = STATE_IAC_RECEIVED;
+                               } else {
+                                       // It's not an IAC code, so just append it to
+                                       // processedBytes.
+
+                                       processedBytes[nextProcessedByte++] = inputByte;
+                               }
+                               break;
+
+                       case STATE_IAC_RECEIVED:
+                               switch (inputByte) {
+                               case TELNET_IAC:
+                                       // Two IAC bytes in a row are translated into one byte with
+                                       // the
+                                       // value 0xff.
+
+                                       processedBytes[nextProcessedByte++] = (byte) 0xff;
+                                       telnetState = STATE_INITIAL;
+                                       break;
+
+                               case TELNET_WILL:
+                                       telnetState = STATE_WILL_RECEIVED;
+                                       break;
+
+                               case TELNET_WONT:
+                                       telnetState = STATE_WONT_RECEIVED;
+                                       break;
+
+                               case TELNET_DO:
+                                       telnetState = STATE_DO_RECEIVED;
+                                       break;
+
+                               case TELNET_DONT:
+                                       telnetState = STATE_DONT_RECEIVED;
+                                       break;
+
+                               case TELNET_SB:
+                                       telnetState = STATE_SUBNEGOTIATION_STARTED;
+                                       break;
+
+                               // Commands to consume and ignore.
+
+                               // Data Mark (DM). This is sent by a TELNET server following an
+                               // IAC sent as TCP urgent data. It should cause the client to
+                               // skip all not yet processed non-TELNET-protocol data preceding the
+                               // DM byte. However, Java 1.4.x has no way to inform clients of
+                               // class Socket that urgent data is available, so we simply ignore the
+                               // "IAC DM" command. Since the IAC is sent as TCP urgent data,
+                               // the Socket must be put into OOB-inline mode via a call to
+                               // setOOBInline(true), otherwise the IAC is silently dropped by
+                               // Java and only the DM arrives (leaving the user to see a
+                               // spurious ISO Latin-1 character).
+                               case TELNET_DM:
+
+                               case TELNET_NOP: // No-op.
+                               case TELNET_GA: // Go Ahead command. Meaningless on a full-duplex link.
+                               case TELNET_IP: // Interupt Process command. Server should never send this.
+                               case TELNET_AO: // Abort Output command. Server should never send this.
+                               case TELNET_AYT: // Are You There command. Server should never send this.
+                               case TELNET_EC: // Erase Character command. Server should never send this.
+                               case TELNET_EL: // Erase Line command. Server should never send this.
+                                       telnetState = STATE_INITIAL;
+                                       break;
+
+                               default:
+                                       // Unrecognized command! This should never happen.
+                                       Logger.log("processTelnetProtocol: UNRECOGNIZED TELNET PROTOCOL COMMAND: " + //$NON-NLS-1$
+                                                       ubyte);
+                                       telnetState = STATE_INITIAL;
+                                       break;
+                               }
+                               break;
+
+                       // For the next four cases, WILL and WONT commands affect the state
+                       // of remote options, and DO and DONT commands affect the state of
+                       // local options.
+
+                       case STATE_WILL_RECEIVED:
+                               Logger.log("Received WILL " + localOptions[ubyte].optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                               remoteOptions[ubyte].handleWill();
+                               telnetState = STATE_INITIAL;
+                               telnetServerDetected();
+                               break;
+
+                       case STATE_WONT_RECEIVED:
+                               Logger.log("Received WONT " + localOptions[ubyte].optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                               remoteOptions[ubyte].handleWont();
+                               telnetState = STATE_INITIAL;
+                               telnetServerDetected();
+                               break;
+
+                       case STATE_DO_RECEIVED:
+                               Logger.log("Received DO " + localOptions[ubyte].optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                               localOptions[ubyte].handleDo();
+                               telnetState = STATE_INITIAL;
+                               telnetServerDetected();
+                               break;
+
+                       case STATE_DONT_RECEIVED:
+                               Logger.log("Received DONT " + localOptions[ubyte].optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                               localOptions[ubyte].handleDont();
+                               telnetState = STATE_INITIAL;
+                               telnetServerDetected();
+                               break;
+
+                       case STATE_SUBNEGOTIATION_STARTED:
+                               Logger.log("Starting subnegotiation for option " + //$NON-NLS-1$
+                                               localOptions[ubyte].optionName() + "."); //$NON-NLS-1$
+
+                               // First, zero out the array of received subnegotiation butes.
+
+                               for (int i = 0; i < receivedSubnegotiation.length; ++i)
+                                       receivedSubnegotiation[i] = 0;
+
+                               // Forget about any previous subnegotiation errors.
+
+                               ignoreSubnegotiation = false;
+
+                               // Then insert this input byte into the array and enter state
+                               // STATE_RECEIVING_SUBNEGOTIATION, where we will gather the
+                               // remaining subnegotiation bytes.
+
+                               nextSubnegotiationByteIndex = 0;
+                               receivedSubnegotiation[nextSubnegotiationByteIndex++] = inputByte;
+                               telnetState = STATE_RECEIVING_SUBNEGOTIATION;
+                               break;
+
+                       case STATE_RECEIVING_SUBNEGOTIATION:
+                               if (inputByte == TELNET_IAC) {
+                                       // Handle double IAC bytes. From RFC 855: "if parameters
+                                       // in an option 'subnegotiation' include a byte with a value
+                                       // of 255, it is necessary to double this byte in accordance
+                                       // the general TELNET rules."
+
+                                       if (nextSubnegotiationByteIndex > 0
+                                                       && receivedSubnegotiation[nextSubnegotiationByteIndex - 1] == TELNET_IAC) {
+                                               // The last input byte we received in this
+                                               // subnegotiation was IAC, so this is a double IAC. Leave the previous IAC
+                                               // in the receivedSubnegotiation[] array and drop the current
+                                               // one (thus translating a double IAC into a single IAC).
+
+                                               Logger.log("Double IAC in subnegotiation translated into single IAC."); //$NON-NLS-1$
+                                               break;
+                                       }
+
+                                       // Append the IAC byte to receivedSubnegotiation[]. If there
+                                       // is no room for the IAC byte, it overwrites the last byte,
+                                       // because we need to know when the subnegotiation ends, and that is
+                                       // marked by an "IAC SE" command.
+
+                                       if (nextSubnegotiationByteIndex < receivedSubnegotiation.length) {
+                                               receivedSubnegotiation[nextSubnegotiationByteIndex++] = inputByte;
+                                       } else {
+                                               receivedSubnegotiation[receivedSubnegotiation.length - 1] = inputByte;
+                                       }
+                                       break;
+                               }
+
+                               // Handle an "IAC SE" command, which marks the end of the
+                               // subnegotiation. An SE byte by itself might be a legitimate
+                               // part of the subnegotiation data, so don't do anything unless the SE
+                               // is immediately preceded by an IAC.
+
+                               if (inputByte == TELNET_SE && receivedSubnegotiation[nextSubnegotiationByteIndex - 1] == TELNET_IAC) {
+                                       Logger.log("Found SE code marking end of subnegotiation."); //$NON-NLS-1$
+
+                                       // We are done receiving the subnegotiation command. Now
+                                       // process it. We always use the option object stored in array
+                                       // localOptions[] to process the received subnegotiation.
+                                       // This is an arbitrary decision, but it is sufficient for handling
+                                       // options TERMINAL-TYPE and NAWS, which are the only options that
+                                       // we subnegotiate (presently). If, in the future,subnegotiations
+                                       // need to be handled by option objects stored in both
+                                       // localOptions[] and remoteOptions[], then some mechanism
+                                       // to choose the correct option object must be implemented.
+                                       //
+                                       // Also, if ignoreSubnegotiation is true, there was an error
+                                       // while receiving the subnegotiation, so we must not process the
+                                       // command, and instead just return to the initial state.
+
+                                       if (!ignoreSubnegotiation) {
+                                               // Remove the trailing IAC byte from
+                                               // receivedSubnegotiation[].
+
+                                               receivedSubnegotiation[nextSubnegotiationByteIndex - 1] = 0;
+
+                                               int subnegotiatedOption = receivedSubnegotiation[0] & 0xFF;
+
+                                               localOptions[subnegotiatedOption].handleSubnegotiation(receivedSubnegotiation,
+                                                               nextSubnegotiationByteIndex);
+                                       } else {
+                                               Logger.log("NOT CALLING handleSubnegotiation() BECAUSE OF ERRORS!"); //$NON-NLS-1$
+                                       }
+
+                                       // Return to the initial state.
+
+                                       telnetState = STATE_INITIAL;
+                               }
+
+                               // Check whether the receivedSubnegotiation[] array is full.
+
+                               if (nextSubnegotiationByteIndex >= receivedSubnegotiation.length) {
+                                       // This should not happen. Array receivedSubnegotiation can
+                                       // hold 128 bytes, and no TELNET option that we perform
+                                       // subnegotiation for requires that many bytes in a subnegotiation command.
+                                       // In the interest of robustness, we handle this case by ignoring all
+                                       // remaining subnegotiation bytes until we receive the IAC SE
+                                       // command that ends the subnegotiation. Also, we set
+                                       // ignoreSubnegotiation to true to prevent a call to
+                                       // handleSubnegotiation() when the IAC SE command arrives.
+
+                                       Logger.log("SUBNEGOTIATION BUFFER FULL!"); //$NON-NLS-1$
+                                       ignoreSubnegotiation = true;
+                               } else {
+                                       Logger.log("Recording subnegotiation byte " + ubyte); //$NON-NLS-1$
+
+                                       receivedSubnegotiation[nextSubnegotiationByteIndex++] = inputByte;
+                               }
+                               break;
+
+                       default:
+                               // This should _never_ happen! If it does, it means there is a
+                               // bug in this FSA. For robustness, we return to the initial state.
+
+                               Logger.log("INVALID TELNET STATE: " + telnetState); //$NON-NLS-1$
+                               telnetState = STATE_INITIAL;
+                               break;
+                       }
+               }
+
+               // Return the number of bytes of processed data (i.e., number of bytes
+               // of raw data minus TELNET control bytes). This value can be zero.
+
+               return nextProcessedByte;
+       }
+
+       /**
+        * This method is called whenever we receive a valid TELNET protocol command
+        * from the remote endpoint. When it is called for the first time for this
+        * connection, we negotiate all options that we desire to be enabled.
+        * <p>
+        *
+        * This method does not negotiate options that we do not desire to be
+        * enabled, because all options are initially disabled.
+        * <p>
+        */
+       protected void telnetServerDetected() {
+               if (!remoteIsTelnetServer) {
+                       // This block only executes once per TelnetConnection instance.
+
+                       localEcho = false;
+
+                       Logger.log("Detected TELNET server."); //$NON-NLS-1$
+
+                       remoteIsTelnetServer = true;
+
+                       for (int i = 0; i < localOptions.length; ++i) {
+                               if (localOptions[i].isDesired()) {
+                                       localOptions[i].negotiate();
+                               }
+                       }
+
+                       for (int i = 0; i < remoteOptions.length; ++i) {
+                               if (remoteOptions[i].isDesired()) {
+                                       remoteOptions[i].negotiate();
+                               }
+                       }
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetConnector.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetConnector.java
new file mode 100644 (file)
index 0000000..d229851
--- /dev/null
@@ -0,0 +1,201 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - extracted from TerminalControl
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl
+ * Sean Adams (Cisco) - [231959][terminal][telnet] NPE in TelnetConnector.java
+ * David Sciamma (Anyware-Tech)  - [288254][telnet] local echo is always disabled
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.connector;
+
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.internal.terminal.provisional.api.NullSettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
+
+public class TelnetConnector extends TerminalConnectorImpl {
+
+       static final class TelnetOutputStream extends FilterOutputStream {
+               final static byte CR = 13;
+               final static byte LF = 10;
+               final static byte NUL = 0;
+               final static byte[] CRNUL = { CR, NUL };
+               final static byte[] CRLF = { CR, LF };
+               final byte[] EOL;
+
+               public TelnetOutputStream(OutputStream outputStream, String endOfLine) {
+                       super(outputStream);
+                       if (ITelnetSettings.EOL_CRLF.equals(endOfLine))
+                               EOL = CRLF;
+                       else
+                               EOL = CRNUL;
+               }
+
+               @Override
+               public void write(int b) throws IOException {
+                       if (b == CR)
+                               out.write(EOL);
+                       else
+                               out.write(b);
+               }
+       }
+
+       private OutputStream fOutputStream;
+       private InputStream fInputStream;
+       private Socket fSocket;
+       private TelnetConnection fTelnetConnection;
+       private final TelnetSettings fSettings;
+       private int fWidth = -1;
+       private int fHeight = -1;
+
+       public TelnetConnector() {
+               this(new TelnetSettings());
+       }
+       public TelnetConnector(TelnetSettings settings) {
+               fSettings=settings;
+       }
+       @Override
+    public void connect(ITerminalControl control) {
+               super.connect(control);
+               fWidth=-1;
+               fHeight=-1;
+               // TERM=xterm implies VT100 line wrapping mode
+               control.setVT100LineWrapping(true);
+               TelnetConnectWorker worker = new TelnetConnectWorker(this,control);
+               worker.start();
+       }
+       @Override
+    public void doDisconnect() {
+               if (getSocket() != null) {
+                       try {
+                               getSocket().close();
+                       } catch (Exception exception) {
+                               Logger.logException(exception);
+                       }
+               }
+
+               if (getInputStream() != null) {
+                       try {
+                               getInputStream().close();
+                       } catch (Exception exception) {
+                               Logger.logException(exception);
+                       }
+               }
+
+               if (getTerminalToRemoteStream() != null) {
+                       try {
+                               getTerminalToRemoteStream().close();
+                       } catch (Exception exception) {
+                               Logger.logException(exception);
+                       }
+               }
+               cleanSocket();
+       }
+       @Override
+    public boolean isLocalEcho() {
+               if(fTelnetConnection==null)
+                       return false;
+               return fTelnetConnection.localEcho();
+       }
+       @Override
+    public void setTerminalSize(int newWidth, int newHeight) {
+               if(fTelnetConnection!=null && (newWidth!=fWidth || newHeight!=fHeight)) {
+                       //avoid excessive communications due to change size requests by caching previous size
+                       fTelnetConnection.setTerminalSize(newWidth, newHeight);
+                       fWidth=newWidth;
+                       fHeight=newHeight;
+               }
+       }
+       public InputStream getInputStream() {
+               return fInputStream;
+       }
+       @Override
+    public OutputStream getTerminalToRemoteStream() {
+               return fOutputStream;
+       }
+       private void setInputStream(InputStream inputStream) {
+               fInputStream = inputStream;
+       }
+       private void setOutputStream(OutputStream outputStream) {
+               if (outputStream == null) {
+                       fOutputStream = null;
+                       return;
+               }
+               // translate CR to telnet end-of-line sequence - RFC 854
+               fOutputStream = new TelnetOutputStream(outputStream, fSettings.getEndOfLine());
+       }
+       Socket getSocket() {
+               return fSocket;
+       }
+
+       /**
+        * sets the socket to null
+        */
+       void cleanSocket() {
+               fSocket=null;
+               setInputStream(null);
+               setOutputStream(null);
+       }
+
+       void setSocket(Socket socket) throws IOException {
+               if(socket==null) {
+                       cleanSocket();
+               } else {
+                       fSocket = socket;
+                       setInputStream(socket.getInputStream());
+                       setOutputStream(socket.getOutputStream());
+               }
+
+       }
+       public void setTelnetConnection(TelnetConnection connection) {
+               fTelnetConnection=connection;
+       }
+       public void displayTextInTerminal(String text) {
+               fControl.displayTextInTerminal(text);
+       }
+       public OutputStream getRemoteToTerminalOutputStream () {
+               return fControl.getRemoteToTerminalOutputStream();
+       }
+       public void setState(TerminalState state) {
+               fControl.setState(state);
+       }
+       public ITelnetSettings getTelnetSettings() {
+               return fSettings;
+       }
+       @Override
+       public void setDefaultSettings() {
+           fSettings.load(new NullSettingsStore());
+       }
+       @Override
+    public String getSettingsSummary() {
+               return fSettings.getSummary();
+       }
+       @Override
+    public void load(ISettingsStore store) {
+               fSettings.load(store);
+       }
+       @Override
+    public void save(ISettingsStore store) {
+               fSettings.save(store);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetMessages.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetMessages.java
new file mode 100644 (file)
index 0000000..64f7446
--- /dev/null
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.connector;
+
+import org.eclipse.osgi.util.NLS;
+
+public class TelnetMessages extends NLS {
+       static {
+               NLS.initializeMessages(TelnetMessages.class.getName(), TelnetMessages.class);
+       }
+       public static String PORT;
+       public static String HOST;
+       public static String CONNECTION_CLOSED_BY_FOREIGN_HOST;
+       public static String TIMEOUT;
+       /**
+        * @since 4.2
+        */
+       public static String END_OF_LINE;
+
+ }
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetMessages.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetMessages.properties
new file mode 100644 (file)
index 0000000..3e9dc95
--- /dev/null
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2005, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Initial Contributors:
+# The following Wind River employees contributed to the Terminal component
+# that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+# Helmut Haigermoser and Ted Williams.
+#
+# Contributors:
+# Michael Scharf (Wind River) - split into core, view and connector plugins 
+# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+###############################################################################
+PORT                      = Port
+HOST                      = Host
+CONNECTION_CLOSED_BY_FOREIGN_HOST= Connection closed by foreign host.
+TIMEOUT = Timeout (sec)
+END_OF_LINE = End of Line
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetOption.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetOption.java
new file mode 100644 (file)
index 0000000..9aae825
--- /dev/null
@@ -0,0 +1,699 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [267181] Fix telnet option negotiation loop
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.connector;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Date;
+
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+
+/**
+ * This class represents a single TELNET protocol option at one endpoint of a TELNET
+ * connection.  This class encapsulates the endpoint associated with the option (local
+ * or remote), the current state of the option (enabled or disabled), the desired state
+ * of the option, the current state of the negotiation, an OutputStream that allows
+ * communication with the remote endpoint, and the number of negotiations that have
+ * started within this connection. <p>
+ *
+ * In addition to encapsulating the above state, this class performs option negotiation
+ * to attempt to achieve the desired option state.  For some options, this class also
+ * performs option sub-negotiation. <p>
+ *
+ * IMPORTANT: Understanding this code requires understanding the TELNET protocol and
+ * TELNET option processing. <p>
+ *
+ * @author Fran Litterio (francis.litterio@windriver.com)
+ */
+class TelnetOption implements TelnetCodes
+{
+    /**
+     * This array of Strings maps an integer TELNET option code value to the symbolic
+     * name of the option.  Array elements of the form "?" represent unassigned option
+     * values.
+     */
+    protected static final String[] optionNames =
+    {
+        "BINARY",                               // 0 //$NON-NLS-1$
+        "ECHO",                                 // 1 //$NON-NLS-1$
+        "RECONNECTION",                         // 2  //$NON-NLS-1$
+        "SUPPRESS GO AHEAD",                    // 3  //$NON-NLS-1$
+        "MSG SIZE NEGOTIATION",                 // 4  //$NON-NLS-1$
+        "STATUS",                               // 5  //$NON-NLS-1$
+        "TIMING MARK",                          // 6  //$NON-NLS-1$
+        "REMOTE CTRL TRANS+ECHO",               // 7  //$NON-NLS-1$
+        "OUTPUT LINE WIDTH",                    // 8  //$NON-NLS-1$
+        "OUTPUT PAGE SIZE",                     // 9  //$NON-NLS-1$
+        "OUTPUT CR DISPOSITION",                // 10 //$NON-NLS-1$
+        "OUTPUT HORIZ TABSTOPS",                // 11 //$NON-NLS-1$
+        "OUTPUT HORIZ TAB DISPOSITION",         // 12 //$NON-NLS-1$
+        "OUTPUT FORMFEED DISPOSITION",          // 13 //$NON-NLS-1$
+        "OUTPUT VERTICAL TABSTOPS",             // 14 //$NON-NLS-1$
+        "OUTPUT VT DISPOSITION",                // 15 //$NON-NLS-1$
+        "OUTPUT LF DISPOSITION",                // 16 //$NON-NLS-1$
+        "EXTENDED ASCII",                       // 17 //$NON-NLS-1$
+        "LOGOUT",                               // 18 //$NON-NLS-1$
+        "BYTE MACRO",                           // 19 //$NON-NLS-1$
+        "DATA ENTRY TERMINAL",                  // 20 //$NON-NLS-1$
+        "SUPDUP",                               // 21 //$NON-NLS-1$
+        "SUPDUP OUTPUT",                        // 22 //$NON-NLS-1$
+        "SEND LOCATION",                        // 23 //$NON-NLS-1$
+        "TERMINAL TYPE",                        // 24 //$NON-NLS-1$
+        "END OF RECORD",                        // 25 //$NON-NLS-1$
+        "TACACS USER IDENTIFICATION",           // 26 //$NON-NLS-1$
+        "OUTPUT MARKING",                       // 27 //$NON-NLS-1$
+        "TERMINAL LOCATION NUMBER",             // 28 //$NON-NLS-1$
+        "3270 REGIME",                          // 29 //$NON-NLS-1$
+        "X.3 PAD",                              // 30 //$NON-NLS-1$
+        "NEGOTIATE ABOUT WINDOW SIZE",          // 31 //$NON-NLS-1$
+        "TERMINAL SPEED",                       // 32 //$NON-NLS-1$
+        "REMOTE FLOW CONTROL",                  // 33 //$NON-NLS-1$
+        "LINEMODE",                             // 34 //$NON-NLS-1$
+        "X DISPLAY LOCATION",                   // 35 //$NON-NLS-1$
+        "ENVIRONMENT OPTION",                   // 36 //$NON-NLS-1$
+        "AUTHENTICATION OPTION",                // 37 //$NON-NLS-1$
+        "ENCRYPTION OPTION",                    // 38 //$NON-NLS-1$
+        "NEW ENVIRONMENT OPTION",               // 39 //$NON-NLS-1$
+        "TN3270E",                              // 40 //$NON-NLS-1$
+        "XAUTH",                                // 41 //$NON-NLS-1$
+        "CHARSET",                              // 42 //$NON-NLS-1$
+        "REMOTE SERIAL PORT",                   // 43 //$NON-NLS-1$
+        "COM PORT CONTROL OPTION",              // 44 //$NON-NLS-1$
+        "SUPPRESS LOCAL ECHO",                  // 45 //$NON-NLS-1$
+        "START TLS",                            // 46 //$NON-NLS-1$
+        "KERMIT",                               // 47 //$NON-NLS-1$
+        "SEND URL",                             // 48 //$NON-NLS-1$
+        "FORWARD X",                            // 49 //$NON-NLS-1$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",       // 50 ... //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?",                      // ... 137 //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
+        "TELOPT PRAGMA LOGON",                  // 138 //$NON-NLS-1$
+        "TELOPT SSPI LOGON",                    // 139 //$NON-NLS-1$
+        "TELOPT PRAGMA HEARTBEAT",              // 140 //$NON-NLS-1$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",       // 141 ... //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+        "?", "?", "?", "?",                                     // ... 254 //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+        "EXTENDED OPTIONS LIST"                 // 255 //$NON-NLS-1$
+    };
+
+    /**
+     * Negotiation state: Negotiation not yet started for this option. <p>
+     *
+     * This constant and the others having similar names represent the states of a
+     * finite state automaton (FSA) that tracks the negotiation state of this option.
+     * The initial state is NEGOTIATION_NOT_STARTED.  The state machine is as follows
+     * (with transitions labeled with letters in parentheses): <p>
+     *
+     * <pre>
+     *     NEGOTIATION_NOT_STARTED -----> {@link #NEGOTIATION_IN_PROGRESS}
+     *                         |    (A)      |        ^
+     *                      (C)|          (B)|        |(D)
+     *                         |             V        |
+     *                         +--------> {@link #NEGOTIATION_DONE}
+     * </pre> <p>
+     *
+     * Once the FSA leaves state NEGOTIATION_NOT_STARTED, it never returns to that
+     * state.  Transition A happens when the local endpoint sends an option command
+     * before receiving a command for the same option from the remote endpoint. <p>
+     *
+     * Transition B happens when the local endpoint receives a reply to an option
+     * command sent earlier by the local endpoint.  Receipt of that reply terminates
+     * the negotiation. <p>
+     *
+     * Transition D happens after negotiation is done and "something changes" (see the
+     * RFCs for the definition of "something changes").  Either endpoint can
+     * re-negotiate an option after a previous negotiation, but only if some external
+     * influence (such as the user or the OS) causes it to do so.  Re-negotiation must
+     * start more than {@link #NEGOTIATION_IGNORE_DURATION} milliseconds after the FSA
+     * enters state NEGOTIATION_DONE or it will be ignored.  This is how this client
+     * prevents negotiation loops. <p>
+     *
+     * Transition C happens when the local endpoint receives an option command from the
+     * remote endpoint before sending a command for the same option.  In that case, the
+     * local endpoint replies immediately with an option command and the negotiation
+     * terminates. <p>
+     *
+     * Some TELNET servers (e.g., the Solaris server), after sending WILL and receiving
+     * DONT, will reply with a superfluous WONT.  Any such superfluous option command
+     * received from the remote endpoint while the option's FSA is in state
+     * {@link #NEGOTIATION_DONE} will be ignored by the local endpoint.
+     */
+    protected static final int NEGOTIATION_NOT_STARTED = 0;
+
+    /** Negotiation state: Negotiation is in progress for this option. */
+    protected static final int NEGOTIATION_IN_PROGRESS = 1;
+
+    /** Negotiation state: Negotiation has terminated for this option. */
+    protected static final int NEGOTIATION_DONE = 2;
+
+    /**
+     * The number of milliseconds following the end of negotiation of this option
+     * before which the remote endpoint can re-negotiate the option.  Any option
+     * command received from the remote endpoint before this time passes is ignored.
+     * This is used to prevent option negotiation loops.
+     *
+     * @see #ignoreNegotiation()
+     * @see #negotiationCompletionTime
+     */
+    protected static final int NEGOTIATION_IGNORE_DURATION = 30000;
+
+    /**
+     * This field holds the current negotiation state for this option.
+     */
+    protected int negotiationState = NEGOTIATION_NOT_STARTED;
+
+    /**
+     * This field holds the time when negotiation of this option most recently
+     * terminated (i.e., entered state {@link #NEGOTIATION_DONE}).  This is used to
+     * determine whether an option command received from the remote endpoint after
+     * negotiation has terminated for this option is to be ignored or interpreted as
+     * the start of a new negotiation.
+     *
+     * @see #NEGOTIATION_IGNORE_DURATION
+     */
+    protected Date negotiationCompletionTime = new Date(0);
+
+    /**
+     * Holds the total number of negotiations that have completed for this option.
+     */
+    protected int negotiationCount = 0;
+
+    /**
+     * Holds the integer code representing the option.
+     */
+    protected byte option = 0;
+
+    /**
+     * Holds the OutputStream object that allows data to be sent to the remote endpoint
+     * of the TELNET connection.
+     */
+    protected OutputStream outputStream;
+
+    /**
+     * True if this option is for the local endpoint, false for the remote endpoint.
+     */
+    protected boolean local = true;
+
+    /**
+     * This field is true if the option is enabled, false if it is disabled.  All
+     * options are initially disabled until they are negotiated to be enabled. <p>
+     */
+    protected boolean enabled = false;
+
+    /**
+     * This field is true if the client desires the option to be enabled, false if the
+     * client desires the option to be disabled.  This field does not represent the
+     * remote's endpoints desire (as expressed via WILL and WONT commands) -- it
+     * represnet the local endpoint's desire. <p>
+     *
+     * @see #setDesired(boolean)
+     */
+    protected boolean desired = false;
+
+    /**
+        * Constructor. <p>
+        *
+        * @param option            The integer code of this option.
+        * @param desired           Whether we desire this option to be enabled.
+        * @param local             Whether this option is for the local or remote endpoint.
+        * @param outputStream      A stream used to negotiate with the remote endpoint.
+        */
+       TelnetOption(byte option, boolean desired, boolean local,
+                       OutputStream outputStream) {
+               this.option = option;
+               this.desired = desired;
+               this.local = local;
+               this.outputStream = outputStream;
+       }
+
+       /**
+        * @return Returns a String containing the name of the TELNET option specified in
+        *         parameter <i>option</i>.
+        */
+       public String optionName() {
+               return optionNames[option & 0xFF];
+       }
+
+       /**
+        * Returns true if this option is enabled, false if it is disabled. <p>
+        *
+        * @return Returns true if this option is enabled, false if it is disabled.
+        */
+       public boolean isEnabled() {
+               return enabled;
+       }
+
+       /**
+        * Enables this option if <i>newValue</i> is true, otherwise disables this
+        * option. <p>
+        *
+        * @param newValue          True if this option is to be enabled, false otherwise.
+        */
+       public void setEnabled(boolean newValue) {
+               Logger.log("Enabling " + (local ? "local" : "remote") + " option " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+                               optionName());
+               enabled = newValue;
+       }
+
+       /**
+        * Returns true if the local endpoint desires this option to be enabled, false if
+        * not.  It is not an error for the value returned by this method to differ from
+        * the value returned by isEnabled().  The value returned by this method can change
+        * over time, reflecting the local endpoint's changing desire regarding the
+        * option. <p>
+        *
+        * NOTE: Even if this option represents a remote endpoint option, the return value
+        * of this method represents the local endpint's desire regarding the remote
+        * option. <p>
+        *
+        * @return Returns true if the local endpoint desires this option to be enabled,
+        *         false if not.
+        */
+       public boolean isDesired() {
+               return desired;
+       }
+
+       /**
+        * Sets our desired value for this option.  Note that the option can be desired
+        * when <i>enabled</i> is false, and the option can be undesired when
+        * <i>enabled</i> is true, though the latter state should not persist, since either
+        * endpoint can disable any option at any time. <p>
+        *
+        * @param newValue          True if we desire this option to be enabled, false if
+        *                          we desire this option to be disabled.
+        */
+       public void setDesired(boolean newValue) {
+               if (newValue)
+                       Logger.log("Setting " + (local ? "local" : "remote") + " option " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+                                       optionName() + " as desired."); //$NON-NLS-1$
+
+               desired = newValue;
+       }
+
+       /**
+        * Call this method to request that negotiation begin for this option.  This method
+        * does nothing if negotiation for this option has already started or is already
+        * complete.  If negotiation has not yet started for this option and the local
+        * endpoint desires this option to be enabled, then we send a WILL or DO command to
+        * the remote endpoint.
+        */
+       public void negotiate() {
+               if (negotiationState == NEGOTIATION_NOT_STARTED && desired) {
+                       if (local) {
+                               Logger
+                                               .log("Starting negotiation for local option " + optionName()); //$NON-NLS-1$
+                               sendWill();
+                       } else {
+                               Logger
+                                               .log("Starting negotiation for remote option " + optionName()); //$NON-NLS-1$
+                               sendDo();
+                       }
+
+                       negotiationState = NEGOTIATION_IN_PROGRESS;
+               }
+       }
+
+       /**
+        * This method is called whenever we receive a WILL command from the remote
+        * endpoint.
+        */
+       public void handleWill() {
+               if (negotiationState == NEGOTIATION_DONE && ignoreNegotiation()) {
+                       Logger
+                                       .log("Ignoring superfluous WILL command from remote endpoint."); //$NON-NLS-1$
+                       return;
+               }
+
+               if (negotiationState == NEGOTIATION_IN_PROGRESS) {
+                       if (desired) {
+                               // We sent DO and server replied with WILL.  Enable the option, and end
+                               // this negotiation.
+
+                               enabled = true;
+                               Logger.log("Enabling remote option " + optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                               endNegotiation();
+                       } else {
+                               // This should never happen!  We sent DONT and the server replied with
+                               // WILL.  Bad server.  No soup for you.  Disable the option, and end
+                               // this negotiation.
+
+                               Logger.log("Server answered DONT with WILL!"); //$NON-NLS-1$
+                               enabled = false;
+                               Logger.log("Disabling remote option " + optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                               endNegotiation();
+                       }
+               } else {
+                       if (desired) {
+                               // Server sent WILL, so we reply with DO.  Enable the option, and end
+                               // this negotiation.
+
+                               sendDo();
+                               enabled = true;
+                               Logger.log("Enabling remote option " + optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                               endNegotiation();
+                       } else {
+                               // Server sent WILL, so we reply with DONT.  Disable the option, and
+                               // end this negotiation.
+
+                               sendDont();
+                               enabled = false;
+                               Logger.log("Disabling remote option " + optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                               endNegotiation();
+                       }
+               }
+       }
+
+       /**
+        * Handles a WONT command sent by the remote endpoint for this option.  The value
+        * of <i>desired</i> doesn't matter in this method, because the remote endpoint is
+        * forcing the option to be disabled.
+        */
+       public void handleWont() {
+               if (negotiationState == NEGOTIATION_DONE && ignoreNegotiation()) {
+                       Logger
+                                       .log("Ignoring superfluous WONT command from remote endpoint."); //$NON-NLS-1$
+                       return;
+               }
+
+               if (negotiationState == NEGOTIATION_IN_PROGRESS) {
+                       // We sent DO or DONT and server replied with WONT.  Disable the
+                       // option, and end this negotiation.
+
+                       enabled = false;
+                       Logger.log("Disabling remote option " + optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                       endNegotiation();
+               } else {
+                       // Server sent WONT, so we reply with DONT.  Disable the option, and
+                       // end this negotiation.
+
+                       sendDont();
+                       enabled = false;
+                       Logger.log("Disabling remote option " + optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                       endNegotiation();
+               }
+       }
+
+       /**
+        * Handles a DO command sent by the remote endpoint for this option.
+        */
+       public void handleDo() {
+               if (negotiationState == NEGOTIATION_DONE && ignoreNegotiation()) {
+                       Logger.log("Ignoring superfluous DO command from remote endpoint."); //$NON-NLS-1$
+                       return;
+               }
+
+               if (negotiationState == NEGOTIATION_IN_PROGRESS) {
+                       if (desired) {
+                               // We sent WILL and server replied with DO.  Enable the option, and end
+                               // this negotiation.
+
+                               enabled = true;
+                               Logger.log("Enabling local option " + optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                               endNegotiation();
+                       } else {
+                               // We sent WONT and server replied with DO.  This should never happen!
+                               // Bad server.  No soup for you.  Disable the option, and end this
+                               // negotiation.
+
+                               Logger.log("Server answered WONT with DO!"); //$NON-NLS-1$
+                               enabled = false;
+                               Logger.log("Disabling local option " + optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                               endNegotiation();
+                       }
+               } else {
+                       if (desired) {
+                               // Server sent DO, so we reply with WILL.  Enable the option, and end
+                               // this negotiation.
+
+                               sendWill();
+                               enabled = true;
+                               Logger.log("Enabling local option " + optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                               endNegotiation();
+                       } else {
+                               // Server sent DO, so we reply with WONT.  Disable the option, and end
+                               // this negotiation.
+
+                               sendWont();
+                               enabled = false;
+                               Logger.log("Disabling local option " + optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                               endNegotiation();
+                       }
+               }
+       }
+
+       /**
+        * Handles a DONT command sent by the remote endpoint for this option.  The value
+        * of <i>desired</i> doesn't matter in this method, because the remote endpoint is
+        * forcing the option to be disabled.
+        */
+       public void handleDont() {
+               if (negotiationState == NEGOTIATION_DONE && ignoreNegotiation()) {
+                       Logger
+                                       .log("Ignoring superfluous DONT command from remote endpoint."); //$NON-NLS-1$
+                       return;
+               }
+
+               if (negotiationState == NEGOTIATION_IN_PROGRESS) {
+                       // We sent WILL or WONT and server replied with DONT.  Disable the
+                       // option, and end this negotiation.
+
+                       enabled = false;
+                       Logger.log("Disabling local option " + optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                       endNegotiation();
+               } else {
+                       // Server sent DONT, so we reply with WONT.  Disable the option, and end
+                       // this negotiation.
+
+                       sendWont();
+                       enabled = false;
+                       Logger.log("Disabling local option " + optionName() + "."); //$NON-NLS-1$ //$NON-NLS-2$
+                       endNegotiation();
+               }
+       }
+
+       /**
+        * This method handles a subnegotiation command received from the remote endpoint.
+        * Currently, the only subnegotiation we handle is when the remote endpoint
+        * commands us to send our terminal type (which is "xterm").
+        *
+        * @param subnegotiationData        An array of bytes containing a TELNET
+        *                                  subnegotiation command received from the
+        *                                  remote endpoint.
+        * @param count                     The number of bytes in array
+        *                                  subnegotiationData to examine.
+        */
+       public void handleSubnegotiation(byte[] subnegotiationData, int count) {
+               switch (option) {
+               case TELNET_OPTION_TERMINAL_TYPE:
+                       if (subnegotiationData[1] != TELNET_SEND) {
+                               // This should never happen!
+                               Logger
+                                               .log("Invalid TERMINAL-TYPE subnegotiation command from remote endpoint: " + //$NON-NLS-1$
+                                                               (subnegotiationData[1] & 0xff));
+                               break;
+                       }
+
+                       // Tell the remote endpoint our terminal type is "xterm" using this sequence
+                       // of TELNET protocol bytes:
+                       //
+                       //    IAC SB TERMINAL-TYPE IS x t e r m IAC SE
+
+                       byte[] terminalTypeData = { TELNET_IAC, TELNET_SB,
+                                       TELNET_OPTION_TERMINAL_TYPE, TELNET_IS, (byte) 'x',
+                                       (byte) 't', (byte) 'e', (byte) 'r', (byte) 'm', TELNET_IAC, TELNET_SE };
+
+                       try {
+                               outputStream.write(terminalTypeData);
+                       } catch (IOException ex) {
+                               Logger.log("IOException sending TERMINAL-TYPE subnegotiation!"); //$NON-NLS-1$
+                               Logger.logException(ex);
+                       }
+                       break;
+
+               default:
+                       // This should never happen!
+                       Logger
+                                       .log("SHOULD NOT BE REACHED: Called for option " + optionName()); //$NON-NLS-1$
+                       break;
+               }
+       }
+
+       /**
+        * This method sends a subnegotiation command to the remote endpoint.
+        *
+        * @param subnegotiationData        An array of Objects holding data to be used
+        *                                  when generating the outbound subnegotiation
+        *                                  command.
+        */
+       public void sendSubnegotiation(Object[] subnegotiationData) {
+               switch (option) {
+               case TELNET_OPTION_NAWS:
+                       // Get the width and height of the view and send it to the remote
+                       // endpoint using this sequence of TELNET protocol bytes:
+                       //
+                       //    IAC SB NAWS <width-highbyte> <width-lowbyte> <height-highbyte>
+                       //    <height-lowbyte> IAC SE
+
+                       final byte[] NAWSData = { TELNET_IAC, TELNET_SB, TELNET_OPTION_NAWS, 0,
+                                       0, 0, 0, TELNET_IAC, TELNET_SE };
+                       int width = ((Integer) subnegotiationData[0]).intValue();
+                       int height = ((Integer) subnegotiationData[1]).intValue();
+
+                       NAWSData[3] = (byte) ((width >>> 8) & 0xff); // High order byte of width.
+                       NAWSData[4] = (byte) (width & 0xff); // Low order byte of width.
+                       NAWSData[5] = (byte) ((height >>> 8) & 0xff); // High order byte of height.
+                       NAWSData[6] = (byte) (height & 0xff); // Low order byte of height.
+
+                       Logger
+                                       .log("sending terminal size to remote endpoint: width = " + width + //$NON-NLS-1$
+                                                       ", height = " + height + "."); //$NON-NLS-1$ //$NON-NLS-2$
+
+                       // Send the NAWS data in a new thread.  The current thread is the display
+                       // thread, and calls to write() can block, but blocking the display thread
+                       // is _bad_ (it hangs the GUI).
+
+                       Thread t=new Thread() {
+                               @Override
+                public void run() {
+                                       try {
+                                               outputStream.write(NAWSData);
+                                       } catch (IOException ex) {
+                                               Logger.log("IOException sending NAWS subnegotiation!"); //$NON-NLS-1$
+                                               Logger.logException(ex);
+                                       }
+                               }
+                       };
+                       t.setDaemon(true);
+                       t.start();
+                       break;
+
+               default:
+                       // This should never happen!
+                       Logger
+                                       .log("SHOULD NOT BE REACHED: Called for option " + optionName()); //$NON-NLS-1$
+                       break;
+               }
+       }
+
+       /**
+        * This method returns true if there has not yet been any negotiation of this
+        * option.
+        *
+        * @return Returns true if there has not yet been any negotiation of this option.
+        */
+       protected boolean notYetNegotiated() {
+               return negotiationState == NEGOTIATION_NOT_STARTED;
+       }
+
+       /**
+        * This method terminates the current negotiation and records the time at which the
+        * negotiation terminated.
+        */
+       protected void endNegotiation() {
+               Logger.log("Ending negotiation #" + negotiationCount + " for " + //$NON-NLS-1$ //$NON-NLS-2$
+                               (local ? "local" : "remote") + " option " + optionName()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+               negotiationState = NEGOTIATION_DONE;
+               negotiationCompletionTime.setTime(System.currentTimeMillis());
+               ++negotiationCount;
+       }
+
+       /**
+        * This method determines whether or not to ignore what appears to be a new
+        * negotiation initiated by the remote endpoint.  This is needed because some
+        * TELNET servers send superfluous option commands that a naive client might
+        * interpret as the start of a new negotiation.  If the superfluous command is not
+        * ignored, an option negotiation loop can result (which is bad).  For details
+        * about the superfluous commands sent by some servers, see the documentation for
+        * {@link #NEGOTIATION_NOT_STARTED}. <p>
+        *
+        * The current implementation of this method returns true if the new negotiation
+        * starts within NEGOTIATION_IGNORE_DURATION seconds of the end of the previous
+        * negotiation of this option. <p>
+        *
+        * @return Returns true if the new negotiation should be ignored, false if not.
+        */
+       protected boolean ignoreNegotiation() {
+               return (System.currentTimeMillis() - negotiationCompletionTime.getTime()) < NEGOTIATION_IGNORE_DURATION;
+       }
+
+       /**
+        * Sends a DO command to the remote endpoint for this option.
+        */
+       protected void sendDo() {
+               Logger.log("Sending DO " + optionName()); //$NON-NLS-1$
+               sendCommand(TELNET_DO);
+       }
+
+       /**
+        * Sends a DONT command to the remote endpoint for this option.
+        */
+       protected void sendDont() {
+               Logger.log("Sending DONT " + optionName()); //$NON-NLS-1$
+               sendCommand(TELNET_DONT);
+       }
+
+       /**
+        * Sends a WILL command to the remote endpoint for this option.
+        */
+       protected void sendWill() {
+               Logger.log("Sending WILL " + optionName()); //$NON-NLS-1$
+               sendCommand(TELNET_WILL);
+       }
+
+       /**
+        * Sends a WONT command to the remote endpoint for this option.
+        */
+       protected void sendWont() {
+               Logger.log("Sending WONT " + optionName()); //$NON-NLS-1$
+               sendCommand(TELNET_WONT);
+       }
+
+       /**
+        * This method sends a WILL/WONT/DO/DONT command to the remote endpoint for this
+        * option.
+        */
+       protected void sendCommand(byte command) {
+               byte[] data = { TELNET_IAC, 0, 0 };
+
+               data[1] = command;
+               data[2] = option;
+
+               try {
+                       outputStream.write(data);
+               } catch (IOException ex) {
+                       Logger.log("IOException sending command " + command); //$NON-NLS-1$
+                       Logger.logException(ex);
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetProperties.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetProperties.java
new file mode 100644 (file)
index 0000000..aa27cad
--- /dev/null
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - extracted from TerminalProperties 
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.connector;
+
+public class TelnetProperties {
+       private final NetworkPortMap fNetworkPortMap;
+       private final String fDefaultHost;
+       private final String fDefaultNetworkPort;
+
+       public TelnetProperties() {
+               fNetworkPortMap = new NetworkPortMap();
+               fDefaultNetworkPort = fNetworkPortMap.getDefaultNetworkPort();
+               fDefaultHost = ""; //$NON-NLS-1$
+       }
+
+       public String getDefaultHost() {
+               return fDefaultHost;
+       }
+
+       public String getDefaultNetworkPort() {
+               return fDefaultNetworkPort;
+       }
+
+       public NetworkPortMap getNetworkPortMap() {
+               // TODO Auto-generated method stub
+               return fNetworkPortMap;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetSettings.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetSettings.java
new file mode 100644 (file)
index 0000000..b64da0f
--- /dev/null
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2016 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - extracted from TerminalSettings
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.connector;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+
+/**
+ * @noreference This class is not intended to be referenced by clients.
+ */
+public class TelnetSettings implements ITelnetSettings {
+    protected String fHost;
+    protected String fNetworkPort;
+    protected String fTimeout;
+    protected String fEndOfLine = EOL_CRNUL;
+    private final TelnetProperties fProperties=new TelnetProperties();
+       @Override
+    public String getHost() {
+               return fHost;
+       }
+
+       public void setHost(String strHost) {
+               fHost = strHost;
+       }
+
+       public String getNetworkPortString() {
+               return fNetworkPort;
+       }
+
+       @Override
+    public int getNetworkPort() {
+               try {
+                       return Integer.parseInt(fNetworkPort);
+               } catch (NumberFormatException numberFormatException) {
+                       return 1313;
+               }
+       }
+
+       public void setNetworkPort(String strNetworkPort) {
+               fNetworkPort = strNetworkPort;
+       }
+
+       @Override
+    public String getSummary() {
+               return getHost() + ":" + getNetworkPortString(); //$NON-NLS-1$
+       }
+
+       @Override
+    public void load(ISettingsStore store) {
+               fHost = store.get("Host", fProperties.getDefaultHost());//$NON-NLS-1$
+               fNetworkPort = store.get("NetworkPort", fProperties.getDefaultNetworkPort());//$NON-NLS-1$
+               fTimeout = store.get("Timeout","10");//$NON-NLS-1$ //$NON-NLS-2$
+               fEndOfLine = store.get("EndOfLine", EOL_CRNUL);//$NON-NLS-1$
+       }
+
+       @Override
+    public void save(ISettingsStore store) {
+               store.put("Host", fHost);//$NON-NLS-1$
+               store.put("NetworkPort", fNetworkPort);//$NON-NLS-1$
+               store.put("Timeout", fTimeout);//$NON-NLS-1$
+               store.put("EndOfLine", fEndOfLine);//$NON-NLS-1$
+       }
+
+       public TelnetProperties getProperties() {
+               return fProperties;
+       }
+       @Override
+    public int getTimeout() {
+               try {
+                       return Integer.parseInt(fTimeout);
+               } catch (NumberFormatException numberFormatException) {
+                       return 10;
+               }
+       }
+       public String getTimeoutString() {
+               return fTimeout;
+       }
+
+       public void setTimeout(String timeout) {
+               fTimeout = timeout;
+       }
+
+       public void setEndOfLine(String eol) {
+               fEndOfLine = EOL_CRLF.equals(eol) ? EOL_CRLF : EOL_CRNUL;
+       }
+
+       @Override
+       public String getEndOfLine() {
+               return fEndOfLine;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetSettingsPage.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/connector/TelnetSettingsPage.java
new file mode 100644 (file)
index 0000000..26da971
--- /dev/null
@@ -0,0 +1,244 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2016 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - extracted from TerminalSettingsDlg
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [206917] Add validation for Terminal Settings
+ * Martin Oberhuber (Wind River) - [401476] Strip whitespace around Telnet Port
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.connector;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.tm.internal.terminal.provisional.api.AbstractSettingsPage;
+
+public class TelnetSettingsPage extends AbstractSettingsPage {
+       /* default */ Text fHostText;
+       /* default */ Combo fNetworkPortCombo;
+       /* default */ Text fTimeout;
+       /* default */ Combo fEndOfLineCombo;
+       private final TelnetSettings fTerminalSettings;
+
+       public TelnetSettingsPage(TelnetSettings settings) {
+               fTerminalSettings=settings;
+       }
+       @Override
+    public void saveSettings() {
+               fTerminalSettings.setHost(fHostText.getText());
+               fTerminalSettings.setTimeout(fTimeout.getText());
+               fTerminalSettings.setNetworkPort(getNetworkPort());
+               fTerminalSettings.setEndOfLine(getEndOfLine());
+       }
+
+       @Override
+    public void loadSettings() {
+               if(fTerminalSettings!=null) {
+                       setHost(fTerminalSettings.getHost());
+                       setTimeout(fTerminalSettings.getTimeoutString());
+                       setNetworkPort(fTerminalSettings.getNetworkPortString());
+                       setEndOfLine(fTerminalSettings.getEndOfLine());
+               }
+       }
+       private void setHost(String strHost) {
+               if(strHost==null)
+                       strHost=""; //$NON-NLS-1$
+               fHostText.setText(strHost);
+
+       }
+       private void setTimeout(String timeout) {
+               if(timeout==null || timeout.length()==0)
+                       timeout="5"; //$NON-NLS-1$
+               fTimeout.setText(timeout);
+
+       }
+       private void setNetworkPort(String strNetworkPort) {
+               if (strNetworkPort!=null) {
+                       String strPortName = getNetworkPortMap().findPortName(strNetworkPort);
+                       if(strPortName==null) {
+                               strPortName=strNetworkPort; //fallback to verbatim port if not found
+                       }
+                       int nIndex = fNetworkPortCombo.indexOf(strPortName);
+
+                       if (nIndex == -1) {
+                               fNetworkPortCombo.setText(strNetworkPort);
+                       } else {
+                               fNetworkPortCombo.select(nIndex);
+                       }
+               }
+       }
+       private String getNetworkPort() {
+               String portText = fNetworkPortCombo.getText().trim();
+               String mappedPort = getNetworkPortMap().findPort(portText);
+               return mappedPort!=null ? mappedPort : portText;
+       }
+       private NetworkPortMap getNetworkPortMap() {
+               return fTerminalSettings.getProperties().getNetworkPortMap();
+       }
+       private void setEndOfLine(String eol) {
+               int idx = fEndOfLineCombo.indexOf(eol);
+               fEndOfLineCombo.select(idx >= 0 ? idx : 0);
+       }
+       private String getEndOfLine() {
+               return fEndOfLineCombo.getText();
+       }
+       @Override
+    public boolean validateSettings() {
+               String message = null;
+               int messageType = IMessageProvider.NONE;
+               boolean valid = true;
+
+               if (fHostText.getText().trim().length() == 0) {
+                       String m = "Please enter a host IP or name."; //$NON-NLS-1$
+                       int mt = IMessageProvider.INFORMATION;
+                       updateControlDecoration(fHostText, m, mt);
+                       if (mt > messageType) { message = m; messageType = mt; }
+
+                       valid = false;
+               } else {
+                       updateControlDecoration(fHostText, null, IMessageProvider.NONE);
+               }
+
+               try {
+                       int p = Integer.parseInt(getNetworkPort());
+                       if (p <= 0 || p > 65535) {
+                               String m = "Invalid network port. Must be between 0 and 65535."; //$NON-NLS-1$
+                               int mt = IMessageProvider.ERROR;
+                               updateControlDecoration(fNetworkPortCombo, m, mt);
+                               if (mt > messageType) { message = m; messageType = mt; }
+
+                               valid = false;
+                       } else {
+                               updateControlDecoration(fNetworkPortCombo, null, IMessageProvider.NONE);
+                       }
+
+                       p = Integer.parseInt(fTimeout.getText().trim());
+                       if (p < 0) {
+                               String m = "Invalid timeout. Must be greater than 0."; //$NON-NLS-1$
+                               int mt = IMessageProvider.ERROR;
+                               updateControlDecoration(fTimeout, m, mt);
+                               if (mt > messageType) { message = m; messageType = mt; }
+
+                               valid = false;
+                       } else {
+                               updateControlDecoration(fTimeout, null, IMessageProvider.NONE);
+                       }
+
+               } catch (Exception e) {
+                       valid = false;
+               }
+
+               setMessage(message, messageType);
+               return valid;
+       }
+
+       @Override
+    public void createControl(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NONE);
+               GridLayout gridLayout = new GridLayout(2, false);
+               GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+               gridData.horizontalIndent = FieldDecorationRegistry.getDefault().getMaximumDecorationWidth();
+
+               composite.setLayout(gridLayout);
+               composite.setLayoutData(gridData);
+
+               // Add label
+               Label ctlLabel = new Label(composite, SWT.RIGHT);
+               ctlLabel.setText(TelnetMessages.HOST + ":"); //$NON-NLS-1$
+
+               // Add control
+               gridData = new GridData(GridData.FILL_HORIZONTAL);
+               fHostText = new Text(composite, SWT.BORDER);
+               fHostText.setLayoutData(gridData);
+               fHostText.addModifyListener(new ModifyListener() {
+                       @Override
+            public void modifyText(ModifyEvent e) {
+                               fireListeners(fHostText);
+                       }
+               });
+               createControlDecoration(fHostText);
+
+               // Add label
+               ctlLabel = new Label(composite, SWT.RIGHT);
+               ctlLabel.setText(TelnetMessages.PORT + ":"); //$NON-NLS-1$
+
+               // Add control
+               gridData = new GridData(GridData.FILL_HORIZONTAL);
+               fNetworkPortCombo = new Combo(composite, SWT.DROP_DOWN);
+               fNetworkPortCombo.setLayoutData(gridData);
+               fNetworkPortCombo.addModifyListener(new ModifyListener() {
+                       @Override
+            public void modifyText(ModifyEvent e) {
+                               fireListeners(fNetworkPortCombo);
+                       }
+               });
+               fNetworkPortCombo.addSelectionListener(new SelectionAdapter() {
+                       @Override
+            public void widgetSelected(SelectionEvent e) {
+                               fireListeners(fNetworkPortCombo);
+                       }
+               });
+               createControlDecoration(fNetworkPortCombo);
+
+               List<String> table = getNetworkPortMap().getNameTable();
+               Collections.sort(table);
+               loadCombo(fNetworkPortCombo, table);
+
+               new Label(composite, SWT.RIGHT).setText(TelnetMessages.TIMEOUT + ":"); //$NON-NLS-1$
+               fTimeout = new Text(composite, SWT.BORDER);
+               fTimeout.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               fTimeout.addModifyListener(new ModifyListener() {
+                       @Override
+            public void modifyText(ModifyEvent e) {
+                               fireListeners(fTimeout);
+                       }
+               });
+               createControlDecoration(fTimeout);
+
+               new Label(composite, SWT.RIGHT).setText(TelnetMessages.END_OF_LINE + ":"); //$NON-NLS-1$
+               gridData = new GridData(GridData.FILL_HORIZONTAL);
+               fEndOfLineCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
+               fEndOfLineCombo.setLayoutData(gridData);
+               fEndOfLineCombo.addSelectionListener(new SelectionAdapter() {
+                       @Override
+            public void widgetSelected(SelectionEvent e) {
+                               fireListeners(fEndOfLineCombo);
+                       }
+               });
+               loadCombo(fEndOfLineCombo, Arrays.asList(ITelnetSettings.EOL_CRNUL, ITelnetSettings.EOL_CRLF));
+
+               loadSettings();
+       }
+       private void loadCombo(Combo ctlCombo, List<String> table) {
+               for (Iterator<String> iter = table.iterator(); iter.hasNext();) {
+                       String label = iter.next();
+                       ctlCombo.add(label);
+               }
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/controls/TelnetWizardConfigurationPanel.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/controls/TelnetWizardConfigurationPanel.java
new file mode 100644 (file)
index 0000000..c2ad8d1
--- /dev/null
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [366374] [TERMINALS][TELNET] Add Telnet terminal support
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.controls;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.tm.internal.terminal.provisional.api.AbstractSettingsPage;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
+import org.eclipse.tm.terminal.connector.telnet.connector.NetworkPortMap;
+import org.eclipse.tm.terminal.connector.telnet.connector.TelnetConnector;
+import org.eclipse.tm.terminal.connector.telnet.connector.TelnetSettings;
+import org.eclipse.tm.terminal.connector.telnet.connector.TelnetSettingsPage;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel;
+
+/**
+ * telnet wizard configuration panel implementation.
+ */
+public class TelnetWizardConfigurationPanel extends AbstractExtendedConfigurationPanel {
+
+    public TelnetSettings telnetSettings;
+       private ISettingsPage telnetSettingsPage;
+
+       /**
+        * Constructor.
+        *
+        * @param container The configuration panel container or <code>null</code>.
+        */
+       public TelnetWizardConfigurationPanel(IConfigurationPanelContainer container) {
+           super(container);
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       public void setupPanel(Composite parent) {
+               Composite panel = new Composite(parent, SWT.NONE);
+               panel.setLayout(new GridLayout());
+               GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+               panel.setLayoutData(data);
+
+               // Create the host selection combo
+               if (isWithoutSelection()) createHostsUI(panel, true);
+
+               TelnetConnector conn = new TelnetConnector();
+               telnetSettings = (TelnetSettings) conn.getTelnetSettings();
+               telnetSettings.setHost(getSelectionHost());
+               // MWE otherwise we don't get a valid default selection of the combo
+               telnetSettings.setNetworkPort(NetworkPortMap.PROP_VALUETELNET);
+
+               telnetSettingsPage = new TelnetSettingsPage(telnetSettings);
+               if (telnetSettingsPage instanceof AbstractSettingsPage) {
+                       ((AbstractSettingsPage)telnetSettingsPage).setHasControlDecoration(true);
+               }
+               telnetSettingsPage.createControl(panel);
+
+               // Add the listener to the settings page
+               telnetSettingsPage.addListener(new ISettingsPage.Listener() {
+
+                       @Override
+                       public void onSettingsPageChanged(Control control) {
+                               if (getContainer() != null) getContainer().validate();
+                       }
+               });
+
+               // Create the encoding selection combo
+               createEncodingUI(panel, true);
+
+               setControl(panel);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setupData(java.util.Map)
+        */
+       @Override
+       public void setupData(Map<String, Object> data) {
+               if (data == null || telnetSettings == null || telnetSettingsPage == null) return;
+
+               String value = (String)data.get(ITerminalsConnectorConstants.PROP_IP_HOST);
+               if (value != null) telnetSettings.setHost(value);
+
+               Object v = data.get(ITerminalsConnectorConstants.PROP_IP_PORT);
+               value = v != null ? v.toString() : null;
+               if (value != null) telnetSettings.setNetworkPort(value);
+
+               v = data.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
+               value = v != null ? v.toString() : null;
+               if (value != null) telnetSettings.setTimeout(value);
+
+               v = data.get(ITerminalsConnectorConstants.PROP_TELNET_EOL);
+               value = v != null ? v.toString() : null;
+               if (value != null) telnetSettings.setEndOfLine(value);
+
+               value = (String)data.get(ITerminalsConnectorConstants.PROP_ENCODING);
+               if (value != null) setEncoding(value);
+
+               telnetSettingsPage.loadSettings();
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#extractData(java.util.Map)
+        */
+       @Override
+       public void extractData(Map<String, Object> data) {
+               if (data == null) return;
+
+       // set the terminal connector id for ssh
+       data.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, "org.eclipse.tm.terminal.connector.telnet.TelnetConnector"); //$NON-NLS-1$
+
+       telnetSettingsPage.saveSettings();
+               data.put(ITerminalsConnectorConstants.PROP_IP_HOST,telnetSettings.getHost());
+               data.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.valueOf(telnetSettings.getNetworkPort()));
+               data.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.valueOf(telnetSettings.getTimeout()));
+               data.put(ITerminalsConnectorConstants.PROP_TELNET_EOL, telnetSettings.getEndOfLine());
+               data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding());
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String)
+        */
+       @Override
+       protected void fillSettingsForHost(String host){
+               if (host != null && host.length() != 0){
+                       if (hostSettingsMap.containsKey(host)){
+                               Map<String, String> hostSettings = hostSettingsMap.get(host);
+                               if (hostSettings.get(ITerminalsConnectorConstants.PROP_IP_HOST) != null) {
+                                       telnetSettings.setHost(hostSettings.get(ITerminalsConnectorConstants.PROP_IP_HOST));
+                               }
+                               if (hostSettings.get(ITerminalsConnectorConstants.PROP_IP_PORT) != null) {
+                                       telnetSettings.setNetworkPort(hostSettings.get(ITerminalsConnectorConstants.PROP_IP_PORT));
+                               }
+                               if (hostSettings.get(ITerminalsConnectorConstants.PROP_TIMEOUT) != null) {
+                                       telnetSettings.setTimeout(hostSettings.get(ITerminalsConnectorConstants.PROP_TIMEOUT));
+                               }
+                               if (hostSettings.get(ITerminalsConnectorConstants.PROP_TELNET_EOL) != null) {
+                                       telnetSettings.setEndOfLine(hostSettings.get(ITerminalsConnectorConstants.PROP_TELNET_EOL));
+                               }
+                               if (hostSettings.get(ITerminalsConnectorConstants.PROP_ENCODING) != null) {
+                                       setEncoding(hostSettings.get(ITerminalsConnectorConstants.PROP_ENCODING));
+                               }
+                       } else {
+                               telnetSettings.setHost(getSelectionHost());
+                               // MWE otherwise we don't get a valid default selection of the combo
+                               telnetSettings.setNetworkPort(NetworkPortMap.PROP_VALUETELNET);
+                       }
+                       // set settings in page
+                       telnetSettingsPage.loadSettings();
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean)
+        */
+       @Override
+       protected void saveSettingsForHost(boolean add){
+               String host = getHostFromSettings();
+               if(host != null && host.length() != 0) {
+                       Map<String, String> hostSettings = hostSettingsMap.get(host);
+                       if (hostSettings == null && !add) {
+                               hostSettings=new HashMap<String, String>();
+                               hostSettingsMap.put(host, hostSettings);
+                       }
+                       if (hostSettings != null) {
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_IP_HOST, telnetSettings.getHost());
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_IP_PORT, Integer.toString(telnetSettings.getNetworkPort()));
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_TIMEOUT, Integer.toString(telnetSettings.getTimeout()));
+                               hostSettings.put(ITerminalsConnectorConstants.PROP_TELNET_EOL, telnetSettings.getEndOfLine());
+                               if (getEncoding() != null) {
+                                       hostSettings.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding());
+                               }
+                       }
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
+        */
+       @Override
+    public boolean isValid(){
+               return isEncodingValid() && telnetSettingsPage.validateSettings();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
+        */
+       @Override
+    public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
+       saveSettingsForHost(true);
+       super.doSaveWidgetValues(settings, idPrefix);
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings()
+        */
+       @Override
+    protected String getHostFromSettings() {
+               telnetSettingsPage.saveSettings();
+           return telnetSettings.getHost();
+    }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/launcher/TelnetLauncherDelegate.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/launcher/TelnetLauncherDelegate.java
new file mode 100644 (file)
index 0000000..27ca63f
--- /dev/null
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [366374] [TERMINALS][TELNET] Add Telnet terminal support
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.launcher;
+
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
+import org.eclipse.tm.terminal.connector.telnet.connector.TelnetSettings;
+import org.eclipse.tm.terminal.connector.telnet.controls.TelnetWizardConfigurationPanel;
+import org.eclipse.tm.terminal.connector.telnet.nls.Messages;
+import org.eclipse.tm.terminal.view.core.TerminalServiceFactory;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
+import org.eclipse.tm.terminal.view.ui.internal.SettingsStore;
+import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate;
+
+/**
+ * Telnet launcher delegate implementation.
+ */
+@SuppressWarnings("restriction")
+public class TelnetLauncherDelegate extends AbstractLauncherDelegate {
+       // The Telnet terminal connection memento handler
+       private final IMementoHandler mementoHandler = new TelnetMementoHandler();
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#needsUserConfiguration()
+        */
+       @Override
+       public boolean needsUserConfiguration() {
+               return true;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getPanel(org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer)
+        */
+       @Override
+       public IConfigurationPanel getPanel(IConfigurationPanelContainer container) {
+               return new TelnetWizardConfigurationPanel(container);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#execute(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
+        */
+       @Override
+       public void execute(Map<String, Object> properties, ITerminalService.Done done) {
+               Assert.isNotNull(properties);
+
+               // Set the terminal tab title
+               String terminalTitle = getTerminalTitle(properties);
+               if (terminalTitle != null) {
+                       properties.put(ITerminalsConnectorConstants.PROP_TITLE, terminalTitle);
+               }
+
+               // For Telnet terminals, force a new terminal tab each time it is launched,
+               // if not set otherwise from outside
+               if (!properties.containsKey(ITerminalsConnectorConstants.PROP_FORCE_NEW)) {
+                       properties.put(ITerminalsConnectorConstants.PROP_FORCE_NEW, Boolean.TRUE);
+               }
+
+               // Get the terminal service
+               ITerminalService terminal = TerminalServiceFactory.getService();
+               // If not available, we cannot fulfill this request
+               if (terminal != null) {
+                       terminal.openConsole(properties, done);
+               }
+       }
+
+       /**
+        * Returns the terminal title string.
+        * <p>
+        * The default implementation constructs a title like &quot;Telnet @ host (Start time) &quot;.
+        *
+        * @return The terminal title string or <code>null</code>.
+        */
+    private String getTerminalTitle(Map<String, Object> properties) {
+               // Try to see if the user set a title explicitly via the properties map.
+               String title = getDefaultTerminalTitle(properties);
+               if (title != null) return title;
+
+               //No title,try to calculate the title
+               String host = (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST);
+
+               if (host != null) {
+                       DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
+                       String date = format.format(new Date(System.currentTimeMillis()));
+                       return NLS.bind(Messages.TelnetLauncherDelegate_terminalTitle, new String[]{host, date});
+               }
+
+               return Messages.TelnetLauncherDelegate_terminalTitle_default;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
+        */
+       @Override
+       public Object getAdapter(Class adapter) {
+               if (IMementoHandler.class.equals(adapter)) {
+                       return mementoHandler;
+               }
+           return super.getAdapter(adapter);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map)
+        */
+    @Override
+       public ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
+       Assert.isNotNull(properties);
+
+       // Check for the terminal connector id
+       String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
+               if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.telnet.TelnetConnector"; //$NON-NLS-1$
+
+               // Extract the telnet properties
+               String host = (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST);
+               Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT);
+               String port = value != null ? value.toString() : null;
+               value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
+               String timeout = value != null ? value.toString() : null;
+               String endOfLine = (String)properties.get(ITerminalsConnectorConstants.PROP_TELNET_EOL);
+
+               int portOffset = 0;
+               if (properties.get(ITerminalsConnectorConstants.PROP_IP_PORT_OFFSET) instanceof Integer) {
+                       portOffset = ((Integer)properties.get(ITerminalsConnectorConstants.PROP_IP_PORT_OFFSET)).intValue();
+                       if (portOffset < 0) portOffset = 0;
+               }
+
+               // The real port to connect to is port + portOffset
+               if (port != null) {
+                       port = Integer.toString(Integer.decode(port).intValue() + portOffset);
+               }
+
+               // Construct the terminal settings store
+               ISettingsStore store = new SettingsStore();
+
+               // Construct the telnet settings
+               TelnetSettings telnetSettings = new TelnetSettings();
+               telnetSettings.setHost(host);
+               telnetSettings.setNetworkPort(port);
+               if (timeout != null) {
+                       telnetSettings.setTimeout(timeout);
+               }
+               telnetSettings.setEndOfLine(endOfLine);
+               // And save the settings to the store
+               telnetSettings.save(store);
+
+               // Construct the terminal connector instance
+               ITerminalConnector connector = TerminalConnectorExtension.makeTerminalConnector(connectorId);
+               if (connector != null) {
+                       // Apply default settings
+                       connector.setDefaultSettings();
+                       // And load the real settings
+                       connector.load(store);
+               }
+
+               return connector;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/launcher/TelnetMementoHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/launcher/TelnetMementoHandler.java
new file mode 100644 (file)
index 0000000..bf05649
--- /dev/null
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.launcher;
+
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
+import org.eclipse.ui.IMemento;
+
+/**
+ * Telnet terminal connection memento handler implementation.
+ */
+public class TelnetMementoHandler implements IMementoHandler {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#saveState(org.eclipse.ui.IMemento, java.util.Map)
+        */
+       @Override
+       public void saveState(IMemento memento, Map<String, Object> properties) {
+               Assert.isNotNull(memento);
+               Assert.isNotNull(properties);
+
+               // Do not write the terminal title to the memento -> needs to
+               // be recreated at the time of restoration.
+               memento.putString(ITerminalsConnectorConstants.PROP_IP_HOST, (String)properties.get(ITerminalsConnectorConstants.PROP_IP_HOST));
+               Object value = properties.get(ITerminalsConnectorConstants.PROP_IP_PORT);
+               memento.putInteger(ITerminalsConnectorConstants.PROP_IP_PORT, value instanceof Integer ? ((Integer)value).intValue() : -1);
+               value = properties.get(ITerminalsConnectorConstants.PROP_TIMEOUT);
+               memento.putInteger(ITerminalsConnectorConstants.PROP_TIMEOUT, value instanceof Integer ? ((Integer)value).intValue() : -1);
+               memento.putString(ITerminalsConnectorConstants.PROP_ENCODING, (String)properties.get(ITerminalsConnectorConstants.PROP_ENCODING));
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler#restoreState(org.eclipse.ui.IMemento, java.util.Map)
+        */
+       @Override
+       public void restoreState(IMemento memento, Map<String, Object> properties) {
+               Assert.isNotNull(memento);
+               Assert.isNotNull(properties);
+
+               // Restore the terminal properties from the memento
+               properties.put(ITerminalsConnectorConstants.PROP_IP_HOST, memento.getString(ITerminalsConnectorConstants.PROP_IP_HOST));
+               properties.put(ITerminalsConnectorConstants.PROP_IP_PORT, memento.getInteger(ITerminalsConnectorConstants.PROP_IP_PORT));
+               properties.put(ITerminalsConnectorConstants.PROP_TIMEOUT, memento.getInteger(ITerminalsConnectorConstants.PROP_TIMEOUT));
+               properties.put(ITerminalsConnectorConstants.PROP_ENCODING, memento.getString(ITerminalsConnectorConstants.PROP_ENCODING));
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/nls/Messages.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/nls/Messages.java
new file mode 100644 (file)
index 0000000..e49d619
--- /dev/null
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [366374] [TERMINALS][TELNET] Add Telnet terminal support
+ *******************************************************************************/
+package org.eclipse.tm.terminal.connector.telnet.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Externalized strings management.
+ */
+public class Messages extends NLS {
+
+       // The plug-in resource bundle name
+       private static final String BUNDLE_NAME = "org.eclipse.tm.terminal.connector.telnet.nls.Messages"; //$NON-NLS-1$
+
+       /**
+        * Static constructor.
+        */
+       static {
+               // Load message values from bundle file
+               NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+       }
+
+       // **** Declare externalized string id's down here *****
+
+       public static String TelnetLauncherDelegate_terminalTitle;
+       public static String TelnetLauncherDelegate_terminalTitle_default;
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/nls/Messages.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.connector.telnet/src/org/eclipse/tm/terminal/connector/telnet/nls/Messages.properties
new file mode 100644 (file)
index 0000000..84eac7a
--- /dev/null
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+
+TelnetLauncherDelegate_terminalTitle=Telnet {0} ({1})
+TelnetLauncherDelegate_terminalTitle_default=Telnet Terminal
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.classpath b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.classpath
new file mode 100644 (file)
index 0000000..25d360e
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src/"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.cvsignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.cvsignore
new file mode 100644 (file)
index 0000000..ba077a4
--- /dev/null
@@ -0,0 +1 @@
+bin
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.gitignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.options b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.options
new file mode 100644 (file)
index 0000000..7e591a4
--- /dev/null
@@ -0,0 +1,3 @@
+org.eclipse.tm.terminal.control/debug/log = false
+org.eclipse.tm.terminal.control/debug/log/char = false
+org.eclipse.tm.terminal.control/debug/log/VT100Backend = false
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.project b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.project
new file mode 100644 (file)
index 0000000..11e18c3
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.control</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.settings/org.eclipse.core.resources.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.settings/org.eclipse.core.resources.prefs
new file mode 100644 (file)
index 0000000..775bde2
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding//src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java=UTF-8
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.settings/org.eclipse.jdt.core.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..eb9982c
--- /dev/null
@@ -0,0 +1,100 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/HelpContexts.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/HelpContexts.xml
new file mode 100644 (file)
index 0000000..761da67
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.contexts"?>
+<!--
+Copyright (c) 2008 Wind River Systems, Inc.
+All rights reserved. This program and the accompanying materials 
+are made available under the terms of the Eclipse Public License v1.0 
+which accompanies this distribution, and is available at 
+http://www.eclipse.org/legal/epl-v10.html 
+
+Contributors: 
+Martin Oberhuber (Wind River) - initial API and implementation  
+-->
+<contexts>
+  <context id="terminal_view">
+    <description>The Terminal View supports direct connections to remote systems via serial or network connections.
+    </description>
+  </context>
+</contexts>
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..834c287
--- /dev/null
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.tm.terminal.control; singleton:=true
+Bundle-Version: 4.2.0.qualifier
+Bundle-Activator: org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.ui
+Bundle-ActivationPolicy: lazy
+Eclipse-LazyStart: true
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ClassPath: .
+Export-Package: org.eclipse.tm.internal.terminal.connector;x-internal:=true,
+ org.eclipse.tm.internal.terminal.control,
+ org.eclipse.tm.internal.terminal.control.actions,
+ org.eclipse.tm.internal.terminal.control.impl;x-internal:=true,
+ org.eclipse.tm.internal.terminal.emulator;x-internal:=true,
+ org.eclipse.tm.internal.terminal.model;x-internal:=true,
+ org.eclipse.tm.internal.terminal.preferences,
+ org.eclipse.tm.internal.terminal.provisional.api,
+ org.eclipse.tm.internal.terminal.provisional.api.provider,
+ org.eclipse.tm.internal.terminal.textcanvas;x-internal:=true,
+ org.eclipse.tm.terminal.model
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/README.txt b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/README.txt
new file mode 100644 (file)
index 0000000..c88bc69
--- /dev/null
@@ -0,0 +1,18 @@
+Terminal README
+===============
+
+The Terminal is a UI-less model of a grid of characters,
+plus an SWT widget that's updated asynchronously for 
+maximum performance. The widget can be hooked up to various
+ITerminalConnectors providing an InputStream, OutputStream,
+and a method for setting the Terminal Size.
+
+The widget processes ANSI control characters, including NUL,
+backspace, carriage return, linefeed, and a subset of ANSI
+escape sequences sufficient to allow use of screen-oriented
+applications, such as vi, Emacs, and any GNU readline-enabled
+application (Bash, bc, ncftp, etc.).
+
+This is not yet a fully compliant vt100 / vt102 terminal 
+emulator!
+
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/about.html b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/about.html
new file mode 100644 (file)
index 0000000..d4cc693
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+<p>June 5, 2007</p>    
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/about.ini b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/about.ini
new file mode 100644 (file)
index 0000000..3adc27a
--- /dev/null
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=tm32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+# optional
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/about.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/about.properties
new file mode 100644 (file)
index 0000000..ad76531
--- /dev/null
@@ -0,0 +1,24 @@
+################################################################################
+# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Martin Oberhuber - initial API and implementation 
+################################################################################
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+#
+# Do not translate any values surrounded by {}
+
+blurb=Target Management Terminal Widget\n\
+\n\
+Version: {featureVersion}\n\
+\n\
+(c) Copyright Wind River Systems, Inc. and others 2003, 2016.  All rights reserved.\n\
+Visit http://www.eclipse.org/tm
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/build.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/build.properties
new file mode 100644 (file)
index 0000000..6d04269
--- /dev/null
@@ -0,0 +1,36 @@
+###############################################################################
+# Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Initial Contributors:
+# The following Wind River employees contributed to the Terminal component
+# that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+# Helmut Haigermoser and Ted Williams.
+#
+# Contributors:
+# Michael Scharf (Wind River) - split into core, view and connector plugins 
+# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+# Anna Dushistova (MontaVista) - added icons
+###############################################################################
+bin.includes = .,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               .options,\
+               README.txt,\
+               about.html,\
+               about.ini,\
+               about.properties,\
+               tm32.png,\
+               icons/,\
+               HelpContexts.xml,\
+               css/
+               
+source.. = src/
+output.. = bin/
+src.includes = schema/,\
+               about.html
+               
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/css/org.eclipse.tm.terminal.stylesheet.dark.css b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/css/org.eclipse.tm.terminal.stylesheet.dark.css
new file mode 100644 (file)
index 0000000..ab89d9e
--- /dev/null
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 vogella GmbH and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Lars Vogel <Lars.Vogel@gmail.com> - initial API and implementation
+ ******************************************************************************/
+
+IEclipsePreferences#org-eclipse-tm-terminal-control {
+       preferences:
+       "TerminalPrefInvertColors=true"
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/icons/clcl16/clear_co.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/icons/clcl16/clear_co.gif
new file mode 100644 (file)
index 0000000..af30a42
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/icons/clcl16/clear_co.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/icons/dlcl16/clear_co.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/icons/dlcl16/clear_co.gif
new file mode 100644 (file)
index 0000000..6775edf
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/icons/dlcl16/clear_co.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/icons/elcl16/clear_co.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/icons/elcl16/clear_co.gif
new file mode 100644 (file)
index 0000000..af30a42
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/icons/elcl16/clear_co.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/plugin.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/plugin.properties
new file mode 100644 (file)
index 0000000..58e317d
--- /dev/null
@@ -0,0 +1,42 @@
+###############################################################################
+# Copyright (c) 2003 - 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Initial Contributors:
+# The following Wind River employees contributed to the Terminal component
+# that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+# Helmut Haigermoser and Ted Williams.
+#
+# Contributors:
+# Michael Scharf (Wind River) - split into core, view and connector plugins 
+# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+# Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
+###############################################################################
+
+# NLS_MESSAGEFORMAT_NONE
+
+pluginName = Terminal Control (Embeddable Widget)
+providerName = Eclipse.org - Target Management
+
+terminal.context.name.edit=Terminal Control in Focus
+terminal.context.description.edit=Show modified keyboard shortcuts in context menu
+
+terminal.context.name.terminal=Terminal Typing Connected
+terminal.context.description.terminal=Override ALT+x menu access keys while typing into the Terminal
+
+terminal.insertion.description=Terminal view insertion
+terminal.insertion.name=Terminal view insert
+terminal.insertion.category.name=Terminal view commands
+terminal.view.insertion.description = Terminal view commands
+
+terminal.command.copy.name=Copy
+terminal.command.paste.name=Paste
+terminal.command.maximize.name=Maximize Active View or Editor
+terminal.command.quickaccess.name=Quick Access
+
+terminal.preferences.name = Terminal
+terminal.font.description = The font for the terminal console.
+terminal.font.label = Terminal Console Font
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/plugin.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/plugin.xml
new file mode 100644 (file)
index 0000000..f6f5f03
--- /dev/null
@@ -0,0 +1,275 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+# Copyright (c) 2006, 2014 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Michael Scharf (Wind River) - initial API and implementation 
+# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+# Michael Scharf (Wind River) - [237425] undefined tm.terminal command
+# Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
+# Martin Oberhuber (Wind River) - [434294] Add Mac bindings with COMMAND
+# Martin Oberhuber (Wind River) - [434487] Add key bindings for "maximize view" and "quick access"
+# Martin Oberhuber (Wind River) - [434939] Fix Keybinding conflicts with JEE Luna package
+-->
+<plugin>
+   <extension-point id="connectors" name="Terminal Connector Extensions" schema="schema/connectors.exsd"/>
+   
+   <extension point="org.eclipse.ui.contexts">           
+      <context
+            name="%terminal.context.name.terminal"
+            description="%terminal.context.description.terminal"
+            parentId="org.eclipse.ui.contexts.window"
+            id="org.eclipse.tm.terminal.TerminalContext"
+            />
+    <context
+            name="%terminal.context.name.edit"
+            description="%terminal.context.description.edit"
+            parentId="org.eclipse.ui.contexts.window"
+            id="org.eclipse.tm.terminal.EditContext" />
+   </extension>
+
+    <extension point="org.eclipse.help.contexts">
+        <contexts file="HelpContexts.xml"/>
+   </extension>
+   <extension
+         point="org.eclipse.ui.commands">
+      <!-- Dummy commands for bindings, see below -->
+      <command
+            categoryId="org.eclipse.tm.terminal.category1"
+            id="org.eclipse.tm.terminal.command1"
+            name="%terminal.insertion.name"/>
+      <command
+            categoryId="org.eclipse.tm.terminal.category1"
+            id="org.eclipse.tm.terminal.copy"
+            name="%terminal.command.copy.name"/>
+      <command
+            categoryId="org.eclipse.tm.terminal.category1"
+            id="org.eclipse.tm.terminal.paste"
+            name="%terminal.command.paste.name"/>
+      <command
+            categoryId="org.eclipse.tm.terminal.category1"
+            id="org.eclipse.tm.terminal.maximize"
+            name="%terminal.command.maximize.name">
+      </command>
+      <command
+            categoryId="org.eclipse.tm.terminal.category1"
+            id="org.eclipse.tm.terminal.quickaccess"
+            name="%terminal.command.quickaccess.name"/>
+      <category
+            description="%terminal.view.insertion.description"
+            id="org.eclipse.tm.terminal.category1"
+            name="%terminal.insertion.category.name"/>
+   </extension>
+
+    <extension point="org.eclipse.help.contexts">
+        <contexts file="HelpContexts.xml"/>
+    </extension>
+
+   <extension
+         point="org.eclipse.ui.bindings">
+      <!--
+      These keybindings are needed to disable the menu-activation keys (e.g.,
+      Alt-F for the File menu, etc.).  The code in method
+      TerminalControl.TerminalFocusListener.focusGained() disables the Eclipse key
+      binding service, but it doesn't disable the global menu-activation
+      keys.
+      -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+A"/> <!-- Search -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+B"/> <!-- Readline word-left: just to be safe -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+C"/> <!-- ClearCase, Extract Constant -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+D"/> <!-- Design, Diagram, Debug -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+E"/> <!-- Edit -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+F"/> <!-- File -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+G"/> <!-- Tar&get -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+H"/> <!-- Help -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+L"/> <!-- Ana&lyze -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+N"/> <!-- Navigate -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+P"/> <!-- Project, Papyrus, Ping -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+R"/> <!-- Run -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+S"/> <!-- Source -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+T"/> <!-- Refactor -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+V"/> <!-- CVS -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+W"/> <!-- Window -->
+      <key
+            commandId="org.eclipse.tm.terminal.command1"
+            contextId="org.eclipse.tm.terminal.TerminalContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="Alt+Y"/> <!-- S&ystem -->
+      <!-- 
+           For Copy and Paste, we need replacements since the default Ctrl+C / Ctrl+V
+           need to go to the terminal and thus are not available for local Copy and Paste.
+           This is not an issue on Mac, where COMMAND+C / COMMAND+V works fine.
+           
+           We add both CTRL+INSERT and CTRL+SHIFT+C since on some keyboards, an INSERT key
+           may not be available. Note: we want the "least surprising" and "most available"
+           of all bindings to be shown in the context menu according to the algorithm in 
+           IBindingService#getBestActiveBindingFor().
+           Therefore, we do not want these extra bindings to be shown on the Mac. 
+
+           Unfortunately, there is no way in Bindings to say "NOT Platforms X,Y,Z"
+           We would really like one of the following here but it doesnt work with Eclipse 4.3:
+              platforms="!carbon,!cocoa"
+              platforms="win32,motif,gtk,photon,wpf"
+           Since Eclipse doesnt support this, we will redefine the original Mac bindings below,
+           just to make them show up in the context menu.
+      -->
+      <key
+            commandId="org.eclipse.tm.terminal.copy"
+            contextId="org.eclipse.tm.terminal.EditContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M1+INSERT"/><!-- Ctrl+Insert -->
+      <key
+            commandId="org.eclipse.tm.terminal.copy"
+            contextId="org.eclipse.tm.terminal.EditContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M1+M2+C"><!-- Ctrl+Shift+C -->
+      </key>
+      <key
+            commandId="org.eclipse.tm.terminal.paste"
+            contextId="org.eclipse.tm.terminal.EditContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M2+INSERT"/><!-- Shift+Insert -->
+      <key
+            commandId="org.eclipse.tm.terminal.paste"
+            contextId="org.eclipse.tm.terminal.EditContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M1+M2+V"/><!-- Ctrl+Shift+V -->
+      <!--
+           Mac shortcuts need to be redefined with Platform Filter, in order to make
+           them "better" than the bindings above and thus show up in the menu.
+           See the algorithm in IBindingService#getBestActiveBindingFor().
+           It looks like the "carbon" entry is also valid for "cocoa" automatically.
+      -->
+      <key
+            commandId="org.eclipse.tm.terminal.copy"
+            contextId="org.eclipse.tm.terminal.EditContext"
+            platform="carbon"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M1+C">
+      </key>
+      <key
+            commandId="org.eclipse.tm.terminal.paste"
+            contextId="org.eclipse.tm.terminal.EditContext"
+            platform="carbon"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M1+V"/>
+      <!--
+           Additional Bindings for Quick Access (Ctrl+3) and Maximize View (Ctrl+M)
+           since these are extremely valuable, but the original shortcut may need
+           to go to the Terminal.
+      -->
+      <!-- org.eclipse.ui.window.quickAccess -->
+      <key
+            commandId="org.eclipse.tm.terminal.quickaccess"
+            contextId="org.eclipse.tm.terminal.EditContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M3+ARROW_RIGHT"/>
+      <!-- org.eclipse.ui.window.maximizePart -->
+      <key
+            commandId="org.eclipse.tm.terminal.maximize"
+            contextId="org.eclipse.tm.terminal.EditContext"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M3+ARROW_UP"/>
+   </extension>
+
+   <extension point="org.eclipse.ui.preferencePages">
+      <page
+            name="%terminal.preferences.name"
+            class="org.eclipse.tm.internal.terminal.preferences.TerminalPreferencePage"
+            id="org.eclipse.tm.terminal.TerminalPreferencePage">
+      </page>
+   </extension>
+
+   <extension point="org.eclipse.core.runtime.preferences">
+      <initializer class="org.eclipse.tm.internal.terminal.preferences.TerminalPreferenceInitializer"/>
+   </extension>
+
+   <extension point="org.eclipse.ui.themes" id="terminal.font">
+      <fontDefinition
+            defaultsTo="org.eclipse.jface.textfont"
+            id="terminal.views.view.font.definition"
+            label="%terminal.font.label">
+         <description>
+            %terminal.font.description
+         </description>
+      </fontDefinition>
+   </extension>
+   
+<!-- Theme contributions -->   
+   <extension point="org.eclipse.e4.ui.css.swt.theme">
+      <stylesheet
+            uri="css/org.eclipse.tm.terminal.stylesheet.dark.css">
+            <themeid refid="org.eclipse.e4.ui.css.theme.e4_dark"/>
+      </stylesheet>
+   </extension>
+
+</plugin>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/pom.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/pom.xml
new file mode 100644 (file)
index 0000000..e97df3f
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.tizen</groupId>
+    <artifactId>tizen-patches</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+    <relativePath>../../../tizen.rt.upstream.patches</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.control</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/pom2.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/pom2.xml
new file mode 100644 (file)
index 0000000..ba9f003
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.control</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/schema/connectors.exsd b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/schema/connectors.exsd
new file mode 100644 (file)
index 0000000..58681ba
--- /dev/null
@@ -0,0 +1,111 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.tm.terminal.control" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.tm.terminal.control" id="connectors" name="Terminal Connector Extensions"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="1" maxOccurs="unbounded">
+            <element ref="connector"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="connector">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A class extending TerminalConnectorImpl
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl:"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Uniquely identify this connector for programmatic access. Clients will use this ID in order to find and instantiate it.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  The name of the connection (used in the UI)
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="hidden" type="boolean" use="default" value="false">
+            <annotation>
+               <documentation>
+                  When set to &quot;true&quot;, the terminal connector will not be visible to the user in connector selections.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+
+
+
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2006 - 2015 Wind River Systems, Inc. and others.
+All rights reserved. This program and the accompanying materials 
+are made available under the terms of the Eclipse Public License v1.0 
+which accompanies this distribution, and is available at 
+http://www.eclipse.org/legal/epl-v10.html 
+
+Contributors: 
+Michael Scharf (Wind River) - initial API and implementation
+Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+Uwe Stieber (Wind River) - [282996] [terminal][api] Add &quot;hidden&quot; attribute to terminal connector extension point
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/connector/TerminalConnector.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/connector/TerminalConnector.java
new file mode 100644 (file)
index 0000000..cfbdabe
--- /dev/null
@@ -0,0 +1,223 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Michael Scharf (Wind River) - [200541] Extract from TerminalConnectorExtension.TerminalConnectorProxy
+ * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl 
+ * Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.connector;
+
+import java.io.OutputStream;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
+
+/**
+ * An {@link ITerminalConnector} instance, also known as terminal connection
+ * type, for maintaining a single terminal connection.
+ *
+ * It provides all terminal connector functions that can be provided by static
+ * markup without loading the actual implementation class. The actual
+ * {@link TerminalConnectorImpl} implementation class is lazily loaded by the
+ * provided {@link TerminalConnector.Factory} interface when needed. class, and
+ * delegates to the actual implementation when needed. The following methods can
+ * be called without initializing the contributed implementation class:
+ * {@link #getId()}, {@link #getName()}, {@link #getSettingsSummary()},{@link #load(ISettings)},
+ * {@link #setTerminalSize(int, int)}, {@link #save(ISettings)},
+ * {@link #getAdapter(Class)}
+ *
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ *                Clients can get terminal connector instances through the
+ *                {@link TerminalConnectorExtension} class.
+ * @since org.eclipse.tm.terminal 2.0
+ */
+public class TerminalConnector implements ITerminalConnector {
+       /**
+        * Creates an instance of TerminalConnectorImpl. This is used to lazily load
+        * classed defined in extensions.
+        *
+        * @since org.eclipse.tm.terminal 2.0
+        */
+       public interface Factory {
+               /**
+                * Factory method to create the actual terminal connector implementation
+                * when needed.
+                *
+                * @return a Connector
+                * @throws Exception
+                */
+               TerminalConnectorImpl makeConnector() throws Exception;
+       }
+       /**
+        * The factory for creating impl instances.
+        */
+       private final TerminalConnector.Factory fTerminalConnectorFactory;
+       /**
+        * The (display) name of the TerminalConnector
+        */
+       private final String fName;
+       /**
+        * The unique id the connector
+        */
+       private final String fId;
+       /**
+        * Flag to mark the connector as hidden.
+        */
+       private final boolean fHidden;
+       /**
+        * The connector
+        */
+       private TerminalConnectorImpl fConnector;
+       /**
+        * If the initialization of the class specified in the extension fails,
+        * this variable contains the error
+        */
+       private Exception fException;
+       /**
+        * The store might be set before the real connector is initialized.
+        * This keeps the value until the connector is created.
+        */
+       private ISettingsStore fStore;
+       /**
+        * Constructor for the terminal connector.
+        *
+        * @param terminalConnectorFactory Factory for lazily instantiating the
+        *            TerminalConnectorImpl when needed.
+        * @param id terminal connector ID. The connector is publicly known under
+        *            this ID.
+        * @param name translatable name to display the connector in the UI.
+        */
+       public TerminalConnector(TerminalConnector.Factory terminalConnectorFactory, String id, String name, boolean hidden) {
+               fTerminalConnectorFactory = terminalConnectorFactory;
+               fId = id;
+               fName = name;
+               fHidden = hidden;
+       }
+       public String getInitializationErrorMessage() {
+               getConnectorImpl();
+               if(fException!=null)
+                       return fException.getLocalizedMessage();
+               return null;
+       }
+       public String getId() {
+               return fId;
+       }
+       public String getName() {
+               return fName;
+       }
+       public boolean isHidden() {
+               return fHidden;
+       }
+       private TerminalConnectorImpl getConnectorImpl() {
+               if(!isInitialized()) {
+                       try {
+                               fConnector=fTerminalConnectorFactory.makeConnector();
+                               fConnector.initialize();
+                       } catch (Exception e) {
+                               fException=e;
+                               fConnector=new TerminalConnectorImpl(){
+                                       public void connect(ITerminalControl control) {
+                                               // super.connect(control);
+                                               control.setState(TerminalState.CLOSED);
+                                               control.setMsg(getInitializationErrorMessage());
+                                       }
+                                       public OutputStream getTerminalToRemoteStream() {
+                                               return null;
+                                       }
+                                       public String getSettingsSummary() {
+                                               return null;
+                                       }};
+                               // that's the place where we log the exception
+                               Logger.logException(e);
+                       }
+                       if(fConnector!=null && fStore!=null)
+                               fConnector.load(fStore);
+               }
+               return fConnector;
+       }
+
+       public boolean isInitialized() {
+               return fConnector!=null || fException!=null;
+       }
+       public void connect(ITerminalControl control) {
+               getConnectorImpl().connect(control);
+       }
+       public void disconnect() {
+               getConnectorImpl().disconnect();
+       }
+       public OutputStream getTerminalToRemoteStream() {
+               return getConnectorImpl().getTerminalToRemoteStream();
+       }
+       public String getSettingsSummary() {
+               if(fConnector!=null)
+                       return getConnectorImpl().getSettingsSummary();
+               else
+                       return TerminalMessages.NotInitialized;
+       }
+       public boolean isLocalEcho() {
+               return getConnectorImpl().isLocalEcho();
+       }
+       public void load(ISettingsStore store) {
+               if(fConnector==null) {
+                       fStore=store;
+               } else {
+                       getConnectorImpl().load(store);
+               }
+       }
+       @Override
+       public void setDefaultSettings() {
+               getConnectorImpl().setDefaultSettings();
+       }
+       public void save(ISettingsStore store) {
+               // no need to save the settings: it cannot have changed
+               // because we are not initialized....
+               if(fConnector!=null)
+                       getConnectorImpl().save(store);
+       }
+       public void setTerminalSize(int newWidth, int newHeight) {
+               // we assume that setTerminalSize is called also after
+               // the terminal has been initialized. Else we would have to cache
+               // the values....
+               if(fConnector!=null) {
+                       fConnector.setTerminalSize(newWidth, newHeight);
+               }
+       }
+       public Object getAdapter(Class adapter) {
+               TerminalConnectorImpl connector=null;
+               if(isInitialized())
+                       connector=getConnectorImpl();
+               // if we cannot create the connector then we cannot adapt...
+               if(connector!=null) {
+                       // maybe the connector is adaptable
+                       if(connector instanceof IAdaptable) {
+                               Object result =((IAdaptable)connector).getAdapter(adapter);
+                               // Not sure if the next block is needed....
+                               if(result==null)
+                                       //defer to the platform
+                                       result= Platform.getAdapterManager().getAdapter(connector, adapter);
+                               if(result!=null)
+                                       return result;
+                       }
+                       // maybe the real adapter is what we need....
+                       if(adapter.isInstance(connector))
+                               return connector;
+               }
+               // maybe we have to be adapted....
+               return Platform.getAdapterManager().getAdapter(this, adapter);
+       }
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/connector/TerminalToRemoteInjectionOutputStream.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/connector/TerminalToRemoteInjectionOutputStream.java
new file mode 100644 (file)
index 0000000..e73568d
--- /dev/null
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.connector;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+class TerminalToRemoteInjectionOutputStream extends FilterOutputStream {
+       /**
+        * This class handles bytes written to the {@link TerminalToRemoteInjectionOutputStream}.
+        */
+       static abstract public class Interceptor {
+               protected OutputStream fOriginal;
+               /**
+                * @param original the injection into the original stream begins
+                * @throws IOException
+                */
+               public void begin(OutputStream original) throws IOException {
+                       fOriginal=original;
+               }
+               /**
+                * @param b a byte was written to the {@link TerminalToRemoteInjectionOutputStream}.
+                * @throws IOException
+                */
+               public void write(int b) throws IOException {
+               }
+               /**
+                * @param b bytes written to the {@link TerminalToRemoteInjectionOutputStream}.
+                * @param off   the start offset in the data.
+                * @param len   the number of bytes to write.
+                * @throws IOException
+                */
+               public void write(byte[] b, int off, int len) throws IOException {
+               }
+               /**
+                * The injection into the normal stream ends.
+                * @throws IOException
+                */
+               public void close() throws IOException {
+               }
+               public void flush() {
+               }
+       }
+       static public class BufferInterceptor extends Interceptor {
+               private final ByteArrayOutputStream fBuffer=new ByteArrayOutputStream();
+           public void close() throws IOException {
+               fOriginal.write(fBuffer.toByteArray());
+               }
+               public void write(byte[] b, int off, int len) throws IOException {
+                       fBuffer.write(b, off, len);
+               }
+               public void write(int b) throws IOException {
+                       fBuffer.write(b);
+               }
+       }
+       private class TerminalFilterOutputStream extends OutputStream {
+               final private Object fLock=TerminalToRemoteInjectionOutputStream.this;
+               public void close() throws IOException {
+                       synchronized(fLock) {
+                               if(fInjection==this) {
+                                       flush();
+                                       ungrabOutput();
+                               }
+                       }
+               }
+               public void write(byte[] b, int off, int len) throws IOException {
+                       synchronized(fLock) {
+                               checkStream();
+                               out.write(b, off, len);
+                       }
+               }
+               public void write(byte[] b) throws IOException {
+                       synchronized(fLock) {
+                               checkStream();
+                               out.write(b);
+                       }
+               }
+               public void flush() throws IOException {
+                       synchronized(fLock) {
+                               checkStream();
+                               out.flush();
+                       }
+               }
+               public void write(int b) throws IOException {
+                       synchronized(fLock) {
+                               checkStream();
+                               out.write(b);
+                       }
+               }
+               private void checkStream() throws IOException {
+                       if(fInjection!=this)
+                               throw new IOException("Stream is closed"); //$NON-NLS-1$
+               }
+       }
+    private Interceptor fInterceptor;
+    private TerminalFilterOutputStream fInjection;
+       public TerminalToRemoteInjectionOutputStream(OutputStream out) {
+               super(out);
+       }
+       synchronized protected void ungrabOutput() throws IOException {
+               if(fInterceptor!=null) {
+                       fInterceptor.close();
+                       fInterceptor=null;
+                       fInjection=null;
+               }
+       }
+    /**
+     * There can only be one injection stream active at a time. You must call close on the
+     * returned output stream to end the injection.
+     * @param interceptor This is used handle bytes sent while the injection stream is active.
+     * @return a output stream that can be used to write to the decorated stream.
+     * @throws IOException
+     */
+    public synchronized OutputStream grabOutput(Interceptor interceptor) throws IOException {
+       if(fInjection!=null) {
+               throw new IOException("Buffer in use"); //$NON-NLS-1$
+       }
+       fInterceptor=interceptor;
+       fInterceptor.begin(out);
+       fInjection=new TerminalFilterOutputStream();
+               return fInjection;
+    }
+    /** See {@link #grabOutput(TerminalToRemoteInjectionOutputStream.Interceptor)}.
+     * @return injection output stream
+     * @throws IOException
+     */
+    public synchronized OutputStream grabOutput() throws IOException {
+               return grabOutput(new BufferInterceptor());
+    }
+    synchronized public void close() throws IOException {
+       if(fInjection!=null) {
+               fInjection.close();
+       }
+               super.close();
+       }
+       synchronized public void flush() throws IOException {
+       if(fInterceptor!=null)
+               fInterceptor.flush();
+               out.flush();
+       }
+    synchronized public void write(byte[] b, int off, int len) throws IOException {
+       if(fInterceptor!=null)
+               fInterceptor.write(b, off, len);
+       else
+               out.write(b, off, len);
+       }
+       synchronized public void write(int b) throws IOException {
+       if(fInterceptor!=null)
+               fInterceptor.write(b);
+       else
+               out.write(b);
+    }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/CommandInputFieldWithHistory.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/CommandInputFieldWithHistory.java
new file mode 100644 (file)
index 0000000..ffcdc4a
--- /dev/null
@@ -0,0 +1,322 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial implementation
+ * Michael Scharf (Wing River) - [211659] Add field assist to terminal input field
+ * Michael Scharf (Wing River) - [196447] The optional terminal input line should be resizeable
+ * Martin Oberhuber (Wind River) - [168197] Fix Terminal for CDC-1.1/Foundation-1.1
+ * Michael Scharf (Wing River) - [236458] Fix 168197 lost the last entry
+ * Anton Leherbauer (Wind River) - [220971] The optional terminal input line has redraw problems when resizing
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.jface.fieldassist.IContentProposal;
+import org.eclipse.jface.fieldassist.IContentProposalProvider;
+import org.eclipse.jface.fieldassist.TextContentAdapter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Sash;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.fieldassist.ContentAssistCommandAdapter;
+
+
+
+/**
+ * Manages the Command History for the command line input
+ * of the terminal control.
+ * <li>
+ * <ul>Navigate with ARROW_UP,ARROW_DOWN,PAGE_UP,PAGE_DOWN
+ * <ul>ESC to cancel history editing
+ * <ul>History can be edited (by moving up and edit) but changes are
+ * not persistent (like in bash).
+ * <ul>If the same command is entered multiple times in a row,
+ * only one entry is kept in the history.
+ * </li>
+ *
+ */
+public class CommandInputFieldWithHistory implements ICommandInputField {
+       private class FieldAssist implements IContentProposalProvider {
+
+               public IContentProposal[] getProposals(String contents, int position) {
+                       String prefix=contents.substring(0, position);
+                       List<Proposal> result=new ArrayList<Proposal>();
+                       // show an entry only once
+                       Set<String> seen=new HashSet<String>();
+                       for (Iterator<String> iterator = fHistory.iterator(); iterator.hasNext();) {
+                               String history = iterator.next();
+                               if(history.startsWith(prefix) && !seen.contains(history)) {
+                                       // the content is the rest of the history item
+                                       String content=history.substring(prefix.length());
+                                       result.add(new Proposal(content,history));
+                                       // don't add this proposal again
+                                       seen.add(history);
+                               }
+                       }
+                       return result.toArray(new IContentProposal[result.size()]);
+               }
+
+       }
+       private static class Proposal implements IContentProposal {
+
+               private final String fContent;
+               private final String fLabel;
+               Proposal(String content, String label) {
+                       fContent= content;
+                       fLabel= label;
+               }
+               public String getContent() {
+                       return fContent;
+               }
+
+               public String getLabel() {
+                       return fLabel;
+               }
+
+               public String getDescription() {
+                       return null;
+               }
+
+               public int getCursorPosition() {
+                       return fContent.length();
+               }
+       }
+
+       final List<String> fHistory=new ArrayList<String>();
+       /**
+        * Keeps a modifiable history while in history editing mode
+        */
+       List<Object> fEditedHistory;
+       /**
+        * The current position in the edit history
+        */
+       private int fEditHistoryPos=0;
+       /**
+        * The limit of the history.
+        */
+       private final int fMaxSize;
+       /**
+        * The input text field.
+        */
+       private Text fInputField;
+       private Sash fSash;
+       private Composite fPanel;
+       public CommandInputFieldWithHistory(int maxHistorySize) {
+               fMaxSize=maxHistorySize;
+       }
+       /**
+        * Add a line to the history.
+        * @param line The line to be added to the history.
+        */
+       protected void pushLine(String line) {
+               endHistoryMode();
+               // anything to remember?
+               if(line==null || line.trim().length()==0)
+                       return;
+               fHistory.add(0,line);
+               // ignore if the same as last
+               if(fHistory.size()>1 && line.equals(fHistory.get(1)))
+                       fHistory.remove(0);
+               // limit the history size.
+               if(fHistory.size()>=fMaxSize)
+                       fHistory.remove(fHistory.size()-1);
+       }
+       /**
+        * Sets the history
+        * @param history or null
+        */
+       public void setHistory(String history) {
+               endHistoryMode();
+               fHistory.clear();
+               if(history==null)
+                       return;
+               // add history entries separated by '\n'
+               // fHistory.addAll(Arrays.asList(history.split("\n"))); //$NON-NLS-1$
+               //<J2ME CDC-1.1 Foundation-1.1 variant>
+               StringTokenizer tok=new StringTokenizer(history,"\n"); //$NON-NLS-1$
+               while(tok.hasMoreElements())
+                       fHistory.add((String) tok.nextElement());
+               //</J2ME CDC-1.1 Foundation-1.1 variant>
+       }
+       /**
+        * @return the current content of the history buffer and new line separated list
+        */
+       public String getHistory() {
+               StringBuffer buff=new StringBuffer();
+               boolean sep=false;
+               for (Iterator<String> iterator = fHistory.iterator(); iterator.hasNext();) {
+                       String line=iterator.next();
+                       if(line.length()>0) {
+                               if(sep)
+                                       buff.append("\n"); //$NON-NLS-1$
+                               else
+                                       sep=true;
+                               buff.append(line);
+                       }
+               }
+               return buff.toString();
+       }
+       /**
+        * @param currLine Line of text to be moved in history
+        * @param count (+1 or -1) for forward and backward movement. -1 goes back
+        * @return the new string to be displayed in the command line or null,
+        * if the limit is reached.
+        */
+       public String move(String currLine, int count) {
+               if(!inHistoryMode()) {
+                       fEditedHistory=new ArrayList<Object>(fHistory.size()+1);
+                       fEditedHistory.add(currLine);
+                       fEditedHistory.addAll(fHistory);
+                       fEditHistoryPos=0;
+               }
+               fEditedHistory.set(fEditHistoryPos,currLine);
+               if(fEditHistoryPos+count>=fEditedHistory.size())
+                       return null;
+               if(fEditHistoryPos+count<0)
+                       return null;
+               fEditHistoryPos+=count;
+               return (String) fEditedHistory.get(fEditHistoryPos);
+       }
+       private boolean inHistoryMode() {
+               return fEditedHistory!=null;
+       }
+
+       /**
+        * Exit the history movements and go to position 0;
+        * @return the string to be shown in the command line
+        */
+       protected String escape() {
+               if(!inHistoryMode())
+                       return null;
+               String line= (String) fEditedHistory.get(0);
+               endHistoryMode();
+               return line;
+       }
+       /**
+        * End history editing
+        */
+       private void endHistoryMode() {
+               fEditedHistory=null;
+               fEditHistoryPos=0;
+       }
+       public void createControl(final Composite parent,final ITerminalViewControl terminal) {
+//             fSash = new Sash(parent,SWT.HORIZONTAL|SWT.SMOOTH);
+               fSash = new Sash(parent,SWT.HORIZONTAL);
+               final GridData gd_sash = new GridData(SWT.FILL, SWT.CENTER, true, false);
+               gd_sash.heightHint=5;
+               fSash.setLayoutData(gd_sash);
+               fSash.addListener (SWT.Selection, new Listener () {
+                       public void handleEvent (Event e) {
+                               if (e.detail == SWT.DRAG) {
+                                       // don't redraw during drag, it causes paint errors - bug 220971
+                                       return;
+                               }
+                               // no idea why this is needed
+                               GridData gdata = (GridData) fInputField.getLayoutData();
+                               Rectangle sashRect = fSash.getBounds ();
+                               Rectangle containerRect = parent.getClientArea ();
+
+                               int h=fInputField.getLineHeight();
+                               // make sure the input filed height is a multiple of the line height
+                               gdata.heightHint = Math.max(((containerRect.height-e.y-sashRect.height)/h)*h,h);
+                               // do not show less then one line
+                               e.y=Math.min(e.y,containerRect.height-h);
+                               fInputField.setLayoutData(gdata);
+                               parent.layout();
+                               // else the content assist icon will be replicated
+                               parent.redraw();
+                       }
+               });
+               fPanel = new Composite(parent, SWT.NONE);
+               GridLayout layout = new GridLayout();
+               layout.marginWidth = 0; layout.marginHeight = 0; layout.marginTop = 0; layout.marginBottom = 2;
+               fPanel.setLayout(layout);
+               fPanel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+               fInputField=new Text(fPanel, SWT.MULTI|SWT.BORDER|SWT.WRAP|SWT.V_SCROLL);
+               GridData data=new GridData(SWT.FILL, SWT.FILL, true, false);
+               boolean installDecoration=true;
+               if(installDecoration) {
+                       // The ContentAssistCommandAdapter says: "The client is responsible for
+                       // ensuring that adequate space is reserved for the decoration."
+                       // TODO: what is the "adequate space"???
+                       data.horizontalIndent=6;
+               }
+               fInputField.setLayoutData(data);
+               fInputField.setFont(terminal.getFont());
+               // Register field assist *before* the key listener.
+               // Else the ENTER key is sent *first* to the input field
+               // and then to the field assist popup.
+               // (https://bugs.eclipse.org/bugs/show_bug.cgi?id=211659)
+               new ContentAssistCommandAdapter(
+                               fInputField,
+                               new TextContentAdapter(),
+                               new FieldAssist(),
+                               null,
+                               null,
+                               installDecoration);
+               fInputField.addKeyListener(new KeyListener(){
+                       public void keyPressed(KeyEvent e) {
+                               // if the field assist has handled the key already then
+                               // ignore it (https://bugs.eclipse.org/bugs/show_bug.cgi?id=211659)
+                               if(!e.doit)
+                                       return;
+                               if(e.character==SWT.CR || e.character==SWT.LF) {
+                                       e.doit=false;
+                                       String line=fInputField.getText();
+                                       if(!terminal.pasteString(line+'\r'))
+                                               return;
+                                       pushLine(line);
+                                       setCommand("");//$NON-NLS-1$
+                               } else if(e.keyCode==SWT.ARROW_UP || e.keyCode==SWT.PAGE_UP) {
+                                       e.doit=false;
+                                       setCommand(move(fInputField.getText(),1));
+                               } else if(e.keyCode==SWT.ARROW_DOWN || e.keyCode==SWT.PAGE_DOWN) {
+                                       e.doit=false;
+                                       setCommand(move(fInputField.getText(),-1));
+                               } else if(e.keyCode==SWT.ESC) {
+                                       e.doit=false;
+                                       setCommand(escape());
+                               }
+                       }
+                       private void setCommand(String line) {
+                               if(line==null)
+                                       return;
+                               fInputField.setText(line);
+                               fInputField.setSelection(fInputField.getCharCount());
+                       }
+                       public void keyReleased(KeyEvent e) {
+                       }
+               });
+       }
+       public void setFont(Font font) {
+               fInputField.setFont(font);
+               fInputField.getParent().layout(true);
+       }
+       public void dispose() {
+               fSash.dispose();
+               fSash=null;
+               fPanel.dispose();
+               fPanel=null;
+               fInputField.dispose();
+               fInputField=null;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ICommandInputField.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ICommandInputField.java
new file mode 100644 (file)
index 0000000..a65a61c
--- /dev/null
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control;
+
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Interface to create a command input control.
+ *
+ */
+public interface ICommandInputField {
+       /**
+        * @param parent
+        * @param terminal
+        */
+       void createControl(Composite parent, ITerminalViewControl terminal);
+       
+       void dispose();
+       /**
+        * Sets the font of a control created with {@link #createControl(Composite, ITerminalViewControl)}
+        * @param control
+        * @param font the new text font
+        */
+       void setFont(Font font);
+
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalListener.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalListener.java
new file mode 100644 (file)
index 0000000..587abfd
--- /dev/null
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control;
+
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+
+/**
+ * Provided by a view implementation.
+ * @author Michael Scharf
+ *
+ */
+public interface ITerminalListener {
+       /**
+        * Called when the state of the connection has changed.
+        * @param state
+        */
+       void setState(TerminalState state);
+
+       /**
+        * Set the title of the terminal.
+        * @param title
+        */
+       void setTerminalTitle(String title);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalListener2.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalListener2.java
new file mode 100644 (file)
index 0000000..76bc56d
--- /dev/null
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control;
+
+/**
+ * Terminal listener allowing to listen to terminal selection changes.
+ * 
+ * @since 4.1
+ */
+public interface ITerminalListener2 extends ITerminalListener {
+
+       /**
+        * selection has been changed internally e.g. select all
+        * clients might want to react on that
+        * NOTE: this does not include mouse selections
+        * those are handled in separate MouseListeners
+        * TODO should be unified
+        */
+       void setTerminalSelectionChanged();
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalMouseListener.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalMouseListener.java
new file mode 100644 (file)
index 0000000..d72c26c
--- /dev/null
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2015 CWI. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Davy Landman (CWI) - [475267][api] Initial definition of interface
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control;
+
+import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
+
+/**
+ * Terminal specific version of {@link org.eclipse.swt.events.MouseListener}
+ * @since 4.1
+ */
+public interface ITerminalMouseListener  {
+       /**
+        * Invoked when a double-click has happend inside the terminal control.<br>
+        * <br>
+        * <strong>Important:</strong> the event fires for every click, even outside the text region.
+        * @param terminalText a read-only view of the current terminal text
+        * @param button see {@link org.eclipse.swt.events.MouseEvent#button} for the meaning of the button values
+        */
+       void mouseDoubleClick(ITerminalTextDataReadOnly terminalText, int line, int column, int button);
+       /**
+        * Invoked when a mouse button is pushed down inside the terminal control.<br>
+        * <br>
+        * <strong>Important:</strong> the event fires for every mouse down, even outside the text region.
+        * @param terminalText a read-only view of the current terminal text
+        * @param button see {@link org.eclipse.swt.events.MouseEvent#button} for the meaning of the button values
+        */
+       void mouseDown(ITerminalTextDataReadOnly terminalText, int line, int column, int button);
+       /**
+        * Invoked when a mouse button is released inside the terminal control.<br>
+        * <br>
+        * <strong>Important:</strong> the event fires for every mouse up, even outside the text region.
+        * @param terminalText a read-only view of the current terminal text
+        * @param button see {@link org.eclipse.swt.events.MouseEvent#button} for the meaning of the button values
+        */
+       void mouseUp(ITerminalTextDataReadOnly terminalText, int line, int column, int button);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java
new file mode 100644 (file)
index 0000000..904897c
--- /dev/null
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [204796] Terminal should allow setting the encoding to use
+ * Martin Oberhuber (Wind River) - [265352][api] Allow setting fonts programmatically
+ * Davy Landman (CWI) - [475267][api] Allow custom mouse listeners
+ ******************************************************************************/
+package org.eclipse.tm.internal.terminal.control;
+
+import java.io.UnsupportedEncodingException;
+
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+
+/**
+ * @author Michael Scharf
+ *
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface ITerminalViewControl {
+       /**
+        * Set the encoding that the Terminal uses to decode byte streams into
+        * characters.
+        *
+        * @see ITerminalControl#setEncoding(String)
+        * @since org.eclipse.tm.terminal 2.0
+        */
+       void setEncoding(String encoding) throws UnsupportedEncodingException;
+
+       /**
+        * Get the Terminal's current encoding.
+        *
+        * @return the current Encoding of the Terminal.
+        * @see ITerminalControl#getEncoding()
+        * @since org.eclipse.tm.terminal 2.0
+        */
+       String getEncoding();
+
+    boolean isEmpty();
+    /**
+     * Sets the Terminal font
+     * @deprecated use {@link #setFont(String)} in order to support bold and italic variants of the given font
+     * @param font
+     */
+       void setFont(Font font);
+       /**
+        * Sets the font for the Terminal, using a JFace symbolic font name, such
+        * that bold and italic variants can be leveraged.
+        * @since 3.2
+        * @param fontName
+        */
+       void setFont(String fontName);
+       void setInvertedColors(boolean invert);
+       Font getFont();
+       /**
+        * @return the text control
+        */
+       Control getControl();
+       /**
+        * @return the root of all controls
+        */
+       Control getRootControl();
+    boolean isDisposed();
+    void selectAll();
+    void clearTerminal();
+    void copy();
+    void paste();
+    String getSelection();
+    TerminalState getState();
+    Clipboard getClipboard();
+    void disconnectTerminal();
+    void disposeTerminal();
+    String getSettingsSummary();
+    ITerminalConnector[] getConnectors();
+    void setFocus();
+    ITerminalConnector getTerminalConnector();
+    void setConnector(ITerminalConnector connector);
+    void connectTerminal();
+    /**
+     * @param write a single character to terminal
+     */
+    void sendKey(char arg0);
+       /**
+        * @param string write string to terminal
+        */
+       public boolean pasteString(String string);
+
+    boolean isConnected();
+
+    /**
+     * @param inputField null means no input field is shown
+     */
+    void setCommandInputField(ICommandInputField inputField);
+    /**
+     * @return null or the current input field
+     */
+    ICommandInputField getCommandInputField();
+
+       /**
+        * @return the maximum number of lines to display
+        * in the terminal view. -1 means unlimited.
+        */
+       public int getBufferLineLimit();
+
+       /**
+        * @param bufferLineLimit the maximum number of lines to show
+        * in the terminal view. -1 means unlimited.
+        */
+       public void setBufferLineLimit(int bufferLineLimit);
+       boolean isScrollLock();
+       void setScrollLock(boolean on);
+       
+       /**
+        * @since 4.1
+        */
+       void addMouseListener(ITerminalMouseListener listener);
+       /**
+        * @since 4.1
+        */
+       void removeMouseListener(ITerminalMouseListener listener);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/TerminalViewControlFactory.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/TerminalViewControlFactory.java
new file mode 100644 (file)
index 0000000..9ccbdaa
--- /dev/null
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tm.internal.terminal.emulator.VT100TerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+
+public class TerminalViewControlFactory {
+       /**
+        * Instantiate a Terminal widget.
+        * @param target Callback for notifying the owner of Terminal state changes.
+        * @param wndParent The Window parent to embed the Terminal in.
+        * @param connectors Provided connectors.
+        */
+       public static ITerminalViewControl makeControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors) {
+               return makeControl(target, wndParent, connectors, false);
+       }
+
+       /**
+        * Instantiate a Terminal widget.
+        * @param target Callback for notifying the owner of Terminal state changes.
+        * @param wndParent The Window parent to embed the Terminal in.
+        * @param connectors Provided connectors.
+        * @param useCommonPrefs If <code>true</code>, the Terminal widget will pick up settings 
+        *    from the <code>org.eclipse.tm.terminal.TerminalPreferencePage</code> Preference page.
+        *    Otherwise, clients need to maintain settings themselves.
+        * @since 3.2
+        */
+       public static ITerminalViewControl makeControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors, boolean useCommonPrefs) {
+               return new VT100TerminalControl(target, wndParent, connectors, useCommonPrefs);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/AbstractTerminalAction.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/AbstractTerminalAction.java
new file mode 100644 (file)
index 0000000..08561b8
--- /dev/null
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Anna Dushistova (MontaVista) - Adapted from TerminalAction
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
+
+public abstract class AbstractTerminalAction extends Action {
+       private final ITerminalViewControl fTarget;
+
+       public AbstractTerminalAction(String strId) {
+               this(null, strId, 0);
+       }
+
+       public AbstractTerminalAction(ITerminalViewControl target,
+                       String strId) {
+               this(target, strId, 0);
+       }
+
+       public AbstractTerminalAction(ITerminalViewControl target,
+                       String strId, int style) {
+               super("", style); //$NON-NLS-1$
+
+               fTarget = target;
+
+               setId(strId);
+       }
+
+       abstract public void run();
+
+       protected void setupAction(String strText, String strToolTip,
+                       String strImage, String strEnabledImage, String strDisabledImage,
+                       boolean bEnabled) {
+               setupAction(strText, strToolTip, strImage, strEnabledImage,
+                               strDisabledImage, bEnabled, TerminalPlugin.getDefault()
+                                               .getImageRegistry());
+       }
+
+       protected void setupAction(String strText, String strToolTip,
+                       String strHoverImage, String strEnabledImage,
+                       String strDisabledImage, boolean bEnabled,
+                       ImageRegistry imageRegistry) {
+               setupAction(strText, strToolTip, imageRegistry
+                               .getDescriptor(strHoverImage), imageRegistry
+                               .getDescriptor(strEnabledImage), imageRegistry
+                               .getDescriptor(strDisabledImage), bEnabled);
+       }
+
+       protected void setupAction(String strText, String strToolTip,
+                       ImageDescriptor hoverImage, ImageDescriptor enabledImage,
+                       ImageDescriptor disabledImage, boolean bEnabled) {
+               setText(strText);
+               setToolTipText(strToolTip);
+               setEnabled(bEnabled);
+               if (enabledImage != null) {
+                       setImageDescriptor(enabledImage);
+               }
+               if (disabledImage != null) {
+                       setDisabledImageDescriptor(disabledImage);
+               }
+               if (hoverImage != null) {
+                       setHoverImageDescriptor(hoverImage);
+               }
+       }
+
+       /**
+        * Return the terminal instance on which the action should operate.
+        * 
+        * @return the terminal instance on which the action should operate.
+        */
+       protected ITerminalViewControl getTarget() {
+               return fTarget;
+       }
+
+       /**
+        * Subclasses can update their action
+        *
+        * @param aboutToShow true before the menu is shown -- false when the menu
+        *            gets hidden
+        */
+       public void updateAction(boolean aboutToShow) {
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/ActionMessages.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/ActionMessages.java
new file mode 100644 (file)
index 0000000..ddcc65b
--- /dev/null
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control.actions;
+
+import org.eclipse.osgi.util.NLS;
+
+public class ActionMessages extends NLS {
+       static {
+               NLS.initializeMessages(ActionMessages.class.getName(),
+                               ActionMessages.class);
+       }
+
+       public static String COPY;
+       public static String CUT;
+       public static String PASTE;
+       public static String SELECTALL;
+       public static String CLEARALL;
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/ActionMessages.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/ActionMessages.properties
new file mode 100644 (file)
index 0000000..558ab80
--- /dev/null
@@ -0,0 +1,25 @@
+###############################################################################
+# Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Initial Contributors:
+# The following Wind River employees contributed to the Terminal component
+# that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+# Helmut Haigermoser and Ted Williams.
+#
+# Contributors:
+# Michael Scharf (Wind River) - split into core, view and connector plugins 
+# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+# Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
+###############################################################################
+
+# NLS_MESSAGEFORMAT_NONE
+
+COPY                      = Copy
+CUT                       = Cut
+PASTE                     = Paste
+SELECTALL                 = Select All
+CLEARALL                  = Clear Terminal
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/ImageConsts.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/ImageConsts.java
new file mode 100644 (file)
index 0000000..eda9eff
--- /dev/null
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - extracted from TerminalConsts
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control.actions;
+
+public interface ImageConsts {
+       public final static String IMAGE_DIR_ROOT = "icons/"; //$NON-NLS-1$
+       public final static String IMAGE_DIR_LOCALTOOL = IMAGE_DIR_ROOT + "clcl16/"; // basic colors - size 16x16 //$NON-NLS-1$
+       public final static String IMAGE_DIR_DLCL = IMAGE_DIR_ROOT + "dlcl16/"; // disabled - size 16x16 //$NON-NLS-1$
+       public final static String IMAGE_DIR_ELCL = IMAGE_DIR_ROOT+ "elcl16/"; // enabled - size 16x16 //$NON-NLS-1$
+
+       public static final String IMAGE_CLCL_CLEAR_ALL = "ImageClclClearAll"; //$NON-NLS-1$
+
+       public static final String IMAGE_DLCL_CLEAR_ALL = "ImageDlclClearAll"; //$NON-NLS-1$
+
+       public static final String IMAGE_ELCL_CLEAR_ALL = "ImageElclClearAll"; //$NON-NLS-1$
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionClearAll.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionClearAll.java
new file mode 100644 (file)
index 0000000..85650f6
--- /dev/null
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
+ * Uwe Stieber (Wind River) - [260372] [terminal] Certain terminal actions are enabled if no target terminal control is available
+ ********************************************************************************/
+package org.eclipse.tm.internal.terminal.control.actions;
+
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+
+public class TerminalActionClearAll extends AbstractTerminalAction {
+       public TerminalActionClearAll() {
+               super(TerminalActionClearAll.class.getName());
+
+               setupAction(ActionMessages.CLEARALL, ActionMessages.CLEARALL,
+                               ImageConsts.IMAGE_CLCL_CLEAR_ALL,
+                               ImageConsts.IMAGE_ELCL_CLEAR_ALL,
+                               ImageConsts.IMAGE_DLCL_CLEAR_ALL, false);
+       }
+
+       public TerminalActionClearAll(ITerminalViewControl target) {
+               super(target, TerminalActionClearAll.class.getName());
+
+               setupAction(ActionMessages.CLEARALL, ActionMessages.CLEARALL,
+                               ImageConsts.IMAGE_CLCL_CLEAR_ALL,
+                               ImageConsts.IMAGE_ELCL_CLEAR_ALL,
+                               ImageConsts.IMAGE_DLCL_CLEAR_ALL, false);
+       }
+
+       public void run() {
+               ITerminalViewControl target = getTarget();
+               if (target != null) {
+                       target.clearTerminal();
+               }
+       }
+
+       public void updateAction(boolean aboutToShow) {
+               ITerminalViewControl target = getTarget();
+               setEnabled(target != null && !target.isEmpty());
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionCopy.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionCopy.java
new file mode 100644 (file)
index 0000000..49260c1
--- /dev/null
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
+ * Uwe Stieber (Wind River) - [260372] [terminal] Certain terminal actions are enabled if no target terminal control is available
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control.actions;
+
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+public class TerminalActionCopy extends AbstractTerminalAction {
+       public TerminalActionCopy() {
+               super(TerminalActionCopy.class.getName());
+               setActionDefinitionId("org.eclipse.tm.terminal.copy"); //$NON-NLS-1$
+               ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
+               setupAction(ActionMessages.COPY, ActionMessages.COPY, si
+                               .getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si
+                               .getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si
+                               .getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED), true);
+       }
+
+       public TerminalActionCopy(ITerminalViewControl target) {
+               super(target, TerminalActionCopy.class.getName());
+               setActionDefinitionId("org.eclipse.tm.terminal.copy"); //$NON-NLS-1$
+               ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
+               setupAction(ActionMessages.COPY, ActionMessages.COPY, si
+                               .getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si
+                               .getImageDescriptor(ISharedImages.IMG_TOOL_COPY), si
+                               .getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED), true);
+       }
+
+       public void run() {
+               ITerminalViewControl target = getTarget();
+               if (target != null) {
+                       String selection = target.getSelection();
+
+                       if (!selection.equals("")) {//$NON-NLS-1$
+                               target.copy();
+                       } else {
+                               target.sendKey('\u0003');
+                       }
+               }
+       }
+
+       public void updateAction(boolean aboutToShow) {
+               ITerminalViewControl target = getTarget();
+               boolean bEnabled = target != null;
+               if (aboutToShow && bEnabled) {
+                       bEnabled = target.getSelection().length() > 0;
+               }
+               setEnabled(bEnabled);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionCut.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionCut.java
new file mode 100644 (file)
index 0000000..63532bd
--- /dev/null
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Uwe Stieber (Wind River) - [260372] [terminal] Certain terminal actions are enabled if no target terminal control is available
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control.actions;
+
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+public class TerminalActionCut extends AbstractTerminalAction {
+       public TerminalActionCut() {
+               super(TerminalActionCut.class.getName());
+               ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
+               setupAction(ActionMessages.CUT, ActionMessages.CUT, si
+                               .getImageDescriptor(ISharedImages.IMG_TOOL_CUT), si
+                               .getImageDescriptor(ISharedImages.IMG_TOOL_CUT), si
+                               .getImageDescriptor(ISharedImages.IMG_TOOL_CUT_DISABLED), true);
+       }
+
+       public TerminalActionCut(ITerminalViewControl target) {
+               super(target, TerminalActionCut.class.getName());
+               ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
+               setupAction(ActionMessages.CUT, ActionMessages.CUT, si
+                               .getImageDescriptor(ISharedImages.IMG_TOOL_CUT), si
+                               .getImageDescriptor(ISharedImages.IMG_TOOL_CUT), si
+                               .getImageDescriptor(ISharedImages.IMG_TOOL_CUT_DISABLED), true);
+       }
+
+       public void run() {
+               ITerminalViewControl target = getTarget();
+               if (target != null) {
+                       target.sendKey('\u0018');
+               }
+       }
+
+       public void updateAction(boolean aboutToShow) {
+               // Cut is always disabled
+               setEnabled(false);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionPaste.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionPaste.java
new file mode 100644 (file)
index 0000000..ca1011c
--- /dev/null
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
+ * Uwe Stieber (Wind River) - [260372] [terminal] Certain terminal actions are enabled if no target terminal control is available
+ * Uwe Stieber (Wind River) - [294719] [terminal] SWT Widget disposed in TerminalActionPaste
+ * Martin Oberhuber (Wind River) - [296212] Cannot paste text into terminal on some Linux hosts
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control.actions;
+
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+public class TerminalActionPaste extends AbstractTerminalAction {
+       public TerminalActionPaste() {
+               super(TerminalActionPaste.class.getName());
+               setActionDefinitionId("org.eclipse.tm.terminal.paste"); //$NON-NLS-1$
+               ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
+               setupAction(ActionMessages.PASTE, ActionMessages.PASTE,
+                                       si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE),
+                                       si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE),
+                                       si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED),
+                                       false);
+       }
+
+       public TerminalActionPaste(ITerminalViewControl target) {
+               super(target, TerminalActionPaste.class.getName());
+               setActionDefinitionId("org.eclipse.tm.terminal.paste"); //$NON-NLS-1$
+               ISharedImages si = PlatformUI.getWorkbench().getSharedImages();
+               setupAction(ActionMessages.PASTE, ActionMessages.PASTE,
+                                       si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE),
+                                       si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE),
+                                       si.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED),
+                                       false);
+       }
+
+       public void run() {
+               ITerminalViewControl target = getTarget();
+               if (target != null) {
+                       target.paste();
+               }
+       }
+
+       public void updateAction(boolean aboutToShow) {
+               ITerminalViewControl target = getTarget();
+               boolean bEnabled = target != null && target.getClipboard() != null && !target.getClipboard().isDisposed();
+               if (bEnabled) {
+                       String strText = (String) target.getClipboard().getContents(
+                                       TextTransfer.getInstance());
+                       bEnabled = ((strText != null) && (!strText.equals("")) && (target.getState() == TerminalState.CONNECTED));//$NON-NLS-1$
+               }
+               setEnabled(bEnabled);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionSelectAll.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/actions/TerminalActionSelectAll.java
new file mode 100644 (file)
index 0000000..a91ec1c
--- /dev/null
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
+ * Uwe Stieber (Wind River) - [260372] [terminal] Certain terminal actions are enabled if no target terminal control is available
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control.actions;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+
+public class TerminalActionSelectAll extends AbstractTerminalAction {
+       public TerminalActionSelectAll() {
+               super(TerminalActionSelectAll.class.getName());
+
+               setupAction(ActionMessages.SELECTALL, ActionMessages.SELECTALL,
+                               (ImageDescriptor) null, null, null, false);
+       }
+
+       public TerminalActionSelectAll(ITerminalViewControl target) {
+               super(target, TerminalActionSelectAll.class.getName());
+
+               setupAction(ActionMessages.SELECTALL, ActionMessages.SELECTALL,
+                               (ImageDescriptor) null, null, null, false);
+       }
+
+       public void run() {
+               ITerminalViewControl target = getTarget();
+               if (target != null) {
+                       target.selectAll();
+               }
+       }
+
+       public void updateAction(boolean aboutToShow) {
+               ITerminalViewControl target = getTarget();
+               setEnabled(target != null && !target.isEmpty());
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/ITerminalControlForText.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/ITerminalControlForText.java
new file mode 100644 (file)
index 0000000..f154680
--- /dev/null
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Anton Leherbauer (Wind River) - [458398] Add support for normal/application cursor keys mode
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control.impl;
+
+import java.io.OutputStream;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+
+/**
+ * need a better name!
+ * @author Michael Scharf
+ *
+ */
+public interface ITerminalControlForText {
+       
+       TerminalState getState();
+       void setState(TerminalState state);
+       void setTerminalTitle(String title);
+       
+       ITerminalConnector getTerminalConnector();
+
+       OutputStream getOutputStream();
+       
+       /**
+        * Enable/disable Application Cursor Keys mode (DECCKM)
+        * @param enable
+        */
+       void enableApplicationCursorKeys(boolean enable);
+       
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/TerminalMessages.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/TerminalMessages.java
new file mode 100644 (file)
index 0000000..137d67a
--- /dev/null
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control.impl;
+
+import org.eclipse.osgi.util.NLS;
+
+public class TerminalMessages extends NLS {
+       static {
+               NLS.initializeMessages(TerminalMessages.class.getName(), TerminalMessages.class);
+       }
+
+    public static String TerminalError;
+    public static String SocketError;
+    public static String IOError;
+    public static String CannotConnectTo;
+    public static String NotInitialized;
+
+    //Preference Page
+    public static String INVERT_COLORS;
+    public static String BUFFERLINES;
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/TerminalMessages.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/TerminalMessages.properties
new file mode 100644 (file)
index 0000000..dd249e2
--- /dev/null
@@ -0,0 +1,28 @@
+###############################################################################
+# Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Initial Contributors:
+# The following Wind River employees contributed to the Terminal component
+# that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+# Helmut Haigermoser and Ted Williams.
+#
+# Contributors:
+# Michael Scharf (Wind River) - split into core, view and connector plugins 
+# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+# Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
+###############################################################################
+
+# NLS_MESSAGEFORMAT_VAR
+
+TerminalError = Terminal Error
+SocketError = Socket Error
+IOError = IO Error
+CannotConnectTo = Cannot initialize {0}:\n{1}
+NotInitialized = Not Initialized
+
+INVERT_COLORS = Invert terminal colors
+BUFFERLINES = Terminal buffer lines:
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/TerminalPlugin.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/impl/TerminalPlugin.java
new file mode 100644 (file)
index 0000000..de791f8
--- /dev/null
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Anna Dushistova (MontaVista) - [227537] moved actions from terminal.view to terminal plugin
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.control.impl;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.tm.internal.terminal.control.actions.ImageConsts;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+public class TerminalPlugin extends AbstractUIPlugin {
+       private static TerminalPlugin plugin;
+       public static final String  PLUGIN_ID  = "org.eclipse.tm.terminal.control"; //$NON-NLS-1$
+       public static final String  HELP_VIEW  = PLUGIN_ID + ".terminal_view"; //$NON-NLS-1$
+
+       /**
+        * The constructor.
+        */
+       public TerminalPlugin() {
+       }
+       /**
+        * Returns the shared instance.
+        */
+       public static TerminalPlugin getDefault() {
+               return plugin;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void start(BundleContext context) throws Exception {
+               super.start(context);
+               plugin = this;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void stop(BundleContext context) throws Exception {
+               plugin = null;
+               super.stop(context);
+       }
+
+       public static boolean isOptionEnabled(String strOption) {
+               String strEnabled = Platform.getDebugOption(strOption);
+               if (strEnabled == null)
+                       return false;
+
+               return new Boolean(strEnabled).booleanValue();
+       }
+
+       @Override
+    protected void initializeImageRegistry(ImageRegistry imageRegistry) {
+               try {
+                       // Local toolbars
+                       putImageInRegistry(imageRegistry, ImageConsts.IMAGE_CLCL_CLEAR_ALL, ImageConsts.IMAGE_DIR_LOCALTOOL + "clear_co.gif"); //$NON-NLS-1$
+                       // Enabled local toolbars
+                       putImageInRegistry(imageRegistry, ImageConsts.IMAGE_ELCL_CLEAR_ALL, ImageConsts.IMAGE_DIR_ELCL + "clear_co.gif"); //$NON-NLS-1$
+                       // Disabled local toolbars
+                       putImageInRegistry(imageRegistry, ImageConsts.IMAGE_DLCL_CLEAR_ALL, ImageConsts.IMAGE_DIR_DLCL + "clear_co.gif"); //$NON-NLS-1$
+               } catch (MalformedURLException malformedURLException) {
+                       malformedURLException.printStackTrace();
+               }
+       }
+
+       protected void putImageInRegistry(ImageRegistry imageRegistry, String strKey, String relativePath) throws MalformedURLException {
+               URL url = TerminalPlugin.getDefault().getBundle().getEntry(relativePath);
+               ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(url);
+               imageRegistry.put(strKey, imageDescriptor);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java
new file mode 100644 (file)
index 0000000..e95d69e
--- /dev/null
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2013, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.tm.internal.terminal.emulator;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jface.bindings.TriggerSequence;
+import org.eclipse.jface.bindings.keys.KeySequence;
+import org.eclipse.jface.bindings.keys.KeyStroke;
+import org.eclipse.jface.bindings.keys.SWTKeySupport;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.keys.IBindingService;
+
+class EditActionAccelerators {
+       private static final String COPY_COMMAND_ID = "org.eclipse.tm.terminal.copy"; //$NON-NLS-1$
+       private static final String PASTE_COMMAND_ID = "org.eclipse.tm.terminal.paste"; //$NON-NLS-1$
+
+       private final Map commandIdsByAccelerator = new HashMap();
+
+       private void load() {
+               addAccelerator(COPY_COMMAND_ID);
+               addAccelerator(PASTE_COMMAND_ID);
+       }
+
+       private void addAccelerator(String commandId) {
+               TriggerSequence[] bindings = bindingsFor(commandId);
+               for (int i=0; i<bindings.length; ++i) {
+                       if (bindings[i] instanceof KeySequence) {
+                               KeyStroke[] keyStrokes = ((KeySequence) bindings[i]).getKeyStrokes();
+                               if (keyStrokes.length != 0) {
+                                       int accelerator = SWTKeySupport.convertKeyStrokeToAccelerator(keyStrokes[0]);
+                                       commandIdsByAccelerator.put(new Integer(accelerator), commandId);
+                               }
+                       }
+               }
+       }
+
+       private static TriggerSequence[] bindingsFor(String commandId) {
+               IBindingService bindingService = bindingService();
+               return bindingService.getActiveBindingsFor(commandId);
+       }
+
+       private static IBindingService bindingService() {
+               return (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
+       }
+
+       boolean isCopyAction(int accelerator) {
+               return isMatchingAction(accelerator, COPY_COMMAND_ID);
+       }
+
+       boolean isPasteAction(int accelerator) {
+               return isMatchingAction(accelerator, PASTE_COMMAND_ID);
+       }
+
+       private boolean isMatchingAction(int accelerator, String commandId) {
+               if (commandIdsByAccelerator.isEmpty()) {
+                       load();
+               }
+               return commandId.equals(commandIdsByAccelerator.get(new Integer(accelerator)));
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/IVT100EmulatorBackend.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/IVT100EmulatorBackend.java
new file mode 100644 (file)
index 0000000..aff9089
--- /dev/null
@@ -0,0 +1,222 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
+ * Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode
+ * Anton Leherbauer (Wind River) - [458402] Add support for scroll up/down and scroll region
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.emulator;
+
+import org.eclipse.tm.terminal.model.Style;
+
+/**
+ *
+ */
+public interface IVT100EmulatorBackend {
+
+       /**
+        * This method erases all text from the Terminal view. Including the history
+        */
+       void clearAll();
+
+       /**
+        * Sets the Dimensions of the addressable scroll space of the screen....
+        * Keeps the cursor position relative to the bottom of the screen!
+        * @param lines
+        * @param cols
+        */
+       void setDimensions(int lines, int cols);
+
+       /**
+        * This method makes room for N characters on the current line at the cursor
+        * position. Text under the cursor moves right without wrapping at the end
+        * of the line.
+        * 01234
+        * 0 123
+        */
+       void insertCharacters(int charactersToInsert);
+
+       /**
+        *      Erases from cursor to end of screen, including cursor position. Cursor does not move.
+        */
+       void eraseToEndOfScreen();
+
+       /**
+        * Erases from beginning of screen to cursor, including cursor position. Cursor does not move.
+        */
+       void eraseToCursor();
+
+       /**
+        * Erases complete display. All lines are erased and changed to single-width. Cursor does not move.
+        */
+       void eraseAll();
+
+       /**
+        * Erases complete line.
+        */
+       void eraseLine();
+
+       /**
+        * Erases from cursor to end of line, including cursor position.
+        */
+       void eraseLineToEnd();
+
+       /**
+        * Erases from beginning of line to cursor, including cursor position.
+        */
+       void eraseLineToCursor();
+
+       /**
+        * Inserts n lines at line with cursor. Lines displayed below cursor move down. 
+        * Lines moved past the bottom margin are lost. This sequence is ignored when 
+        * cursor is outside scrolling region.
+        * @param n the number of lines to insert
+        */
+       void insertLines(int n);
+
+       /**
+        * Deletes n characters, starting with the character at cursor position. 
+        * When a character is deleted, all characters to the right of cursor move 
+        * left. This creates a space character at right margin. This character 
+        * has same character attribute as the last character moved left.
+        * @param n
+        * 012345
+        * 0145xx
+        */
+       void deleteCharacters(int n);
+
+       /**
+        * Deletes n lines, starting at line with cursor. As lines are deleted, 
+        * lines displayed below cursor move up. Lines added to bottom of screen 
+        * have spaces with same character attributes as last line moved up. This 
+        * sequence is ignored when cursor is outside scrolling region.
+        * @param n the number of lines to delete
+        */
+       void deleteLines(int n);
+
+       Style getDefaultStyle();
+
+       void setDefaultStyle(Style defaultStyle);
+
+       Style getStyle();
+
+       /**
+        * Sets the style to be used from now on
+        * @param style
+        */
+       void setStyle(Style style);
+
+       /**
+        * This method displays a subset of the newly-received text in the Terminal
+        * view, wrapping text at the right edge of the screen and overwriting text
+        * when the cursor is not at the very end of the screen's text.
+        * <p>
+        * 
+        * There are never any ANSI control characters or escape sequences in the
+        * text being displayed by this method (this includes newlines, carriage
+        * returns, and tabs).
+        * <p>
+        */
+       void appendString(String buffer);
+
+       /**
+        * Process a newline (Control-J) character. A newline (NL) character just
+        * moves the cursor to the same column on the next line, creating new lines
+        * when the cursor reaches the bottom edge of the terminal. This is
+        * counter-intuitive, especially to UNIX programmers who are taught that
+        * writing a single NL to a terminal is sufficient to move the cursor to the
+        * first column of the next line, as if a carriage return (CR) and a NL were
+        * written.
+        * <p>
+        * 
+        * UNIX terminals typically display a NL character as a CR followed by a NL
+        * because the terminal device typically has the ONLCR attribute bit set
+        * (see the termios(4) man page for details), which causes the terminal
+        * device driver to translate NL to CR + NL on output. The terminal itself
+        * (i.e., a hardware terminal or a terminal emulator, like xterm or this
+        * code) _always_ interprets a CR to mean "move the cursor to the beginning
+        * of the current line" and a NL to mean "move the cursor to the same column
+        * on the next line".
+        * <p>
+        */
+       void processNewline();
+
+       /**
+        * This method returns the relative line number of the line containing the
+        * cursor. The returned line number is relative to the topmost visible line,
+        * which has relative line number 0.
+        * 
+        * @return The relative line number of the line containing the cursor.
+        */
+       int getCursorLine();
+
+       int getCursorColumn();
+
+       /**
+        * This method moves the cursor to the specified line and column. Parameter
+        * <i>targetLine</i> is the line number of a screen line, so it has a
+        * minimum value of 0 (the topmost screen line) and a maximum value of
+        * heightInLines - 1 (the bottommost screen line). A line does not have to
+        * contain any text to move the cursor to any column in that line.
+        */
+       void setCursor(int targetLine, int targetColumn);
+
+       void setCursorColumn(int targetColumn);
+
+       void setCursorLine(int targetLine);
+
+       int getLines();
+
+       int getColumns();
+
+       /**
+        * Enables VT100 line wrapping mode (default is off).
+        * This corresponds to the VT100 'eat_newline_glitch' terminal capability.
+        * If enabled, writing to the rightmost column does not cause
+        * an immediate wrap to the next line. Instead the line wrap occurs on the
+        * next output character.
+        * 
+        * @param enable  whether to enable or disable VT100 line wrapping mode
+        */
+       void setVT100LineWrapping(boolean enable);
+
+       /**
+        * @return whether VT100 line wrapping mode is enabled
+        */
+       boolean isVT100LineWrapping();
+
+       /**
+        * Enables/disables insert mode (IRM).
+        * 
+        * @param enable  whether to enable insert mode
+        */
+       void setInsertMode(boolean enable);
+
+       /**
+        * Set scrolling region. Negative values reset the scroll region.
+        * 
+        * @param top  top line of scroll region
+        * @param bottom  bottom line of scroll region
+        */
+       void setScrollRegion(int top, int bottom);
+
+       /**
+        * Scroll text upwards.
+        * 
+        * @param lines  number of lines to scroll
+        */
+       void scrollUp(int lines);
+
+       /**
+        * Scroll text downwards.
+        * 
+        * @param lines  number of lines to scroll
+        */
+       void scrollDown(int lines);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/LoggingOutputStream.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/LoggingOutputStream.java
new file mode 100644 (file)
index 0000000..20c176f
--- /dev/null
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.emulator;
+
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+
+public class LoggingOutputStream extends FilterOutputStream {
+
+       public LoggingOutputStream(OutputStream out) {
+               super(out);
+       }
+
+       public void write(byte[] b, int off, int len) throws IOException {
+               if(Logger.isLogEnabled())
+                       Logger.log("Received " + len + " bytes: '" + //$NON-NLS-1$ //$NON-NLS-2$
+                                       Logger.encode(new String(b, 0, len)) + "'"); //$NON-NLS-1$
+               
+               // we cannot call super.write, because this would call our write
+               // which logs character by character.....
+               //super.write(b, off, len);
+               if ((off | len | (b.length - (len + off)) | (off + len)) < 0)
+                   throw new IndexOutOfBoundsException();
+
+               for (int i = 0 ; i < len ; i++) {
+                   super.write(b[off + i]);
+               }
+       }
+
+       public void write(int b) throws IOException {
+               if(Logger.isLogEnabled())
+                       Logger.log("Received " + 1 + " bytes: '" + //$NON-NLS-1$ //$NON-NLS-2$
+                                       Logger.encode(new String(new byte[]{(byte)b}, 0, 1)) + "'"); //$NON-NLS-1$
+               super.write(b);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100BackendTraceDecorator.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100BackendTraceDecorator.java
new file mode 100644 (file)
index 0000000..7853143
--- /dev/null
@@ -0,0 +1,176 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
+ * Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode
+ * Anton Leherbauer (Wind River) - [458402] Add support for scroll up/down and scroll region
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.emulator;
+
+import java.io.PrintStream;
+
+import org.eclipse.tm.terminal.model.Style;
+
+public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
+       final IVT100EmulatorBackend fBackend;
+       final PrintStream fWriter;
+       public VT100BackendTraceDecorator(IVT100EmulatorBackend backend, PrintStream out) {
+               fBackend = backend;
+               fWriter=out;
+       }
+
+       public void appendString(String buffer) {
+               fWriter.println("appendString(\""+buffer+"\")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.appendString(buffer);
+       }
+
+       public void clearAll() {
+               fWriter.println("clearAll()"); //$NON-NLS-1$
+               fBackend.clearAll();
+       }
+
+       public void deleteCharacters(int n) {
+               fWriter.println("deleteCharacters("+n+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.deleteCharacters(n);
+       }
+
+       public void deleteLines(int n) {
+               fWriter.println("deleteLines("+n+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.deleteLines(n);
+       }
+
+       public void eraseAll() {
+               fWriter.println("eraseAll()"); //$NON-NLS-1$
+               fBackend.eraseAll();
+       }
+
+       public void eraseLine() {
+               fWriter.println("eraseLine()"); //$NON-NLS-1$
+               fBackend.eraseLine();
+       }
+
+       public void eraseLineToCursor() {
+               fWriter.println("eraseLineToCursor()"); //$NON-NLS-1$
+               fBackend.eraseLineToCursor();
+       }
+
+       public void eraseLineToEnd() {
+               fWriter.println("eraseLineToEnd()"); //$NON-NLS-1$
+               fBackend.eraseLineToEnd();
+       }
+
+       public void eraseToCursor() {
+               fWriter.println("eraseToCursor()"); //$NON-NLS-1$
+               fBackend.eraseToCursor();
+       }
+
+       public void eraseToEndOfScreen() {
+               fWriter.println("eraseToEndOfScreen()"); //$NON-NLS-1$
+               fBackend.eraseToEndOfScreen();
+       }
+
+       public int getColumns() {
+               return fBackend.getColumns();
+       }
+
+       public int getCursorColumn() {
+               return fBackend.getCursorColumn();
+       }
+
+       public int getCursorLine() {
+               return fBackend.getCursorLine();
+       }
+
+       public Style getDefaultStyle() {
+               return fBackend.getDefaultStyle();
+       }
+
+       public int getLines() {
+               return fBackend.getLines();
+       }
+
+       public Style getStyle() {
+               return fBackend.getStyle();
+       }
+
+       public void insertCharacters(int charactersToInsert) {
+               fWriter.println("insertCharacters("+charactersToInsert+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.insertCharacters(charactersToInsert);
+       }
+
+       public void insertLines(int n) {
+               fWriter.println("insertLines("+n+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.insertLines(n);
+       }
+
+       public void processNewline() {
+               fWriter.println("processNewline()"); //$NON-NLS-1$
+               fBackend.processNewline();
+       }
+
+       public void setCursor(int targetLine, int targetColumn) {
+               fWriter.println("setCursor("+targetLine+", "+targetColumn+")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+               fBackend.setCursor(targetLine, targetColumn);
+       }
+
+       public void setCursorColumn(int targetColumn) {
+               fWriter.println("setCursorColumn("+targetColumn+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.setCursorColumn(targetColumn);
+       }
+
+       public void setCursorLine(int targetLine) {
+               fWriter.println("setCursorLine("+targetLine+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.setCursorLine(targetLine);
+       }
+
+       public void setDefaultStyle(Style defaultStyle) {
+               fWriter.println("setDefaultStyle("+defaultStyle+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.setDefaultStyle(defaultStyle);
+       }
+
+       public void setDimensions(int lines, int cols) {
+               fWriter.println("setDimensions("+lines+","+cols+")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+               fBackend.setDimensions(lines, cols);
+       }
+
+       public void setStyle(Style style) {
+               fWriter.println("setStyle("+style+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.setStyle(style);
+       }
+
+       public void setVT100LineWrapping(boolean enable) {
+               fWriter.println("setVT100LineWrapping("+enable+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.setVT100LineWrapping(enable);
+       }
+
+       public boolean isVT100LineWrapping() {
+               return fBackend.isVT100LineWrapping();
+       }
+
+       public void setInsertMode(boolean enable) {
+               fWriter.println("setInsertMode("+enable+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.setInsertMode(enable);
+       }
+
+       public void setScrollRegion(int top, int bottom) {
+               fWriter.println("setScrollRegion("+top+','+bottom+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.setScrollRegion(top, bottom);
+       }
+
+       public void scrollUp(int lines) {
+               fWriter.println("scrollUp("+lines+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.scrollUp(lines);
+       }
+
+       public void scrollDown(int lines) {
+               fWriter.println("scrollDown("+lines+")"); //$NON-NLS-1$ //$NON-NLS-2$
+               fBackend.scrollDown(lines);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100Emulator.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100Emulator.java
new file mode 100644 (file)
index 0000000..5e6817a
--- /dev/null
@@ -0,0 +1,1396 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Michael Scharf (Wind River) - [209746] There are cases where some colors not displayed correctly
+ * Martin Oberhuber (Wind River) - [168197] Fix Terminal for CDC-1.1/Foundation-1.1
+ * Michael Scharf (Wind River) - [262996] get rid of TerminalState.OPENED
+ * Martin Oberhuber (Wind River) - [334969] Fix multi-command SGR sequence
+ * Kris De Volder (VMWare) - [392107] Switched interpretation for ESC[0K and ESC[1K sequences
+ * Martin Oberhuber (Wind River) - [401386] Regression: No header on top due to incorrect ESC[K interpretation
+ * Martin Oberhuber (Wind River) - [401480] Handle ESC[39;49m and ESC[G
+ * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
+ * Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode
+ * Anton Leherbauer (Wind River) - [458398] Add support for normal/application cursor keys mode
+ * Anton Leherbauer (Wind River) - [458402] Add support for scroll up/down and scroll region
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.emulator;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.tm.internal.terminal.control.impl.ITerminalControlForText;
+import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.Style;
+
+/**
+ * This class processes character data received from the remote host and
+ * displays it to the user using the Terminal view's StyledText widget. This
+ * class processes ANSI control characters, including NUL, backspace, carriage
+ * return, linefeed, and a subset of ANSI escape sequences sufficient to allow
+ * use of screen-oriented applications, such as vi, Emacs, and any GNU
+ * readline-enabled application (Bash, bc, ncftp, etc.).
+ * <p>
+ *
+ * @author Fran Litterio <francis.litterio@windriver.com>
+ * @author Chris Thew <chris.thew@windriver.com>
+ */
+public class VT100Emulator implements ControlListener {
+       /** This is a character processing state: Initial state. */
+       private static final int ANSISTATE_INITIAL = 0;
+
+       /** This is a character processing state: We've seen an escape character. */
+       private static final int ANSISTATE_ESCAPE = 1;
+
+       /**
+        * This is a character processing state: We've seen a '[' after an escape
+        * character. Expecting a parameter character or a command character next.
+        */
+       private static final int ANSISTATE_EXPECTING_PARAMETER_OR_COMMAND = 2;
+
+       /**
+        * This is a character processing state: We've seen a ']' after an escape
+        * character. We are now expecting an operating system command that
+        * reprograms an intelligent terminal.
+        */
+       private static final int ANSISTATE_EXPECTING_OS_COMMAND = 3;
+
+       /**
+        * This is a character processing state: We've seen a '[?' after an escape
+        * character. Expecting a parameter character or a command character next.
+        */
+       private static final int ANSISTATE_EXPECTING_DEC_PRIVATE_COMMAND = 4;
+
+       /**
+        * This is a character processing state: We've seen one of ()*+-./ after an escape
+        * character. Expecting a character set designation character.
+        */
+       private static final int ANSISTATE_EXPECTING_CHARSET_DESIGNATION = 5;
+       
+
+       /**
+        * This field holds the current state of the Finite TerminalState Automaton (FSA)
+        * that recognizes ANSI escape sequences.
+        *
+        * @see #processNewText()
+        */
+       private int ansiState = ANSISTATE_INITIAL;
+
+       /**
+        * This field holds a reference to the {@link TerminalControl} object that
+        * instantiates this class.
+        */
+       private final ITerminalControlForText terminal;
+
+       /**
+        * This field holds a reference to the StyledText widget that is used to
+        * display text to the user.
+        */
+       final private IVT100EmulatorBackend text;
+       /**
+        * This field hold the saved absolute line number of the cursor when
+        * processing the "ESC 7" and "ESC 8" command sequences.
+        */
+       private int savedCursorLine = 0;
+
+       /**
+        * This field hold the saved column number of the cursor when processing the
+        * "ESC 7" and "ESC 8" command sequences.
+        */
+       private int savedCursorColumn = 0;
+
+       /**
+        * This field holds an array of StringBuffer objects, each of which is one
+        * parameter from the current ANSI escape sequence. For example, when
+        * parsing the escape sequence "\e[20;10H", this array holds the strings
+        * "20" and "10".
+        */
+       private final StringBuffer[] ansiParameters = new StringBuffer[16];
+
+       /**
+        * This field holds the OS-specific command found in an escape sequence of
+        * the form "\e]...\u0007".
+        */
+       private final StringBuffer ansiOsCommand = new StringBuffer(128);
+
+       /**
+        * This field holds the index of the next unused element of the array stored
+        * in field {@link #ansiParameters}.
+        */
+       private int nextAnsiParameter = 0;
+
+       Reader fReader;
+
+       boolean fCrAfterNewLine;
+       /**
+        * The constructor.
+        */
+       public VT100Emulator(ITerminalTextData data, ITerminalControlForText terminal, Reader reader) {
+               super();
+
+               Logger.log("entered"); //$NON-NLS-1$
+
+               this.terminal = terminal;
+
+               for (int i = 0; i < ansiParameters.length; ++i) {
+                       ansiParameters[i] = new StringBuffer();
+               }
+               setInputStreamReader(reader);
+               if(TerminalPlugin.isOptionEnabled(Logger.TRACE_DEBUG_LOG_VT100BACKEND))
+                       text=new VT100BackendTraceDecorator(new VT100EmulatorBackend(data),System.out);
+               else
+                       text=new VT100EmulatorBackend(data);
+
+//             text.setDimensions(24, 80);
+               Style  style=Style.getStyle("BLACK", "WHITE"); //$NON-NLS-1$ //$NON-NLS-2$
+               text.setDefaultStyle(style);
+               text.setStyle(style);
+       }
+
+       /**
+        * Set the reader that this Terminal gets its input from.
+        *
+        * The reader can be changed while the Terminal is running, but a change of
+        * the reader likely loses some characters which have not yet been fully
+        * read. Changing the reader can be done in order to change the selected
+        * Encoding, though. This is typically done when the Terminal is
+        * constructed, i.e. before it really starts operation; or, when the user
+        * manually selects a different encoding and thus doesn't care about losing
+        * old characters.
+        *
+        * @param reader the new Reader
+        */
+       public void setInputStreamReader(Reader reader) {
+               fReader = reader;
+       }
+
+       public void setDimensions(int lines,int cols) {
+               text.setDimensions(lines, cols);
+               ITerminalConnector telnetConnection = getConnector();
+               if (telnetConnection != null) {
+                       telnetConnection.setTerminalSize(text.getColumns(), text.getLines());
+               }
+
+       }
+
+       /**
+        * This method performs clean up when this VT100Emulator object is no longer
+        * needed. After calling this method, no other method on this object should
+        * be called.
+        */
+       public void dispose() {
+       }
+
+       /**
+        * This method is required by interface ControlListener. It allows us to
+        * know when the StyledText widget is moved.
+        */
+       public void controlMoved(ControlEvent event) {
+               Logger.log("entered"); //$NON-NLS-1$
+               // Empty.
+       }
+
+       /**
+        * This method is required by interface ControlListener. It allows us to
+        * know when the StyledText widget is resized.
+        */
+       public void controlResized(ControlEvent event) {
+               Logger.log("entered"); //$NON-NLS-1$
+               adjustTerminalDimensions();
+       }
+
+       /**
+        * This method erases all text from the Terminal view.
+        */
+       public void clearTerminal() {
+               Logger.log("entered"); //$NON-NLS-1$
+               text.clearAll();
+       }
+
+       /**
+        * This method is called when the user changes the Terminal view's font. We
+        * attempt to recompute the pixel width of the new font's characters and fix
+        * the terminal's dimensions.
+        */
+       public void fontChanged() {
+               Logger.log("entered"); //$NON-NLS-1$
+
+               if (text != null)
+                       adjustTerminalDimensions();
+       }
+//     /**
+//      * This method executes in the Display thread to process data received from
+//      * the remote host by class {@link org.eclipse.tm.internal.terminal.telnet.TelnetConnection} and
+//      * other implementors of {@link ITerminalConnector}, like the
+//      * SerialPortHandler.
+//      * <p>
+//      * These connectors write text to the terminal's buffer through
+//      * {@link TerminalControl#writeToTerminal(String)} and then have
+//      * this run method executed in the display thread. This method
+//      * must not execute at the same time as methods
+//      * {@link #setNewText(StringBuffer)} and {@link #clearTerminal()}.
+//      * <p>
+//      * IMPORTANT: This method must be called in strict alternation with method
+//      * {@link #setNewText(StringBuffer)}.
+//      * <p>
+//      */
+       public void processText() {
+               try {
+                       // Find the width and height of the terminal, and resize it to display an
+                       // integral number of lines and columns.
+
+                       adjustTerminalDimensions();
+
+                       // Restore the caret offset, process and display the new text, then save
+                       // the caret offset. See the documentation for field caretOffset for
+                       // details.
+
+                       // ISSUE: Is this causing the scroll-to-bottom-on-output behavior?
+
+                       try {
+                               processNewText();
+                       } catch (IOException e) {
+                               Logger.logException(e);
+                       }
+
+               } catch (Exception ex) {
+                       Logger.logException(ex);
+               }
+       }
+       /**
+        * This method scans the newly received text, processing ANSI control
+        * characters and escape sequences and displaying normal text.
+        * @throws IOException
+        */
+       private void processNewText() throws IOException {
+               Logger.log("entered"); //$NON-NLS-1$
+
+
+               // Scan the newly received text.
+
+               while (hasNextChar()) {
+                       char character = getNextChar();
+
+                       switch (ansiState) {
+                       case ANSISTATE_INITIAL:
+                               switch (character) {
+                               case '\u0000':
+                                       break; // NUL character. Ignore it.
+
+                               case '\u0007':
+                                       processBEL(); // BEL (Control-G)
+                                       break;
+
+                               case '\b':
+                                       processBackspace(); // Backspace
+                                       break;
+
+                               case '\t':
+                                       processTab(); // Tab.
+                                       break;
+
+                               case '\n':
+                                       processNewline(); // Newline (Control-J)
+                                       if(fCrAfterNewLine)
+                                               processCarriageReturn(); // Carriage Return (Control-M)
+                                       break;
+
+                               case '\r':
+                                       processCarriageReturn(); // Carriage Return (Control-M)
+                                       break;
+
+                               case '\u001b':
+                                       ansiState = ANSISTATE_ESCAPE; // Escape.
+                                       break;
+
+                               default:
+                                       processNonControlCharacters(character);
+                                       break;
+                               }
+                               break;
+
+                       case ANSISTATE_ESCAPE:
+                               // We've seen an escape character. Here, we process the character
+                               // immediately following the escape.
+
+                               switch (character) {
+                               case '[':
+                                       ansiState = ANSISTATE_EXPECTING_PARAMETER_OR_COMMAND;
+                                       nextAnsiParameter = 0;
+
+                                       // Erase the parameter strings in preparation for optional
+                                       // parameter characters.
+
+                                       for (int i = 0; i < ansiParameters.length; ++i) {
+                                               ansiParameters[i].delete(0, ansiParameters[i].length());
+                                       }
+                                       break;
+
+                               case ']':
+                                       ansiState = ANSISTATE_EXPECTING_OS_COMMAND;
+                                       ansiOsCommand.delete(0, ansiOsCommand.length());
+                                       break;
+
+                               case ')':
+                               case '(':
+                               case '*':
+                               case '+':
+                               case '-':
+                               case '.':
+                               case '/':
+                                       ansiState = ANSISTATE_EXPECTING_CHARSET_DESIGNATION;
+                                       break;
+
+                               case '7':
+                                       // Save cursor position and character attributes
+
+                                       ansiState = ANSISTATE_INITIAL;
+                                       savedCursorLine = relativeCursorLine();
+                                       savedCursorColumn = getCursorColumn();
+                                       break;
+
+                               case '8':
+                                       // Restore cursor and attributes to previously saved
+                                       // position
+
+                                       ansiState = ANSISTATE_INITIAL;
+                                       moveCursor(savedCursorLine, savedCursorColumn);
+                                       break;
+
+                               case 'c':
+                                       // Reset the terminal
+                                       ansiState = ANSISTATE_INITIAL;
+                                       resetTerminal();
+                                       break;
+
+                               default:
+                                       Logger
+                                                       .log("Unsupported escape sequence: escape '" + character + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+                                       ansiState = ANSISTATE_INITIAL;
+                                       break;
+                               }
+                               break;
+
+                       case ANSISTATE_EXPECTING_PARAMETER_OR_COMMAND:
+                               if (character == '?') {
+                                       ansiState = ANSISTATE_EXPECTING_DEC_PRIVATE_COMMAND;
+                                       break;
+                               }
+
+                               // Parameters can appear after the '[' in an escape sequence, but they
+                               // are optional.
+
+                               if (character == '@' || (character >= 'A' && character <= 'Z')
+                                               || (character >= 'a' && character <= 'z')) {
+                                       ansiState = ANSISTATE_INITIAL;
+                                       processAnsiCommandCharacter(character);
+                               } else {
+                                       processAnsiParameterCharacter(character);
+                               }
+                               break;
+
+                       case ANSISTATE_EXPECTING_OS_COMMAND:
+                               // A BEL (\u0007) character marks the end of the OSC sequence.
+
+                               if (character == '\u0007') {
+                                       ansiState = ANSISTATE_INITIAL;
+                                       processAnsiOsCommand();
+                               } else {
+                                       ansiOsCommand.append(character);
+                               }
+                               break;
+
+                       case ANSISTATE_EXPECTING_DEC_PRIVATE_COMMAND:
+                               // Parameters can appear after the '[?' in an escape sequence, but they
+                               // are optional.
+
+                               if (character == '@' || (character >= 'A' && character <= 'Z')
+                                               || (character >= 'a' && character <= 'z')) {
+                                       ansiState = ANSISTATE_INITIAL;
+                                       processDecPrivateCommandCharacter(character);
+                               } else {
+                                       processAnsiParameterCharacter(character);
+                               }
+                               break;
+
+                       case ANSISTATE_EXPECTING_CHARSET_DESIGNATION:
+                               if (character != '%')
+                                       ansiState = ANSISTATE_INITIAL;
+                               // Character set designation commands are ignored
+                               break;
+
+                       default:
+                               // This should never happen! If it does happen, it means there is a
+                               // bug in the FSA. For robustness, we return to the initial
+                               // state.
+
+                               Logger.log("INVALID ANSI FSA STATE: " + ansiState); //$NON-NLS-1$
+                               ansiState = ANSISTATE_INITIAL;
+                               break;
+                       }
+               }
+       }
+       private void resetTerminal() {
+               text.eraseAll();
+               text.setCursor(0, 0);
+               text.setStyle(text.getDefaultStyle());
+               text.setScrollRegion(-1, -1);
+               text.setInsertMode(false);
+               terminal.enableApplicationCursorKeys(false);
+       }
+       /**
+        * This method is called when we have parsed an OS Command escape sequence.
+        * The only one we support is "\e]0;...\u0007", which sets the terminal
+        * title.
+        */
+       private void processAnsiOsCommand() {
+               if (ansiOsCommand.charAt(0) != '0' || ansiOsCommand.charAt(1) != ';') {
+                       Logger
+                                       .log("Ignoring unsupported ANSI OSC sequence: '" + ansiOsCommand + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+                       return;
+               }
+               terminal.setTerminalTitle(ansiOsCommand.substring(2));
+       }
+
+       /**
+        * This method dispatches control to various processing methods based on the
+        * command character found in the most recently received ANSI escape
+        * sequence. This method only handles command characters that follow the
+        * ANSI standard Control Sequence Introducer (CSI), which is "\e[...", where
+        * "..." is an optional ';'-separated sequence of numeric parameters.
+        * <p>
+        */
+       private void processAnsiCommandCharacter(char ansiCommandCharacter) {
+               // If the width or height of the terminal is ridiculously small (one line or
+               // column or less), don't even try to process the escape sequence. This avoids
+               // throwing an exception (SPR 107450). The display will be messed up, but what
+               // did you user expect by making the terminal so small?
+
+               switch (ansiCommandCharacter) {
+               case '@':
+                       // Insert character(s).
+                       processAnsiCommand_atsign();
+                       break;
+
+               case 'A':
+                       // Move cursor up N lines (default 1).
+                       processAnsiCommand_A();
+                       break;
+
+               case 'B':
+                       // Move cursor down N lines (default 1).
+                       processAnsiCommand_B();
+                       break;
+
+               case 'C':
+                       // Move cursor forward N columns (default 1).
+                       processAnsiCommand_C();
+                       break;
+
+               case 'D':
+                       // Move cursor backward N columns (default 1).
+                       processAnsiCommand_D();
+                       break;
+
+               case 'd':
+                       // Line Position Absolute [row] (default = [1,column]) (VPA).
+                       processAnsiCommand_d();
+                       break;
+                       
+               case 'E':
+                       // Move cursor to first column of Nth next line (default 1).
+                       processAnsiCommand_E();
+                       break;
+
+               case 'F':
+                       // Move cursor to first column of Nth previous line (default 1).
+                       processAnsiCommand_F();
+                       break;
+
+               case 'G':
+                       // Move to column N of current line (default 1).
+                       processAnsiCommand_G();
+                       break;
+
+               case 'H':
+                       // Set cursor Position.
+                       processAnsiCommand_H();
+                       break;
+
+               case 'h':
+                       // Reset Mode.
+                       processAnsiCommand_h();
+                       break;
+
+               case 'J':
+                       // Erase part or all of display. Cursor does not move.
+                       processAnsiCommand_J();
+                       break;
+
+               case 'K':
+                       // Erase in line (cursor does not move).
+                       processAnsiCommand_K();
+                       break;
+
+               case 'L':
+                       // Insert line(s) (current line moves down).
+                       processAnsiCommand_L();
+                       break;
+
+               case 'l':
+                       // Set Mode.
+                       processAnsiCommand_l();
+                       break;
+                       
+               case 'M':
+                       // Delete line(s).
+                       processAnsiCommand_M();
+                       break;
+
+               case 'm':
+                       // Set Graphics Rendition (SGR).
+                       processAnsiCommand_m();
+                       break;
+
+               case 'n':
+                       // Device Status Report (DSR).
+                       processAnsiCommand_n();
+                       break;
+
+               case 'P':
+                       // Delete character(s).
+                       processAnsiCommand_P();
+                       break;
+
+               case 'r':
+                       // Set Scrolling Region.
+                       processAnsiCommand_r();
+                       break;
+
+               case 'S':
+                       // Scroll up.
+                       processAnsiCommand_S();
+                       break;
+
+               case 'T':
+                       // Scroll down.
+                       processAnsiCommand_T();
+                       break;
+
+               case 'X':
+                       // Erase character.
+                       // Emacs, vi, and GNU readline don't seem to use this command, so we ignore
+                       // it for now.
+                       break;
+
+               case 'Z':
+                       // Cursor back tab.
+                       // Emacs, vi, and GNU readline don't seem to use this command, so we ignore
+                       // it for now.
+                       break;
+
+               default:
+                       Logger.log("Ignoring unsupported ANSI command character: '" + //$NON-NLS-1$
+                                       ansiCommandCharacter + "'"); //$NON-NLS-1$
+                       break;
+               }
+       }
+
+       /**
+        * This method dispatches control to various processing methods based on the
+        * command character found in the most recently received DEC private mode escape
+        * sequence. This method only handles command characters that follow the
+        * control sequence CSI ?
+        */
+       private void processDecPrivateCommandCharacter(char commandCharacter) {
+               switch (commandCharacter) {
+               case 'h':
+                       // DEC Private Mode Set (DECSET)
+                       processDecPrivateCommand_h();
+                       break;
+
+               case 'l':
+                       // DEC Private Mode Reset (DECRST)
+                       processDecPrivateCommand_l();
+                       break;
+
+               default:
+                       Logger.log("Ignoring unsupported DEC private command character: '" + //$NON-NLS-1$
+                                       commandCharacter + "'"); //$NON-NLS-1$
+                       break;
+               }
+       }
+
+       /**
+        * This method makes room for N characters on the current line at the cursor
+        * position. Text under the cursor moves right without wrapping at the end
+        * of the line.
+        */
+       private void processAnsiCommand_atsign() {
+               int charactersToInsert = getAnsiParameter(0);
+               text.insertCharacters(charactersToInsert);
+       }
+
+       /**
+        * This method moves the cursor up by the number of lines specified by the
+        * escape sequence parameter (default 1).
+        */
+       private void processAnsiCommand_A() {
+               moveCursorUp(getAnsiParameter(0));
+       }
+
+       /**
+        * This method moves the cursor down by the number of lines specified by the
+        * escape sequence parameter (default 1).
+        */
+       private void processAnsiCommand_B() {
+               moveCursorDown(getAnsiParameter(0));
+       }
+
+       /**
+        * This method moves the cursor forward by the number of columns specified
+        * by the escape sequence parameter (default 1).
+        */
+       private void processAnsiCommand_C() {
+               moveCursorForward(getAnsiParameter(0));
+       }
+
+       /**
+        * This method moves the cursor backward by the number of columns specified
+        * by the escape sequence parameter (default 1).
+        */
+       private void processAnsiCommand_D() {
+               moveCursorBackward(getAnsiParameter(0));
+       }
+
+       /**
+        * This method moves the cursor to a specific row.
+        */
+       private void processAnsiCommand_d() {
+               // Line Position Absolute [row] (default = [1,column]) (VPA).
+               text.setCursorLine(getAnsiParameter(0) - 1);
+       }
+       
+       /**
+        * This method moves the cursor to the first column of the Nth next line,
+        * where N is specified by the ANSI parameter (default 1).
+        */
+       private void processAnsiCommand_E() {
+               int linesToMove = getAnsiParameter(0);
+
+               moveCursor(relativeCursorLine() + linesToMove, 0);
+       }
+
+       /**
+        * This method moves the cursor to the first column of the Nth previous
+        * line, where N is specified by the ANSI parameter (default 1).
+        */
+       private void processAnsiCommand_F() {
+               int linesToMove = getAnsiParameter(0);
+
+               moveCursor(relativeCursorLine() - linesToMove, 0);
+       }
+
+       /**
+        * This method moves the cursor within the current line to the column
+        * specified by the ANSI parameter (default is column 1).
+        */
+       private void processAnsiCommand_G() {
+               moveCursor(relativeCursorLine(), getAnsiParameter(0) - 1);
+       }
+
+       /**
+        * This method sets the cursor to a position specified by the escape
+        * sequence parameters (default is the upper left corner of the screen).
+        */
+       private void processAnsiCommand_H() {
+               moveCursor(getAnsiParameter(0) - 1, getAnsiParameter(1) - 1);
+       }
+
+       /**
+        * This method sets terminal modes.
+        */
+       private void processAnsiCommand_h() {
+               if (getAnsiParameter(0) == 4) {
+                       // set insert mode
+                       text.setInsertMode(true);
+               }
+       }
+
+       /**
+        * This method deletes some (or all) of the text on the screen without
+        * moving the cursor.
+        */
+       private void processAnsiCommand_J() {
+               int ansiParameter;
+
+               if (ansiParameters[0].length() == 0)
+                       ansiParameter = 0;
+               else
+                       ansiParameter = getAnsiParameter(0);
+
+               switch (ansiParameter) {
+               case 0:
+                       text.eraseToEndOfScreen();
+                       break;
+
+               case 1:
+                       // Erase from beginning to current position (inclusive).
+                       text.eraseToCursor();
+                       break;
+
+               case 2:
+                       // Erase entire display.
+
+                       text.eraseAll();
+                       break;
+
+               default:
+                       Logger.log("Unexpected J-command parameter: " + ansiParameter); //$NON-NLS-1$
+                       break;
+               }
+       }
+
+       /**
+        * This method deletes some (or all) of the text in the current line without
+        * moving the cursor.
+        */
+       private void processAnsiCommand_K() {
+               //Bug 401386: missing parameter must be interpreted as 0, and not 1 like most other defaults.
+               int ansiParameter = 0;
+               if (ansiParameters[0].length() > 0)
+                       ansiParameter = getAnsiParameter(0);
+
+               switch (ansiParameter) {
+               case 0:
+                       // Erase from current position to end (inclusive).
+                       text.eraseLineToEnd();
+                       break;
+
+               case 1:
+                       // Erase from beginning to current position (inclusive).
+                       text.eraseLineToCursor();
+                       break;
+
+               case 2:
+                       // Erase entire line.
+                       text.eraseLine();
+                       break;
+
+               default:
+                       Logger.log("Unexpected K-command parameter: " + ansiParameter); //$NON-NLS-1$
+                       break;
+               }
+       }
+
+       /**
+        * Insert one or more blank lines. The current line of text moves down. Text
+        * that falls off the bottom of the screen is deleted.
+        */
+       private void processAnsiCommand_L() {
+               text.insertLines(getAnsiParameter(0));
+       }
+
+       /**
+        * This method resets terminal modes.
+        */
+       private void processAnsiCommand_l() {
+               if (getAnsiParameter(0) == 4) {
+                       // reset insert mode
+                       text.setInsertMode(false);
+               }
+       }
+
+       /**
+        * Delete one or more lines of text. Any lines below the deleted lines move
+        * up, which we implement by appending newlines to the end of the text.
+        */
+       private void processAnsiCommand_M() {
+               text.deleteLines(getAnsiParameter(0));
+       }
+
+       /**
+        * This method sets a new graphics rendition mode, such as
+        * foreground/background color, bold/normal text, and reverse video.
+        */
+       private void processAnsiCommand_m() {
+               if (ansiParameters[0].length() == 0) {
+                       // This a special case: when no ANSI parameter is specified, act like a
+                       // single parameter equal to 0 was specified.
+
+                       ansiParameters[0].append('0');
+               }
+               Style style=text.getStyle();
+               // There are a non-zero number of ANSI parameters. Process each one in
+               // order.
+
+               int totalParameters = ansiParameters.length;
+               int parameterIndex = 0;
+
+               while (parameterIndex < totalParameters
+                               && ansiParameters[parameterIndex].length() > 0) {
+                       int ansiParameter = getAnsiParameter(parameterIndex);
+
+                       switch (ansiParameter) {
+                       case 0:
+                               // Reset all graphics modes.
+                               style = text.getDefaultStyle();
+                               break;
+
+                       case 1:
+                               style = style.setBold(true);
+                               break;
+
+                       case 4:
+                               style = style.setUnderline(true);
+                               break;
+
+                       case 5:
+                               style = style.setBlink(true);
+                               break;
+
+                       case 7:
+                               style = style.setReverse(true);
+                               break;
+
+                       case 10: // Set primary font. Ignored.
+                               break;
+
+                       case 21:
+                       case 22:
+                               style = style.setBold(false);
+                               break;
+
+                       case 24:
+                               style = style.setUnderline(false);
+                               break;
+
+                       case 25:
+                               style = style.setBlink(false);
+                               break;
+
+                       case 27:
+                               style = style.setReverse(false);
+                               break;
+
+                       case 30:
+                               style = style.setForground("BLACK"); //$NON-NLS-1$
+                               break;
+
+                       case 31:
+                               style = style.setForground("RED");  //$NON-NLS-1$
+                               break;
+
+                       case 32:
+                               style = style.setForground("GREEN");  //$NON-NLS-1$
+                               break;
+
+                       case 33:
+                               style = style.setForground("YELLOW");  //$NON-NLS-1$
+                               break;
+
+                       case 34:
+                               style = style.setForground("BLUE"); //$NON-NLS-1$
+                               break;
+
+                       case 35:
+                               style = style.setForground("MAGENTA");  //$NON-NLS-1$
+                               break;
+
+                       case 36:
+                               style = style.setForground("CYAN"); //$NON-NLS-1$
+                               break;
+
+                       case 37:
+                               style = style.setForground("WHITE_FOREGROUND"); //$NON-NLS-1$
+                               break;
+
+                       case 39: //Foreground: Default
+                               style = style.setForground(text.getDefaultStyle().getForground());
+                               break;
+
+                       case 40:
+                               style = style.setBackground("BLACK"); //$NON-NLS-1$
+                               break;
+
+                       case 41:
+                               style = style.setBackground("RED"); //$NON-NLS-1$
+                               break;
+
+                       case 42:
+                               style = style.setBackground("GREEN"); //$NON-NLS-1$
+                               break;
+
+                       case 43:
+                               style = style.setBackground("YELLOW"); //$NON-NLS-1$
+                               break;
+
+                       case 44:
+                               style = style.setBackground("BLUE"); //$NON-NLS-1$
+                               break;
+
+                       case 45:
+                               style = style.setBackground("MAGENTA"); //$NON-NLS-1$
+                               break;
+
+                       case 46:
+                               style = style.setBackground("CYAN"); //$NON-NLS-1$
+                               break;
+
+                       case 47:
+                               style = style.setBackground("WHITE"); //$NON-NLS-1$
+                               break;
+
+                       case 49: //Background: Default
+                               style = style.setBackground(text.getDefaultStyle().getBackground());
+                               break;
+
+                       default:
+                               Logger
+                                               .log("Unsupported graphics rendition parameter: " + ansiParameter); //$NON-NLS-1$
+                               break;
+                       }
+
+                       ++parameterIndex;
+               }
+               text.setStyle(style);
+       }
+
+       /**
+        * This method responds to an ANSI Device Status Report (DSR) command from
+        * the remote endpoint requesting the ready status or the cursor position.
+        * Requests for other kinds of status are ignored.
+        */
+       private void processAnsiCommand_n() {
+               String reply;
+
+               if (getAnsiParameter(0) == 5) {
+                       // Report that the terminal is ready and has no malfunctions.
+                       reply = "\u001b[0n"; //$NON-NLS-1$
+
+               } else if (getAnsiParameter(0) == 6) {
+                       // Send the ANSI cursor position (which is 1-based) to the remote
+                       // endpoint.
+                       reply = "\u001b[" + (relativeCursorLine() + 1) + ";" + //$NON-NLS-1$ //$NON-NLS-2$
+                                       (getCursorColumn() + 1) + "R"; //$NON-NLS-1$
+
+               } else {
+                       // Do nothing if the numeric parameter was not 5 or 6.
+                       return;
+               }
+
+               try {
+                       terminal.getOutputStream().write(reply.getBytes("ISO-8859-1")); //$NON-NLS-1$
+                       terminal.getOutputStream().flush();
+               } catch (IOException ex) {
+                       Logger.log("Caught IOException!"); //$NON-NLS-1$
+               }
+       }
+
+       /**
+        * Deletes one or more characters starting at the current cursor position.
+        * Characters on the same line and to the right of the deleted characters
+        * move left. If there are no characters on the current line at or to the
+        * right of the cursor column, no text is deleted.
+        */
+       private void processAnsiCommand_P() {
+               text.deleteCharacters(getAnsiParameter(0));
+       }
+
+       /**
+        *  Set Scrolling Region [top;bottom] (default = full size of window) (DECSTBM).
+        */
+       private void processAnsiCommand_r() {
+               int top = 0;
+               int bottom = 0;
+               if (ansiParameters[0].length() > 0 && ansiParameters[1].length() > 0) {
+                       top = getAnsiParameter(0);
+                       bottom = getAnsiParameter(1);
+               }
+               text.setScrollRegion(top-1, bottom-1);
+       }
+       
+       /**
+        * Scroll up n lines (default = 1 line).
+        */
+       private void processAnsiCommand_S() {
+               text.scrollUp(getAnsiParameter(0));
+       }
+       
+       /**
+        * Scroll down n lines (default = 1 line).
+        */
+       private void processAnsiCommand_T() {
+               text.scrollDown(getAnsiParameter(0));
+       }
+       
+       private void processDecPrivateCommand_h() {
+               int param = getAnsiParameter(0);
+               switch (param) {
+               case 1:
+                       // Enable Application Cursor Keys (DECCKM)
+                       terminal.enableApplicationCursorKeys(true);
+                       break;
+               case 47:
+               case 1047:
+               case 1048:
+               case 1049:
+                       // Use Alternate Screen Buffer (ignored).
+                       break;
+               default:
+                       Logger.log("Unsupported command parameter: CSI ?" + param + 'h'); //$NON-NLS-1$
+                       break;
+               }
+       }
+
+       private void processDecPrivateCommand_l() {
+               int param = getAnsiParameter(0);
+               switch (param) {
+               case 1:
+                       // Enable Normal Cursor Keys (DECCKM)
+                       terminal.enableApplicationCursorKeys(false);
+                       break;
+               case 47:
+               case 1047:
+               case 1048:
+               case 1049:
+                       // Use Normal Screen Buffer (ignored, but reset scroll region).
+                       text.setScrollRegion(-1, -1);
+                       break;
+               default:
+                       Logger.log("Unsupported command parameter: CSI ?" + param + 'l'); //$NON-NLS-1$
+                       break;
+               }
+       }
+       
+       /**
+        * This method returns one of the numeric ANSI parameters received in the
+        * most recent escape sequence.
+        *
+        * @return The <i>parameterIndex</i>th numeric ANSI parameter or -1 if the
+        *         index is out of range.
+        */
+       private int getAnsiParameter(int parameterIndex) {
+               if (parameterIndex < 0 || parameterIndex >= ansiParameters.length) {
+                       // This should never happen.
+                       return -1;
+               }
+
+               String parameter = ansiParameters[parameterIndex].toString();
+
+               if (parameter.length() == 0)
+                       return 1;
+
+               int parameterValue = 1;
+
+               // Don't trust the remote endpoint to send well formed numeric
+               // parameters.
+
+               try {
+                       parameterValue = Integer.parseInt(parameter);
+               } catch (NumberFormatException ex) {
+                       parameterValue = 1;
+               }
+
+               return parameterValue;
+       }
+
+       /**
+        * This method processes a single parameter character in an ANSI escape
+        * sequence. Parameters are the (optional) characters between the leading
+        * "\e[" and the command character in an escape sequence (e.g., in the
+        * escape sequence "\e[20;10H", the parameter characters are "20;10").
+        * Parameters are integers separated by one or more ';'s.
+        */
+       private void processAnsiParameterCharacter(char ch) {
+               if (ch == ';') {
+                       ++nextAnsiParameter;
+               } else {
+                       if (nextAnsiParameter < ansiParameters.length)
+                               ansiParameters[nextAnsiParameter].append(ch);
+               }
+       }
+       /**
+        * This method processes a contiguous sequence of non-control characters.
+        * This is a performance optimization, so that we don't have to insert or
+        * append each non-control character individually to the StyledText widget.
+        * A non-control character is any character that passes the condition in the
+        * below while loop.
+        * @throws IOException
+        */
+       private void processNonControlCharacters(char character) throws IOException {
+               StringBuffer buffer=new StringBuffer();
+               buffer.append(character);
+               // Identify a contiguous sequence of non-control characters, starting at
+               // firstNonControlCharacterIndex in newText.
+               while(hasNextChar()) {
+                       character=getNextChar();
+                       if(character == '\u0000' || character == '\b' || character == '\t'
+                               || character == '\u0007' || character == '\n'
+                               || character == '\r' || character == '\u001b') {
+                               pushBackChar(character);
+                               break;
+                       }
+                       buffer.append(character);
+               }
+
+               // Now insert the sequence of non-control characters in the StyledText widget
+               // at the location of the cursor.
+
+               displayNewText(buffer.toString());
+       }
+
+       /**
+        * This method displays a subset of the newly-received text in the Terminal
+        * view, wrapping text at the right edge of the screen and overwriting text
+        * when the cursor is not at the very end of the screen's text.
+        * <p>
+        *
+        * There are never any ANSI control characters or escape sequences in the
+        * text being displayed by this method (this includes newlines, carriage
+        * returns, and tabs).
+        * <p>
+        */
+       private void displayNewText(String buffer) {
+               text.appendString(buffer);
+       }
+
+
+       /**
+        * Process a BEL (Control-G) character.
+        */
+       private void processBEL() {
+               // TODO
+               //Display.getDefault().beep();
+       }
+
+       /**
+        * Process a backspace (Control-H) character.
+        */
+       private void processBackspace() {
+               moveCursorBackward(1);
+       }
+
+       /**
+        * Process a tab (Control-I) character. We don't insert a tab character into
+        * the StyledText widget. Instead, we move the cursor forward to the next
+        * tab stop, without altering any of the text. Tab stops are every 8
+        * columns. The cursor will never move past the rightmost column.
+        */
+       private void processTab() {
+               moveCursorForward(8 - (getCursorColumn() % 8));
+       }
+
+       /**
+        * Process a newline (Control-J) character. A newline (NL) character just
+        * moves the cursor to the same column on the next line, creating new lines
+        * when the cursor reaches the bottom edge of the terminal. This is
+        * counter-intuitive, especially to UNIX programmers who are taught that
+        * writing a single NL to a terminal is sufficient to move the cursor to the
+        * first column of the next line, as if a carriage return (CR) and a NL were
+        * written.
+        * <p>
+        *
+        * UNIX terminals typically display a NL character as a CR followed by a NL
+        * because the terminal device typically has the ONLCR attribute bit set
+        * (see the termios(4) man page for details), which causes the terminal
+        * device driver to translate NL to CR + NL on output. The terminal itself
+        * (i.e., a hardware terminal or a terminal emulator, like xterm or this
+        * code) _always_ interprets a CR to mean "move the cursor to the beginning
+        * of the current line" and a NL to mean "move the cursor to the same column
+        * on the next line".
+        * <p>
+        */
+       private void processNewline() {
+               text.processNewline();
+       }
+
+       /**
+        * Process a Carriage Return (Control-M).
+        */
+       private void processCarriageReturn() {
+               text.setCursorColumn(0);
+       }
+
+       /**
+        * This method computes the width of the terminal in columns and its height
+        * in lines, then adjusts the width and height of the view's StyledText
+        * widget so that it displays an integral number of lines and columns of
+        * text. The adjustment is always to shrink the widget vertically or
+        * horizontally, because if the control were to grow, it would be clipped by
+        * the edges of the view window (i.e., the view window does not become
+        * larger to accommodate its contents becoming larger).
+        * <p>
+        *
+        * This method must be called immediately before each time text is written
+        * to the terminal so that we can properly line wrap text. Because it is
+        * called so frequently, it must be fast when there is no resizing to be
+        * done.
+        * <p>
+        */
+       private void adjustTerminalDimensions() {
+               // Compute how many pixels we need to shrink the StyledText control vertically
+               // to make it display an integral number of lines of text.
+
+               // TODO
+//             if(text.getColumns()!=80 && text.getLines()!=80)
+//                     text.setDimensions(24, 80);
+               // If we are in a TELNET connection and we know the dimensions of the terminal,
+               // we give the size information to the TELNET connection object so it can
+               // communicate it to the TELNET server. If we are in a serial connection,
+               // there is nothing we can do to tell the remote host about the size of the
+               // terminal.
+               ITerminalConnector telnetConnection = getConnector();
+               // TODO MSA: send only if dimensions have really changed!
+               if (telnetConnection != null) {
+                       telnetConnection.setTerminalSize(text.getColumns(), text.getLines());
+               }
+
+       }
+
+       private ITerminalConnector getConnector() {
+               if(terminal.getTerminalConnector()!=null)
+                       return terminal.getTerminalConnector();
+               return null;
+       }
+
+       /**
+        * This method returns the relative line number of the line containing the
+        * cursor. The returned line number is relative to the topmost visible line,
+        * which has relative line number 0.
+        *
+        * @return The relative line number of the line containing the cursor.
+        */
+       private int relativeCursorLine() {
+               return text.getCursorLine();
+       }
+
+       /**
+        * This method moves the cursor to the specified line and column. Parameter
+        * <i>targetLine</i> is the line number of a screen line, so it has a
+        * minimum value of 0 (the topmost screen line) and a maximum value of
+        * heightInLines - 1 (the bottommost screen line). A line does not have to
+        * contain any text to move the cursor to any column in that line.
+        */
+       private void moveCursor(int targetLine, int targetColumn) {
+               text.setCursor(targetLine,targetColumn);
+       }
+
+       /**
+        * This method moves the cursor down <i>lines</i> lines, but won't move the
+        * cursor past the bottom of the screen. This method does not cause any
+        * scrolling.
+        */
+       private void moveCursorDown(int lines) {
+               moveCursor(relativeCursorLine() + lines, getCursorColumn());
+       }
+
+       /**
+        * This method moves the cursor up <i>lines</i> lines, but won't move the
+        * cursor past the top of the screen. This method does not cause any
+        * scrolling.
+        */
+       private void moveCursorUp(int lines) {
+               moveCursor(relativeCursorLine() - lines, getCursorColumn());
+       }
+
+       /**
+        * This method moves the cursor forward <i>columns</i> columns, but won't
+        * move the cursor past the right edge of the screen, nor will it move the
+        * cursor onto the next line. This method does not cause any scrolling.
+        */
+       private void moveCursorForward(int columnsToMove) {
+               moveCursor(relativeCursorLine(), getCursorColumn() + columnsToMove);
+       }
+
+       /**
+        * This method moves the cursor backward <i>columnsToMove</i> columns, but
+        * won't move the cursor past the left edge of the screen, nor will it move
+        * the cursor onto the previous line. This method does not cause any
+        * scrolling.
+        */
+       private void moveCursorBackward(int columnsToMove) {
+               moveCursor(relativeCursorLine(), getCursorColumn() - columnsToMove);
+       }
+       /**
+        * Resets the state of the terminal text (foreground color, background color,
+        * font style and other internal state). It essentially makes it ready for new input.
+        */
+       public void resetState() {
+               ansiState=ANSISTATE_INITIAL;
+               text.setStyle(text.getDefaultStyle());
+               text.setScrollRegion(-1, -1);
+               text.setInsertMode(false);
+       }
+
+//     public OutputStream getOutputStream() {
+//             return fTerminalInputStream.getOutputStream();
+//     }
+
+       /**
+        * Buffer for {@link #pushBackChar(char)}.
+        */
+       private int fNextChar=-1;
+
+       private char getNextChar() throws IOException {
+               int c=-1;
+               if(fNextChar!=-1) {
+                       c= fNextChar;
+                       fNextChar=-1;
+               } else {
+                       c = fReader.read();
+               }
+               // TODO: better end of file handling
+               if(c==-1)
+                       c=0;
+               return (char)c;
+       }
+
+       private boolean hasNextChar() throws IOException  {
+               if(fNextChar>=0)
+                       return true;
+               return fReader.ready();
+       }
+
+       /**
+        * Put back one character to the stream. This method can push
+        * back exactly one character. The character is the next character
+        * returned by {@link #getNextChar}
+        * @param c the character to be pushed back.
+        */
+       void pushBackChar(char c) {
+               //assert fNextChar!=-1: "Already a character waiting:"+fNextChar; //$NON-NLS-1$
+               fNextChar=c;
+       }
+       private int getCursorColumn() {
+               return text.getCursorColumn();
+       }
+       public boolean isCrAfterNewLine() {
+               return fCrAfterNewLine;
+       }
+       public void setCrAfterNewLine(boolean crAfterNewLine) {
+               fCrAfterNewLine = crAfterNewLine;
+       }
+       void setVT100LineWrapping(boolean enable) {
+               text.setVT100LineWrapping(enable);
+       }
+       boolean isVT100LineWrapping() {
+               return text.isVT100LineWrapping();
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackend.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackend.java
new file mode 100644 (file)
index 0000000..36140d6
--- /dev/null
@@ -0,0 +1,494 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [206329] Changing terminal size right after connect does not scroll properly
+ * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
+ * Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode
+ * Anton Leherbauer (Wind River) - [458402] Add support for scroll up/down and scroll region
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.emulator;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.Style;
+
+/**
+ *
+ */
+public class VT100EmulatorBackend implements IVT100EmulatorBackend {
+
+       private static class ScrollRegion {
+               static final ScrollRegion FULL_WINDOW = new ScrollRegion(0, Integer.MAX_VALUE-1);
+               private final int fTop;
+               private final int fBottom;
+               ScrollRegion(int top, int bottom) {
+                       fTop = top;
+                       fBottom = bottom;
+               }
+               boolean contains(int line) {
+                       return line >= fTop && line <= fBottom;
+               }
+               int getTopLine() {
+                       return fTop;
+               }
+               int getBottomLine() {
+                       return fBottom;
+               }
+               int getHeight() {
+                       return fBottom - fTop + 1;
+               }
+       }
+
+       /**
+        * This field holds the number of the column in which the cursor is
+        * logically positioned. The leftmost column on the screen is column 0, and
+        * column numbers increase to the right. The maximum value of this field is
+        * {@link #widthInColumns} - 1. We track the cursor column using this field
+        * to avoid having to recompute it repeatly using StyledText method calls.
+        * <p>
+        * 
+        * The StyledText widget that displays text has a vertical bar (called the
+        * "caret") that appears _between_ character cells, but ANSI terminals have
+        * the concept of a cursor that appears _in_ a character cell, so we need a
+        * convention for which character cell the cursor logically occupies when
+        * the caret is physically between two cells. The convention used in this
+        * class is that the cursor is logically in column N when the caret is
+        * physically positioned immediately to the _left_ of column N.
+        * <p>
+        * 
+        * When fCursorColumn is N, the next character output to the terminal appears
+        * in column N. When a character is output to the rightmost column on a
+        * given line (column widthInColumns - 1), the cursor moves to column 0 on
+        * the next line after the character is drawn (this is the default line wrapping
+        * mode). If VT100 line wrapping mode is enabled, the cursor does not move
+        * to the next line until the next character is printed (this is known as 
+        * the VT100 'eat_newline_glitch').
+        * If the cursor is in the bottommost line when line wrapping
+        * occurs, the topmost visible line is scrolled off the top edge of the
+        * screen.
+        * <p>
+        */
+       private int fCursorColumn;
+       private int fCursorLine;
+       /* true if last output occurred on rightmost column 
+        * and next output requires line wrap */
+       private boolean fWrapPending;
+       private boolean fInsertMode;
+       private Style fDefaultStyle;
+       private Style fStyle;
+       int fLines;
+       int fColumns;
+       final private ITerminalTextData fTerminal;
+       private boolean fVT100LineWrapping;
+       private ScrollRegion fScrollRegion = ScrollRegion.FULL_WINDOW;
+
+       public VT100EmulatorBackend(ITerminalTextData terminal) {
+               fTerminal=terminal;
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#clearAll()
+        */
+       public void clearAll() {
+               synchronized (fTerminal) {
+                       // clear the history
+                       int n=fTerminal.getHeight();
+                       for (int line = 0; line < n; line++) {
+                               fTerminal.cleanLine(line);
+                       }
+                       fTerminal.setDimensions(fLines, fTerminal.getWidth());
+                       setStyle(getDefaultStyle());
+                       setCursor(0, 0);
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#setDimensions(int, int)
+        */
+       public void setDimensions(int lines, int cols) {
+               synchronized (fTerminal) {
+                       if(lines==fLines && cols==fColumns)
+                               return; // nothing to do
+                       // relative cursor line
+                       int cl=getCursorLine();
+                       int cc=getCursorColumn();
+                       int height=fTerminal.getHeight();
+                       // absolute cursor line
+                       int acl=cl+height-fLines;
+                       int newLines=Math.max(lines,height);
+                       if(lines<fLines) {
+                               if(height==fLines) {
+                                       // if the terminal has no history, then resize by
+                                       // setting the size to the new size
+                                       // TODO We are assuming that cursor line points at end of text
+                                       newLines=Math.max(lines, cl+1);
+                               }
+                       }
+                       fLines=lines;
+                       fColumns=cols;
+                       // make the terminal at least as high as we need lines
+                       fTerminal.setDimensions(newLines, fColumns);
+                       // compute relative cursor line
+                       cl=acl-(newLines-fLines);
+                       setCursor(cl, cc);
+               }
+       }
+       
+       int toAbsoluteLine(int line) {
+               synchronized (fTerminal) {
+                       return fTerminal.getHeight()-fLines+line;
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#insertCharacters(int)
+        */
+       public void insertCharacters(int charactersToInsert) {
+               synchronized (fTerminal) {
+                       int line=toAbsoluteLine(fCursorLine);
+                       int n=charactersToInsert;
+                       for (int col = fColumns-1; col >=fCursorColumn+n; col--) {
+                               char c=fTerminal.getChar(line, col-n);
+                               Style style=fTerminal.getStyle(line, col-n);
+                               fTerminal.setChar(line, col,c, style);
+                       }
+                       int last=Math.min(fCursorColumn+n, fColumns);
+                       for (int col = fCursorColumn; col <last; col++) {
+                               fTerminal.setChar(line, col,'\000', null);
+                       }
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#eraseToEndOfScreen()
+        */
+       public void eraseToEndOfScreen() {
+               synchronized (fTerminal) {
+                       eraseLineToEnd();
+                       for (int line = toAbsoluteLine(fCursorLine+1); line < toAbsoluteLine(fLines); line++) {
+                               fTerminal.cleanLine(line);
+                       }
+               }
+               
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#eraseToCursor()
+        */
+       public void eraseToCursor() {
+               synchronized (fTerminal) {
+                       for (int line = toAbsoluteLine(0); line < toAbsoluteLine(fCursorLine); line++) {
+                               fTerminal.cleanLine(line);
+                       }
+                       eraseLineToCursor();
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#eraseAll()
+        */
+       public void eraseAll() {
+               synchronized (fTerminal) {
+                       for (int line = toAbsoluteLine(0); line < toAbsoluteLine(fLines); line++) {
+                               fTerminal.cleanLine(line);
+                       }
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#eraseLine()
+        */
+       public void eraseLine() {
+               synchronized (fTerminal) {
+                       fTerminal.cleanLine(toAbsoluteLine(fCursorLine));
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#eraseLineToEnd()
+        */
+       public void eraseLineToEnd() {
+               synchronized (fTerminal) {
+                       int line=toAbsoluteLine(fCursorLine);
+                       for (int col = fCursorColumn; col < fColumns; col++) {
+                               fTerminal.setChar(line, col, '\000', null);
+                       }
+               }
+       }       
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#eraseLineToCursor()
+        */
+       public void eraseLineToCursor() {
+               synchronized (fTerminal) {
+                       int line=toAbsoluteLine(fCursorLine);
+                       for (int col = 0; col <= fCursorColumn; col++) {
+                               fTerminal.setChar(line, col, '\000', null);
+                       }
+               }
+       }       
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#insertLines(int)
+        */
+       public void insertLines(int n) {
+               synchronized (fTerminal) {
+                       if(!isCusorInScrollingRegion())
+                               return;
+                       assert n>0;
+                       int line=toAbsoluteLine(fCursorLine);
+                       int nLines=Math.min(fTerminal.getHeight()-line, fScrollRegion.getBottomLine()-fCursorLine+1);
+                       fTerminal.scroll(line, nLines, n);
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#deleteCharacters(int)
+        */
+       public void deleteCharacters(int n) {
+               synchronized (fTerminal) {
+                       int line=toAbsoluteLine(fCursorLine);
+                       for (int col = fCursorColumn+n; col < fColumns; col++) {
+                               char c=fTerminal.getChar(line, col);
+                               Style style=fTerminal.getStyle(line, col);
+                               fTerminal.setChar(line, col-n,c, style);
+                       }
+                       int first=Math.max(fCursorColumn, fColumns-n);
+                       for (int col = first; col <fColumns; col++) {
+                               fTerminal.setChar(line, col,'\000', null);
+                       }
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#deleteLines(int)
+        */
+       public void deleteLines(int n) {
+               synchronized (fTerminal) {
+                       if(!isCusorInScrollingRegion())
+                               return;
+                       assert n>0;
+                       int line=toAbsoluteLine(fCursorLine);
+                       int nLines=Math.min(fTerminal.getHeight()-line, fScrollRegion.getBottomLine()-fCursorLine+1);
+                       fTerminal.scroll(line, nLines, -n);
+               }
+       }
+       private boolean isCusorInScrollingRegion() {
+               return fScrollRegion.contains(fCursorLine);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#getDefaultStyle()
+        */
+       public Style getDefaultStyle() {
+               synchronized (fTerminal) {
+                       return fDefaultStyle;
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#setDefaultStyle(org.eclipse.tm.terminal.model.Style)
+        */
+       public void setDefaultStyle(Style defaultStyle) {
+               synchronized (fTerminal) {
+                       fDefaultStyle = defaultStyle;
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#getStyle()
+        */
+       public Style getStyle() {
+               synchronized (fTerminal) {
+                       if(fStyle==null)
+                               return fDefaultStyle;
+                       return fStyle;
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#setStyle(org.eclipse.tm.terminal.model.Style)
+        */
+       public void setStyle(Style style) {
+               synchronized (fTerminal) {
+                       fStyle=style;
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#appendString(java.lang.String)
+        */
+       public void appendString(String buffer) {
+               synchronized (fTerminal) {
+                       char[] chars=buffer.toCharArray();
+                       if (fInsertMode)
+                               insertCharacters(chars.length);
+                       int line=toAbsoluteLine(fCursorLine);
+                       int i=0;
+                       while (i < chars.length) {
+                               if(fWrapPending) {
+                                       line = doLineWrap();
+                               }
+                               int n=Math.min(fColumns-fCursorColumn,chars.length-i);
+                               fTerminal.setChars(line, fCursorColumn, chars, i, n, fStyle);
+                               int col=fCursorColumn+n;
+                               i+=n;
+                               // wrap needed?
+                               if(col == fColumns) {
+                                       if (fVT100LineWrapping) {
+                                               // deferred line wrapping (eat_newline_glitch)
+                                               setCursorColumn(col - 1);
+                                               fWrapPending = true;
+                                       } else {
+                                               line = doLineWrap();
+                                       }
+                               } else {
+                                       setCursorColumn(col);
+                               }
+                       }
+               }
+       }
+
+       private int doLineWrap() {
+               int line;
+               line=toAbsoluteLine(fCursorLine);
+               fTerminal.setWrappedLine(line);
+               doNewline();
+               line=toAbsoluteLine(fCursorLine);
+               setCursorColumn(0);
+               return line;
+       }
+
+       /**
+        * MUST be called from a synchronized block!
+        */
+       private void doNewline() {
+               if (fCursorLine == fScrollRegion.getBottomLine())
+                       scrollUp(1);
+               else if (fCursorLine+1>=fLines) {
+                       int h=fTerminal.getHeight();
+                       fTerminal.addLine();
+                       if(h!=fTerminal.getHeight())
+                               setCursorLine(fCursorLine+1);
+               } else {
+                       setCursorLine(fCursorLine+1);
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#processNewline()
+        */
+       public void processNewline() {
+               synchronized (fTerminal) {
+                       doNewline();
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#getCursorLine()
+        */
+       public int getCursorLine() {
+               synchronized (fTerminal) {
+                       return fCursorLine;
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#getCursorColumn()
+        */
+       public int getCursorColumn() {
+               synchronized (fTerminal) {
+                       return fCursorColumn;
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#setCursor(int, int)
+        */
+       public void setCursor(int targetLine, int targetColumn) {
+               synchronized (fTerminal) {
+                       setCursorLine(targetLine);
+                       setCursorColumn(targetColumn);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#setCursorColumn(int)
+        */
+       public void setCursorColumn(int targetColumn) {
+               synchronized (fTerminal) {
+                       if(targetColumn<0)
+                               targetColumn=0;
+                       else if(targetColumn>=fColumns)
+                               targetColumn=fColumns-1;
+                       fCursorColumn=targetColumn;
+                       fWrapPending = false;
+                       // We make the assumption that nobody is changing the
+                       // terminal cursor except this class!
+                       // This assumption gives a huge performance improvement
+                       fTerminal.setCursorColumn(targetColumn);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#setCursorLine(int)
+        */
+       public void setCursorLine(int targetLine) {
+               synchronized (fTerminal) {
+                       if(targetLine<0)
+                               targetLine=0;
+                       else if(targetLine>=fLines)
+                               targetLine=fLines-1;
+                       fCursorLine=targetLine;
+                       // We make the assumption that nobody is changing the
+                       // terminal cursor except this class!
+                       // This assumption gives a huge performance improvement
+                       fTerminal.setCursorLine(toAbsoluteLine(targetLine));
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#getLines()
+        */
+       public int getLines() {
+               synchronized (fTerminal) {
+                       return fLines;
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.emulator.IVT100EmulatorBackend#getColumns()
+        */
+       public int getColumns() {
+               synchronized (fTerminal) {
+                       return fColumns;
+               }
+       }
+
+       public void setVT100LineWrapping(boolean enable) {
+               fVT100LineWrapping = enable;
+       }
+
+       public boolean isVT100LineWrapping() {
+               return fVT100LineWrapping;
+       }
+       
+       public void setInsertMode(boolean enable) {
+               fInsertMode = enable;
+       }
+
+       public void setScrollRegion(int top, int bottom) {
+               if (top < 0 || bottom < 0)
+                       fScrollRegion  = ScrollRegion.FULL_WINDOW;
+               else if (top < bottom)
+                       fScrollRegion = new ScrollRegion(top, bottom);
+       }
+
+       public void scrollUp(int n) {
+               assert n>0;
+               synchronized (fTerminal) {
+                       int line = toAbsoluteLine(fScrollRegion.getTopLine());
+                       int nLines = Math.min(fTerminal.getHeight()-line, fScrollRegion.getHeight());
+                       fTerminal.scroll(line, nLines, -n);
+               }
+       }
+
+       public void scrollDown(int n) {
+               assert n>0;
+               synchronized (fTerminal) {
+                       int line = toAbsoluteLine(fScrollRegion.getTopLine());
+                       int nLines = Math.min(fTerminal.getHeight()-line, fScrollRegion.getHeight());
+                       fTerminal.scroll(line, nLines, n);
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
new file mode 100644 (file)
index 0000000..b5d62b5
--- /dev/null
@@ -0,0 +1,1414 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [206892] State handling: Only allow connect when CLOSED
+ * Martin Oberhuber (Wind River) - [206883] Serial Terminal leaks Jobs
+ * Martin Oberhuber (Wind River) - [208145] Terminal prints garbage after quick disconnect/reconnect
+ * Martin Oberhuber (Wind River) - [207785] NPE when trying to send char while no longer connected
+ * Michael Scharf (Wind River) - [209665] Add ability to log byte streams from terminal
+ * Ruslan Sychev (Xored Software) - [217675] NPE or SWTException when closing Terminal View while connection establishing
+ * Michael Scharf (Wing River) - [196447] The optional terminal input line should be resizeable
+ * Martin Oberhuber (Wind River) - [168197] Replace JFace MessagDialog by SWT MessageBox
+ * Martin Oberhuber (Wind River) - [204796] Terminal should allow setting the encoding to use
+ * Michael Scharf (Wind River) - [237398] Terminal get Invalid Thread Access when the title is set
+ * Martin Oberhuber (Wind River) - [240745] Pressing Ctrl+F1 in the Terminal should bring up context help
+ * Michael Scharf (Wind River) - [240098] The cursor should not blink when the terminal is disconnected
+ * Anton Leherbauer (Wind River) - [335021] Middle mouse button copy/paste does not work with the terminal
+ * Max Stepanov (Appcelerator) - [339768] Fix ANSI code for PgUp / PgDn
+ * Pawel Piech (Wind River) - [333613] "Job found still running" after shutdown
+ * Martin Oberhuber (Wind River) - [348700] Terminal unusable after disconnect
+ * Simon Bernard (Sierra Wireless) - [351424] [terminal] Terminal does not support del and insert key
+ * Martin Oberhuber (Wind River) - [265352][api] Allow setting fonts programmatically
+ * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
+ * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
+ * Anton Leherbauer (Wind River) - [434294] Incorrect handling of function keys with modifiers
+ * Martin Oberhuber (Wind River) - [434294] Add Mac bindings with COMMAND
+ * Anton Leherbauer (Wind River) - [434749] UnhandledEventLoopException when copying to clipboard while the selection is empty
+ * Martin Oberhuber (Wind River) - [436612] Restore Eclipse 3.4 compatibility by using Reflection
+ * Anton Leherbauer (Wind River) - [458398] Add support for normal/application cursor keys mode
+ * Anton Leherbauer (Wind River) - [420928] Terminal widget leaks memory
+ * Davy Landman (CWI) - [475267][api] Allow custom mouse listeners
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.emulator;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Field;
+import java.net.SocketException;
+import java.nio.charset.Charset;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.bindings.Binding;
+import org.eclipse.jface.bindings.keys.KeySequence;
+import org.eclipse.jface.bindings.keys.KeyStroke;
+import org.eclipse.jface.bindings.keys.SWTKeySupport;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.tm.internal.terminal.control.ICommandInputField;
+import org.eclipse.tm.internal.terminal.control.ITerminalListener;
+import org.eclipse.tm.internal.terminal.control.ITerminalListener2;
+import org.eclipse.tm.internal.terminal.control.ITerminalMouseListener;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.control.impl.ITerminalControlForText;
+import org.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
+import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
+import org.eclipse.tm.internal.terminal.preferences.ITerminalConstants;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.internal.terminal.textcanvas.PipedInputStream;
+import org.eclipse.tm.internal.terminal.textcanvas.PollingTextCanvasModel;
+import org.eclipse.tm.internal.terminal.textcanvas.TextCanvas;
+import org.eclipse.tm.internal.terminal.textcanvas.TextLineRenderer;
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+import org.eclipse.tm.terminal.model.TerminalTextDataFactory;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.contexts.IContextActivation;
+import org.eclipse.ui.contexts.IContextService;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.keys.IBindingService;
+
+/**
+ *
+ * This class was originally written to use nested classes, which unfortunately makes
+ * this source file larger and more complex than it needs to be.  In particular, the
+ * methods in the nested classes directly access the fields of the enclosing class.
+ * One day we should pull the nested classes out into their own source files (but still
+ * in this package).
+ *
+ * @author Chris Thew <chris.thew@windriver.com>
+ */
+public class VT100TerminalControl implements ITerminalControlForText, ITerminalControl, ITerminalViewControl
+{
+    protected final static String[] LINE_DELIMITERS = { "\n" }; //$NON-NLS-1$
+
+    /**
+     * This field holds a reference to a TerminalText object that performs all ANSI
+     * text processing on data received from the remote host and controls how text is
+     * displayed using the view's StyledText widget.
+     */
+    private final VT100Emulator                          fTerminalText;
+    private Display                   fDisplay;
+    private TextCanvas                fCtlText;
+    private Composite                 fWndParent;
+    private Clipboard                 fClipboard;
+    private KeyListener               fKeyHandler;
+    private final ITerminalListener   fTerminalListener;
+    private String                    fMsg = ""; //$NON-NLS-1$
+    private TerminalFocusListener     fFocusListener;
+    private ITerminalConnector           fConnector;
+    private final ITerminalConnector[]      fConnectors;
+       private final boolean fUseCommonPrefs;
+       private boolean connectOnEnterIfClosed  = true;
+
+    PipedInputStream fInputStream;
+       private static final String defaultEncoding = Charset.defaultCharset().name();
+       private String fEncoding = defaultEncoding;
+       private InputStreamReader fInputStreamReader;
+
+       private ICommandInputField fCommandInputField;
+
+       private volatile TerminalState fState;
+
+       private final ITerminalTextData fTerminalModel;
+
+       private final EditActionAccelerators editActionAccelerators = new EditActionAccelerators();
+
+       private boolean fApplicationCursorKeys;
+
+       /**
+        * Listens to changes in the preferences
+        */
+       private final IPropertyChangeListener fPreferenceListener=new IPropertyChangeListener() {
+               @Override
+        public void propertyChange(PropertyChangeEvent event) {
+                       if(event.getProperty().equals(ITerminalConstants.PREF_BUFFERLINES)
+                                       || event.getProperty().equals(ITerminalConstants.PREF_INVERT_COLORS)) {
+                               updatePreferences();
+                       }
+               }
+       };
+       private final IPropertyChangeListener fFontListener = new IPropertyChangeListener() {
+               @Override
+        public void propertyChange(PropertyChangeEvent event) {
+                       if (event.getProperty().equals(ITerminalConstants.FONT_DEFINITION)) {
+                               onTerminalFontChanged();
+                       }
+               }
+       };
+
+       /**
+        * Is protected by synchronize on this
+        */
+       volatile private Job fJob;
+
+       private PollingTextCanvasModel fPollingTextCanvasModel;
+
+       public VT100TerminalControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors) {
+               this(target, wndParent, connectors, false);
+       }
+
+       /**
+        * Instantiate a Terminal widget.
+        * @param target Callback for notifying the owner of Terminal state changes.
+        * @param wndParent The Window parent to embed the Terminal in.
+        * @param connectors Provided connectors.
+        * @param useCommonPrefs If <code>true</code>, the Terminal widget will pick up settings
+        *    from the <code>org.eclipse.tm.terminal.TerminalPreferencePage</code> Preference page.
+        *    Otherwise, clients need to maintain settings themselves.
+        * @since 3.2
+        */
+       public VT100TerminalControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors, boolean useCommonPrefs) {
+               fConnectors=connectors;
+               fUseCommonPrefs = useCommonPrefs;
+               fTerminalListener=target;
+               fTerminalModel=TerminalTextDataFactory.makeTerminalTextData();
+               fTerminalModel.setMaxHeight(1000);
+               fInputStream=new PipedInputStream(8*1024);
+               fTerminalText = new VT100Emulator(fTerminalModel, this, null);
+               try {
+                       // Use Default Encoding as start, until setEncoding() is called
+                       setEncoding(null);
+               } catch (UnsupportedEncodingException e) {
+                       // Should never happen
+                       e.printStackTrace();
+                       // Fall back to local Platform Default Encoding
+                       fEncoding = defaultEncoding;
+                       fInputStreamReader = new InputStreamReader(fInputStream);
+                       fTerminalText.setInputStreamReader(fInputStreamReader);
+               }
+
+               setupTerminal(wndParent);
+       }
+
+       @Override
+    public void setEncoding(String encoding) throws UnsupportedEncodingException {
+               if (encoding == null) {
+                       // TODO better use a standard remote-to-local encoding?
+                       encoding = "ISO-8859-1"; //$NON-NLS-1$
+                       // TODO or better use the local default encoding?
+                       // encoding = defaultEncoding;
+               }
+               fInputStreamReader = new InputStreamReader(fInputStream, encoding);
+               // remember encoding if above didn't throw an exception
+               fEncoding = encoding;
+               fTerminalText.setInputStreamReader(fInputStreamReader);
+       }
+
+       @Override
+    public String getEncoding() {
+               return fEncoding;
+       }
+
+       @Override
+    public ITerminalConnector[] getConnectors() {
+               return fConnectors;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#copy()
+        */
+       @Override
+    public void copy() {
+               copy(DND.CLIPBOARD);
+       }
+
+       private void copy(int clipboardType) {
+               String selection = getSelection();
+               if (selection.length() > 0) {
+                       Object[] data = new Object[] { selection };
+                       Transfer[] types = new Transfer[] { TextTransfer.getInstance() };
+                       fClipboard.setContents(data, types, clipboardType);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#paste()
+        */
+       @Override
+    public void paste() {
+               paste(DND.CLIPBOARD);
+// TODO paste in another thread.... to avoid blocking
+//             new Thread() {
+//                     public void run() {
+//                             for (int i = 0; i < strText.length(); i++) {
+//                                     sendChar(strText.charAt(i), false);
+//                             }
+//
+//                     }
+//             }.start();
+       }
+
+       private void paste(int clipboardType) {
+               TextTransfer textTransfer = TextTransfer.getInstance();
+               String strText = (String) fClipboard.getContents(textTransfer, clipboardType);
+               pasteString(strText);
+       }
+
+       /**
+        * @param strText the text to paste
+        */
+       @Override
+    public boolean pasteString(String strText) {
+               if(!isConnected())
+                       return false;
+               if (strText == null)
+                       return false;
+               if (!fEncoding.equals(defaultEncoding)) {
+                       sendString(strText);
+               } else {
+                       // TODO I do not understand why pasteString would do this here...
+                       for (int i = 0; i < strText.length(); i++) {
+                               sendChar(strText.charAt(i), false);
+                       }
+               }
+               return true;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#selectAll()
+        */
+       @Override
+    public void selectAll() {
+               getCtlText().selectAll();
+               if (fTerminalListener instanceof ITerminalListener2) {
+                       ((ITerminalListener2)fTerminalListener).setTerminalSelectionChanged();
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#sendKey(char)
+        */
+       @Override
+    public void sendKey(char character) {
+               Event event;
+               KeyEvent keyEvent;
+
+               event = new Event();
+               event.widget = getCtlText();
+               event.character = character;
+               event.keyCode = 0;
+               event.stateMask = 0;
+               event.doit = true;
+               keyEvent = new KeyEvent(event);
+
+               fKeyHandler.keyPressed(keyEvent);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#clearTerminal()
+        */
+       @Override
+    public void clearTerminal() {
+               // The TerminalText object does all text manipulation.
+               getTerminalText().clearTerminal();
+               getCtlText().clearSelection();
+               if (fTerminalListener instanceof ITerminalListener2) {
+                       ((ITerminalListener2)fTerminalListener).setTerminalSelectionChanged();
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#getClipboard()
+        */
+       @Override
+    public Clipboard getClipboard() {
+               return fClipboard;
+       }
+
+       /**
+        * @return non null selection
+        */
+       @Override
+    public String getSelection() {
+               String txt= fCtlText.getSelectionText();
+               if(txt==null)
+                       txt=""; //$NON-NLS-1$
+               return txt;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#setFocus()
+        */
+       @Override
+    public void setFocus() {
+               getCtlText().setFocus();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#isEmpty()
+        */
+       @Override
+    public boolean isEmpty() {
+               return getCtlText().isEmpty();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#isDisposed()
+        */
+       @Override
+    public boolean isDisposed() {
+               return getCtlText().isDisposed();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#isConnected()
+        */
+       @Override
+    public boolean isConnected() {
+               return fState==TerminalState.CONNECTED;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#disposeTerminal()
+        */
+       @Override
+    public void disposeTerminal() {
+               Logger.log("entered."); //$NON-NLS-1$
+               if(fUseCommonPrefs) {
+                       TerminalPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPreferenceListener);
+                       JFaceResources.getFontRegistry().removeListener(fFontListener);
+               }
+               disconnectTerminal();
+               fClipboard.dispose();
+               getTerminalText().dispose();
+       }
+
+       @Override
+    public void connectTerminal() {
+               Logger.log("entered."); //$NON-NLS-1$
+               if(getTerminalConnector()==null)
+                       return;
+               fTerminalText.resetState();
+               fApplicationCursorKeys = false;
+               if(fConnector.getInitializationErrorMessage()!=null) {
+                       showErrorMessage(NLS.bind(
+                                       TerminalMessages.CannotConnectTo,
+                                       fConnector.getName(),
+                                       fConnector.getInitializationErrorMessage()));
+                       // we cannot connect because the connector was not initialized
+                       return;
+               }
+               // clean the error message
+               setMsg(""); //$NON-NLS-1$
+               getTerminalConnector().connect(this);
+               waitForConnect();
+       }
+
+       @Override
+    public ITerminalConnector getTerminalConnector() {
+               return fConnector;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#disconnectTerminal()
+        */
+       @Override
+    public void disconnectTerminal() {
+               Logger.log("entered."); //$NON-NLS-1$
+
+               //Disconnect the remote side first
+               if (getState()!=TerminalState.CLOSED) {
+                       if(getTerminalConnector()!=null) {
+                               getTerminalConnector().disconnect();
+                       }
+               }
+
+        //Ensure that a new Job can be started; then clean up old Job.
+        Job job;
+        synchronized(this) {
+            job = fJob;
+            fJob = null;
+        }
+        if (job!=null) {
+            job.cancel();
+            // Join job to avoid leaving job running after workbench shutdown (333613).
+            // Interrupt to be fast enough; cannot close fInputStream since it is re-used (bug 348700).
+            Thread t = job.getThread();
+            if(t!=null) t.interrupt();
+            try {
+                job.join();
+            } catch (InterruptedException e) {}
+        }
+               fPollingTextCanvasModel.stopPolling();
+       }
+
+       private void waitForConnect() {
+               Logger.log("entered."); //$NON-NLS-1$
+
+               // TODO Eliminate the nested dispatch loop
+               do {
+                       if (!fDisplay.readAndDispatch())
+                               fDisplay.sleep();
+               } while (getState()==TerminalState.CONNECTING);
+
+               if (getCtlText().isDisposed()) {
+                       disconnectTerminal();
+                       return;
+               }
+               if (getMsg().length() > 0) {
+                       showErrorMessage(getMsg());
+                       disconnectTerminal();
+                       return;
+               }
+               if (getCtlText().isFocusControl()) {
+                       if (getState() == TerminalState.CONNECTED)
+                               fFocusListener.captureKeyEvents(true);
+               }
+               fPollingTextCanvasModel.startPolling();
+               startReaderJob();
+       }
+
+       private synchronized void startReaderJob() {
+               if(fJob==null) {
+                       fJob=new Job("Terminal data reader") { //$NON-NLS-1$
+                               @Override
+                protected IStatus run(IProgressMonitor monitor) {
+                                       IStatus status=Status.OK_STATUS;
+                                       try {
+                                               while(true) {
+                                                       while(fInputStream.available()==0 && !monitor.isCanceled()) {
+                                                               try {
+                                                                       fInputStream.waitForAvailable(500);
+                                                               } catch (InterruptedException e) {
+                                                                       Thread.currentThread().interrupt();
+                                                               }
+                                                       }
+                                                       if(monitor.isCanceled()) {
+                                                               //Do not disconnect terminal here because another reader job may already be running
+                                                               status=Status.CANCEL_STATUS;
+                                                               break;
+                                                       }
+                                                       try {
+                                                               // TODO: should block when no text is available!
+                                                               fTerminalText.processText();
+                                                       } catch (Exception e) {
+                                                               disconnectTerminal();
+                                                               status=new Status(IStatus.ERROR,TerminalPlugin.PLUGIN_ID,e.getLocalizedMessage(),e);
+                                                               break;
+                                                       }
+                                               }
+                                       } finally {
+                                               // clean the job: start a new one when the connection gets restarted
+                                               // Bug 208145: make sure we do not clean an other job that's already started (since it would become a Zombie)
+                                               synchronized (VT100TerminalControl.this) {
+                                                       if (fJob==this) {
+                                                               fJob=null;
+                                                       }
+                                               }
+                                       }
+                                       return status;
+                               }
+
+                       };
+                       fJob.setSystem(true);
+                       fJob.schedule();
+               }
+       }
+
+       private void showErrorMessage(String message) {
+               String strTitle = TerminalMessages.TerminalError;
+               // [168197] Replace JFace MessagDialog by SWT MessageBox
+               //MessageDialog.openError( getShell(), strTitle, message);
+               MessageBox mb = new MessageBox(getShell(), SWT.ICON_ERROR | SWT.OK);
+               mb.setText(strTitle);
+               mb.setMessage(message);
+               mb.open();
+       }
+
+       protected void sendString(String string) {
+               Logger.log(string);
+               try {
+                       // Send the string after converting it to an array of bytes using the
+                       // platform's default character encoding.
+                       //
+                       // TODO: Find a way to force this to use the ISO Latin-1 encoding.
+                       // TODO: handle Encoding Errors in a better way
+
+                       getOutputStream().write(string.getBytes(fEncoding));
+                       getOutputStream().flush();
+               } catch (SocketException socketException) {
+                       displayTextInTerminal(socketException.getMessage());
+
+                       String strMsg = TerminalMessages.SocketError
+                                       + "!\n" + socketException.getMessage(); //$NON-NLS-1$
+                       showErrorMessage(strMsg);
+
+                       Logger.logException(socketException);
+
+                       disconnectTerminal();
+               } catch (IOException ioException) {
+                       showErrorMessage(TerminalMessages.IOError + "!\n" + ioException.getMessage());//$NON-NLS-1$
+
+                       Logger.logException(ioException);
+
+                       disconnectTerminal();
+               }
+       }
+
+       @Override
+    public Shell getShell() {
+               return getCtlText().getShell();
+       }
+
+       protected void sendChar(char chKey, boolean altKeyPressed) {
+               try {
+                       int byteToSend = chKey;
+                       OutputStream os = getOutputStream();
+                       if (os==null) {
+                               // Bug 207785: NPE when trying to send char while no longer connected
+                               Logger.log("NOT sending '" + byteToSend + "' because no longer connected"); //$NON-NLS-1$ //$NON-NLS-2$
+                       } else {
+                               if (altKeyPressed) {
+                                       // When the ALT key is pressed at the same time that a character is
+                                       // typed, translate it into an ESCAPE followed by the character.  The
+                                       // alternative in this case is to set the high bit of the character
+                                       // being transmitted, but that will cause input such as ALT-f to be
+                                       // seen as the ISO Latin-1 character '�', which can be confusing to
+                                       // European users running Emacs, for whom Alt-f should move forward a
+                                       // word instead of inserting the '�' character.
+                                       //
+                                       // TODO: Make the ESCAPE-vs-highbit behavior user configurable.
+
+                                       byte[] bytesToSend = String.valueOf(chKey).getBytes(fEncoding);
+                                       StringBuilder b = new StringBuilder("sending ESC"); //$NON-NLS-1$
+                                       for (int i = 0; i < bytesToSend.length; i++) {
+                                               if (i != 0) b.append(" +"); //$NON-NLS-1$
+                                               b.append(" '" + bytesToSend[i] + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+                                       }
+                                       Logger.log(b.toString());
+                                       os.write('\u001b');
+                                       os.write(bytesToSend);
+                               } else {
+                                       byte[] bytesToSend = String.valueOf(chKey).getBytes(fEncoding);
+                                       StringBuilder b = new StringBuilder("sending"); //$NON-NLS-1$
+                                       for (int i = 0; i < bytesToSend.length; i++) {
+                                               if (i != 0) b.append(" +"); //$NON-NLS-1$
+                                               b.append(" '" + bytesToSend[i] + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+                                       }
+                                       Logger.log(b.toString());
+                                       os.write(bytesToSend);
+                               }
+                               os.flush();
+                       }
+               } catch (SocketException socketException) {
+                       Logger.logException(socketException);
+
+                       displayTextInTerminal(socketException.getMessage());
+
+                       String strMsg = TerminalMessages.SocketError
+                                       + "!\n" + socketException.getMessage(); //$NON-NLS-1$
+
+                       showErrorMessage(strMsg);
+                       Logger.logException(socketException);
+
+                       disconnectTerminal();
+               } catch (IOException ioException) {
+                       Logger.logException(ioException);
+
+                       displayTextInTerminal(ioException.getMessage());
+
+                       String strMsg = TerminalMessages.IOError + "!\n" + ioException.getMessage(); //$NON-NLS-1$
+
+                       showErrorMessage(strMsg);
+                       Logger.logException(ioException);
+
+                       disconnectTerminal();
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#setupTerminal(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+    public void setupTerminal(Composite parent) {
+               Assert.isNotNull(parent);
+               boolean wasDisposed = true;
+               TerminalState oldState = fState;
+               fState = TerminalState.CLOSED;
+               if (fClipboard != null && !fClipboard.isDisposed()) {
+                       // terminal was not disposed (DnD)
+                       wasDisposed = false;
+                       fClipboard.dispose();
+                       fPollingTextCanvasModel.stopPolling();
+               }
+               if (fWndParent != null && !fWndParent.isDisposed()) {
+                       // terminal widget gets a new parent (DnD)
+                       fWndParent.dispose();
+               }
+               setupControls(parent);
+               setCommandInputField(fCommandInputField);
+               setupListeners();
+               if (fUseCommonPrefs && wasDisposed) {
+                       updatePreferences();
+                       onTerminalFontChanged();
+                       TerminalPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(fPreferenceListener);
+                       JFaceResources.getFontRegistry().addListener(fFontListener);
+               }
+               setupHelp(fWndParent, TerminalPlugin.HELP_VIEW);
+
+               if (!wasDisposed) {
+                       fState = oldState;
+               }
+       }
+
+       /*
+        * (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.ITerminalViewControl#updatePreferences()
+        */
+       private void updatePreferences() {
+               int bufferLineLimit = Platform.getPreferencesService().getInt(TerminalPlugin.PLUGIN_ID, ITerminalConstants.PREF_BUFFERLINES, 0, null);
+               boolean invert = Platform.getPreferencesService().getBoolean(TerminalPlugin.PLUGIN_ID, ITerminalConstants.PREF_INVERT_COLORS, false, null);
+               setBufferLineLimit(bufferLineLimit);
+               setInvertedColors(invert);
+       }
+
+       private void onTerminalFontChanged() {
+               // set the font for all
+               setFont(ITerminalConstants.FONT_DEFINITION);
+       }
+
+       /*
+        * (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.ITerminalViewControl#setFont(java.lang.String)
+        */
+       @Override
+    public void setFont(String fontName) {
+               Font font=JFaceResources.getFont(fontName);
+               getCtlText().setFont(font);
+               if(fCommandInputField!=null) {
+                       fCommandInputField.setFont(font);
+               }
+               // Tell the TerminalControl singleton that the font has changed.
+               fCtlText.updateFont(fontName);
+               getTerminalText().fontChanged();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.ITerminalViewControl#setFont(org.eclipse.swt.graphics.Font)
+        */
+       @Override
+    @Deprecated
+       public void setFont(Font font) {
+               getCtlText().setFont(font);
+               if(fCommandInputField!=null) {
+                       fCommandInputField.setFont(font);
+               }
+
+               // Tell the TerminalControl singleton that the font has changed.
+               fCtlText.onFontChange();
+               getTerminalText().fontChanged();
+       }
+       @Override
+    public Font getFont() {
+               return getCtlText().getFont();
+       }
+       @Override
+    public Control getControl() {
+               return fCtlText;
+       }
+       @Override
+    public Control getRootControl() {
+               return fWndParent;
+       }
+       protected void setupControls(Composite parent) {
+               fWndParent=new Composite(parent,SWT.NONE);
+               GridLayout layout=new GridLayout();
+               layout.marginWidth=0; layout.marginHeight=0; layout.verticalSpacing=0;
+               fWndParent.setLayout(layout);
+
+               ITerminalTextDataSnapshot snapshot=fTerminalModel.makeSnapshot();
+               // TODO how to get the initial size correctly!
+               snapshot.updateSnapshot(false);
+               fPollingTextCanvasModel=new PollingTextCanvasModel(snapshot);
+               fCtlText=new TextCanvas(fWndParent,fPollingTextCanvasModel,SWT.NONE,new TextLineRenderer(fCtlText,fPollingTextCanvasModel));
+
+               fCtlText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               fCtlText.addResizeHandler(new TextCanvas.ResizeListener() {
+                       @Override
+            public void sizeChanged(int lines, int columns) {
+                               fTerminalText.setDimensions(lines, columns);
+                       }
+               });
+               fCtlText.addMouseListener(new MouseAdapter() {
+                       @Override
+            public void mouseUp(MouseEvent e) {
+                               // update selection used by middle mouse button paste
+                               if (e.button == 1 && getSelection().length() > 0) {
+                                       copy(DND.SELECTION_CLIPBOARD);
+                               }
+                       }
+               });
+
+               fDisplay = getCtlText().getDisplay();
+               fClipboard = new Clipboard(fDisplay);
+       }
+
+       protected void setupListeners() {
+               fKeyHandler = new TerminalKeyHandler();
+               fFocusListener = new TerminalFocusListener();
+
+               getCtlText().addKeyListener(fKeyHandler);
+               getCtlText().addFocusListener(fFocusListener);
+
+       }
+
+       /**
+        * Setup all the help contexts for the controls.
+        */
+       protected void setupHelp(Composite parent, String id) {
+               Control[] children = parent.getChildren();
+
+               for (int nIndex = 0; nIndex < children.length; nIndex++) {
+                       if (children[nIndex] instanceof Composite) {
+                               setupHelp((Composite) children[nIndex], id);
+                       }
+               }
+
+               PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, id);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#displayTextInTerminal(java.lang.String)
+        */
+       @Override
+    public void displayTextInTerminal(String text) {
+               writeToTerminal("\r\n"+text+"\r\n"); //$NON-NLS-1$ //$NON-NLS-2$
+       }
+       private void writeToTerminal(String text) {
+               try {
+                       getRemoteToTerminalOutputStream().write(text.getBytes(fEncoding));
+               } catch (UnsupportedEncodingException e) {
+                       // should never happen!
+                       e.printStackTrace();
+               } catch (IOException e) {
+                       // should never happen!
+                       e.printStackTrace();
+               }
+       }
+
+       @Override
+    public OutputStream getRemoteToTerminalOutputStream() {
+               if(Logger.isLogEnabled()) {
+                       return new LoggingOutputStream(fInputStream.getOutputStream());
+               } else {
+                       return fInputStream.getOutputStream();
+               }
+       }
+       protected boolean isLogCharEnabled() {
+               return TerminalPlugin.isOptionEnabled(Logger.TRACE_DEBUG_LOG_CHAR);
+       }
+
+       @Override
+    public OutputStream getOutputStream() {
+               if(getTerminalConnector()!=null)
+                       return getTerminalConnector().getTerminalToRemoteStream();
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#setMsg(java.lang.String)
+        */
+       @Override
+    public void setMsg(String msg) {
+               fMsg = msg;
+       }
+
+       public String getMsg() {
+               return fMsg;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#getCtlText()
+        */
+       protected TextCanvas getCtlText() {
+               return fCtlText;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#getTerminalText()
+        */
+       public VT100Emulator getTerminalText() {
+               return fTerminalText;
+       }
+       protected class TerminalFocusListener implements FocusListener {
+               private IContextActivation terminalContextActivation = null;
+               private IContextActivation editContextActivation = null;
+
+               protected TerminalFocusListener() {
+                       super();
+               }
+
+               @Override
+        @SuppressWarnings("cast")
+               public void focusGained(FocusEvent event) {
+                       // Disable all keyboard accelerators (e.g., Control-B) so the Terminal view
+                       // can see every keystroke.  Without this, Emacs, vi, and Bash are unusable
+                       // in the Terminal view.
+                       if (getState() == TerminalState.CONNECTED)
+                               captureKeyEvents(true);
+
+                       IContextService contextService = (IContextService) PlatformUI.getWorkbench().getAdapter(IContextService.class);
+                       editContextActivation = contextService.activateContext("org.eclipse.tm.terminal.EditContext"); //$NON-NLS-1$
+               }
+
+               @Override
+        @SuppressWarnings("cast")
+               public void focusLost(FocusEvent event) {
+                       // Enable all keybindings.
+                       captureKeyEvents(false);
+
+                       // Restore the command context to its previous value.
+
+                       IContextService contextService = (IContextService) PlatformUI.getWorkbench().getAdapter(IContextService.class);
+                       contextService.deactivateContext(editContextActivation);
+               }
+
+               @SuppressWarnings("cast")
+               protected void captureKeyEvents(boolean capture) {
+                       IBindingService bindingService = (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
+                       IContextService contextService = (IContextService) PlatformUI.getWorkbench().getAdapter(IContextService.class);
+
+                       boolean enableKeyFilter = !capture;
+                       if (bindingService.isKeyFilterEnabled() != enableKeyFilter)
+                               bindingService.setKeyFilterEnabled(enableKeyFilter);
+
+                       if (capture && terminalContextActivation == null) {
+                               // The above code fails to cause Eclipse to disable menu-activation
+                               // accelerators (e.g., Alt-F for the File menu), so we set the command
+                               // context to be the Terminal view's command context.  This enables us to
+                               // override menu-activation accelerators with no-op commands in our
+                               // plugin.xml file, which enables the Terminal view to see absolutely _all_
+                               // key-presses.
+                               terminalContextActivation = contextService.activateContext("org.eclipse.tm.terminal.TerminalContext"); //$NON-NLS-1$
+
+                       } else if (!capture && terminalContextActivation != null) {
+                               contextService.deactivateContext(terminalContextActivation);
+                               terminalContextActivation = null;
+                       }
+               }
+       }
+
+       protected class TerminalKeyHandler extends KeyAdapter {
+               @Override
+        public void keyPressed(KeyEvent event) {
+                       //TODO next 2 lines are probably obsolete now
+                       if (getState()==TerminalState.CONNECTING)
+                               return;
+
+                       //TODO we should no longer handle copy & paste specially.
+                       //Instead, we should have Ctrl+Shift always go to local since there is no escape sequence for this.
+                       //On Mac, Command+Anything already goes always to local.
+                       //Note that this decision means that Command will NOT be Meta in Emacs on a Remote.
+                       int accelerator = SWTKeySupport.convertEventToUnmodifiedAccelerator(event);
+                       if (editActionAccelerators.isCopyAction(accelerator)) {
+                               copy();
+                               return;
+                       }
+                       if (editActionAccelerators.isPasteAction(accelerator)) {
+                               paste();
+                               return;
+                       }
+
+                       // We set the event.doit to false to prevent any further processing of this
+                       // key event.  The only reason this is here is because I was seeing the F10
+                       // key both send an escape sequence (due to this method) and switch focus
+                       // to the Workbench File menu (forcing the user to click in the Terminal
+                       // view again to continue entering text).  This fixes that.
+
+                       event.doit = false;
+
+                       char character = event.character;
+                       int modifierKeys = event.stateMask & SWT.MODIFIER_MASK;
+                       boolean ctrlKeyPressed = (event.stateMask & SWT.CTRL) != 0;
+                       boolean onlyCtrlKeyPressed = modifierKeys == SWT.CTRL;
+                       boolean macCmdKeyPressed = (event.stateMask & SWT.COMMAND) != 0;
+
+                       // To fix SPR 110341, we consider the Alt key to be pressed only when the
+                       // Control key is _not_ also pressed.  This works around a bug in SWT where,
+                       // on European keyboards, the AltGr key being pressed appears to us as Control
+                       // + Alt being pressed simultaneously.
+                       boolean altKeyPressed = (event.stateMask & SWT.ALT) != 0 && !ctrlKeyPressed;
+
+                       //if (!isConnected()) {
+                       if (fState==TerminalState.CLOSED) {
+                               // Pressing ENTER while not connected causes us to connect.
+                               if (character == '\r' && isConnectOnEnterIfClosed()) {
+                                       connectTerminal();
+                                       return;
+                               }
+
+                               // Ignore all other keyboard input when not connected.
+                               // Allow other key handlers (such as Ctrl+F1) do their work
+                               event.doit = true;
+                               return;
+                       }
+
+                       // Manage the Del key
+                       if (event.keyCode == 0x000007f) {
+                               sendString("\u001b[3~"); //$NON-NLS-1$
+                               return;
+                       }
+
+                       // TODO Linux tty is usually expecting a DEL (^?) character
+                       // but this causes issues with some telnet servers and
+                       // serial connections. Workaround: stty erase ^H
+                       //if (event.keyCode == SWT.BS) {
+                       //      sendChar(SWT.DEL, altKeyPressed);
+                       //      return;
+                       //}
+
+                       // If the event character is NUL ('\u0000'), then a special key was pressed
+                       // (e.g., PageUp, PageDown, an arrow key, a function key, Shift, Alt,
+                       // Control, etc.).  The one exception is when the user presses Control-@,
+                       // which sends a NUL character, in which case we must send the NUL to the
+                       // remote endpoint.  This is necessary so that Emacs will work correctly,
+                       // because Control-@ (i.e., NUL) invokes Emacs' set-mark-command when Emacs
+                       // is running on a terminal.  When the user presses Control-@, the keyCode
+                       // is 50.
+                       // On a Mac, the Cmd key is always used for local commands.
+
+                       if (macCmdKeyPressed || (character == '\u0000' && event.keyCode != 50)) {
+                               // A special key was pressed.  Figure out which one it was and send the
+                               // appropriate ANSI escape sequence.
+                               //
+                               // IMPORTANT: Control will not enter this method for these special keys
+                               // unless certain <keybinding> tags are present in the plugin.xml file
+                               // for the Terminal view.  Do not delete those tags.
+
+                               String escSeq = null;
+                               boolean anyModifierPressed = modifierKeys != 0;
+                               boolean onlyMacCmdKeyPressed = modifierKeys == SWT.COMMAND;
+
+                               switch (event.keyCode) {
+                               case 0x1000001: // Up arrow.
+                                       if (!anyModifierPressed)
+                                               escSeq = fApplicationCursorKeys ? "\u001bOA" : "\u001b[A"; //$NON-NLS-1$ //$NON-NLS-2$
+                                       break;
+
+                               case 0x1000002: // Down arrow.
+                                       if (!anyModifierPressed)
+                                               escSeq = fApplicationCursorKeys ? "\u001bOB" : "\u001b[B"; //$NON-NLS-1$ //$NON-NLS-2$
+                                       break;
+
+                               case 0x1000003: // Left arrow.
+                                       if (onlyCtrlKeyPressed) {
+                                               escSeq = "\u001b[1;5D"; //$NON-NLS-1$
+                                       } else if (!anyModifierPressed) {
+                                               escSeq = fApplicationCursorKeys ? "\u001bOD" : "\u001b[D"; //$NON-NLS-1$ //$NON-NLS-2$
+                                       } else if (onlyMacCmdKeyPressed) {
+                                               // Cmd-Left is "Home" on the Mac
+                                               escSeq = fApplicationCursorKeys ? "\u001bOH" : "\u001b[H"; //$NON-NLS-1$ //$NON-NLS-2$
+                                       }
+                                       break;
+
+                               case 0x1000004: // Right arrow.
+                                       if (onlyCtrlKeyPressed) {
+                                               escSeq = "\u001b[1;5C"; //$NON-NLS-1$
+                                       } else if (!anyModifierPressed) {
+                                               escSeq = fApplicationCursorKeys ? "\u001bOC" : "\u001b[C"; //$NON-NLS-1$ //$NON-NLS-2$
+                                       } else if (onlyMacCmdKeyPressed) {
+                                               // Cmd-Right is "End" on the Mac
+                                               escSeq = fApplicationCursorKeys ? "\u001bOF" : "\u001b[F"; //$NON-NLS-1$ //$NON-NLS-2$
+                                       }
+                                       break;
+
+                               case 0x1000005: // PgUp key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001b[5~"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x1000006: // PgDn key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001b[6~"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x1000007: // Home key.
+                                       if (!anyModifierPressed)
+                                               escSeq = fApplicationCursorKeys ? "\u001bOH" : "\u001b[H"; //$NON-NLS-1$ //$NON-NLS-2$
+                                       break;
+
+                               case 0x1000008: // End key.
+                                       if (!anyModifierPressed)
+                                               escSeq = fApplicationCursorKeys ? "\u001bOF" : "\u001b[F"; //$NON-NLS-1$ //$NON-NLS-2$
+                                       break;
+
+                               case 0x1000009: // Insert.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001b[2~"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x100000a: // F1 key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001bOP"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x100000b: // F2 key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001bOQ"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x100000c: // F3 key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001bOR"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x100000d: // F4 key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001bOS"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x100000e: // F5 key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001b[15~"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x100000f: // F6 key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001b[17~"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x1000010: // F7 key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001b[18~"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x1000011: // F8 key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001b[19~"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x1000012: // F9 key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001b[20~"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x1000013: // F10 key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001b[21~"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x1000014: // F11 key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001b[23~"; //$NON-NLS-1$
+                                       break;
+
+                               case 0x1000015: // F12 key.
+                                       if (!anyModifierPressed)
+                                               escSeq = "\u001b[24~"; //$NON-NLS-1$
+                                       break;
+
+                               default:
+                                       // Ignore other special keys.  Control flows through this case when
+                                       // the user presses SHIFT, CONTROL, ALT, and any other key not
+                                       // handled by the above cases.
+                                       break;
+                               }
+
+                               if (escSeq == null) {
+                                       // Any unmapped key should be handled locally by Eclipse
+                                       event.doit = true;
+                                       processKeyBinding(event, accelerator);
+                               } else
+                                       sendString(escSeq);
+
+                               // It's ok to return here, because we never locally echo special keys.
+
+                               return;
+                       }
+
+                       Logger.log("stateMask = " + event.stateMask); //$NON-NLS-1$
+
+                       if (onlyCtrlKeyPressed) {
+                               switch (character) {
+                               case ' ':
+                                       // Send a NUL character -- many terminal emulators send NUL when
+                                       // Control-Space is pressed.  This is used to set the mark in Emacs.
+                                       character = '\u0000';
+                                       break;
+                               case '/':
+                                       // Ctrl+/ is undo in emacs
+                                       character = '\u001f';
+                                       break;
+                               }
+                       }
+
+                       //TODO: At this point, Ctrl+M sends the same as Ctrl+Shift+M .
+                       //This is undesired. Fixing this here might make the special Ctrl+Shift+C
+                       //handling unnecessary further up.
+                       sendChar(character, altKeyPressed);
+
+                       // Now decide if we should locally echo the character we just sent.  We do
+                       // _not_ locally echo the character if any of these conditions are true:
+                       //
+                       // o This is a serial connection.
+                       //
+                       // o This is a TCP connection (i.e., m_telnetConnection is not null) and
+                       //   the remote endpoint is not a TELNET server.
+                       //
+                       // o The ALT (or META) key is pressed.
+                       //
+                       // o The character is any of the first 32 ISO Latin-1 characters except
+                       //   Control-I or Control-M.
+                       //
+                       // o The character is the DELETE character.
+
+                       if (getTerminalConnector() == null
+                                       || getTerminalConnector().isLocalEcho() == false || altKeyPressed
+                                       || (character >= '\u0001' && character < '\t')
+                                       || (character > '\t' && character < '\r')
+                                       || (character > '\r' && character <= '\u001f')
+                                       || character == '\u007f') {
+                               // No local echoing.
+                               return;
+                       }
+
+                       // Locally echo the character.
+
+                       StringBuffer charBuffer = new StringBuffer();
+                       charBuffer.append(character);
+
+                       // If the character is a carriage return, we locally echo it as a CR + LF
+                       // combination.
+
+                       if (character == '\r')
+                               charBuffer.append('\n');
+
+                       writeToTerminal(charBuffer.toString());
+               }
+
+               /*
+                * Process given event as Eclipse key binding.
+                */
+               @SuppressWarnings("cast")
+               private void processKeyBinding(KeyEvent event, int accelerator) {
+                       IBindingService bindingService = (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
+                       KeyStroke keyStroke = SWTKeySupport.convertAcceleratorToKeyStroke(accelerator);
+                       Binding binding = bindingService.getPerfectMatch(KeySequence.getInstance(keyStroke));
+                       if (binding != null) {
+                               ParameterizedCommand cmd = binding.getParameterizedCommand();
+                               if (cmd != null) {
+                                       IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench().getAdapter(IHandlerService.class);
+                                       Event cmdEvent = new Event();
+                                       cmdEvent.type = SWT.KeyDown;
+                                       cmdEvent.display = event.display;
+                                       cmdEvent.widget = event.widget;
+                                       cmdEvent.character = event.character;
+                                       cmdEvent.keyCode = event.keyCode;
+                                       ////Bug - KeyEvent.keyLocation was introduced in Eclipse 3.6
+                                       ////Use reflection for now to remain backward compatible down to Eclipse 3.4
+                                       //cmdEvent.keyLocation = event.keyLocation;
+                                       try {
+                                               Field f1 = event.getClass().getField("keyLocation"); //$NON-NLS-1$
+                                               Field f2 = cmdEvent.getClass().getField("keyLocation"); //$NON-NLS-1$
+                                               f2.set(cmdEvent, f1.get(event));
+                                       } catch(NoSuchFieldException nsfe) {
+                                               /* ignore, this is Eclipse 3.5 or earlier */
+                                       } catch(Throwable t) {
+                                               t.printStackTrace();
+                                       }
+                                       cmdEvent.stateMask = event.stateMask;
+                                       event.doit = false;
+                                       try {
+                                               handlerService.executeCommand(cmd, cmdEvent);
+                                       } catch (ExecutionException e) {
+                                               TerminalPlugin.getDefault().getLog().log(
+                                                               new Status(IStatus.ERROR,TerminalPlugin.PLUGIN_ID,e.getLocalizedMessage(),e));
+                                       } catch (Exception e) {
+                                               // ignore other exceptions from cmd execution
+                                       }
+                               }
+                       }
+               }
+
+       }
+
+       @Override
+    public void setTerminalTitle(String title) {
+               fTerminalListener.setTerminalTitle(title);
+       }
+
+
+       @Override
+    public TerminalState getState() {
+               return fState;
+       }
+
+
+       @Override
+    public void setState(TerminalState state) {
+               fState=state;
+               fTerminalListener.setState(state);
+               // enable the (blinking) cursor if the terminal is connected
+               runAsyncInDisplayThread(new Runnable() {
+                       @Override
+            public void run() {
+                               if(fCtlText!=null && !fCtlText.isDisposed()) {
+                                       if (isConnected()) {
+                                               fCtlText.setCursorEnabled(true);
+                                       } else {
+                                               fCtlText.setCursorEnabled(false);
+                                               // Stop capturing all key events
+                                               fFocusListener.captureKeyEvents(false);
+                                       }
+                               }
+                       }
+               });
+       }
+       /**
+        * @param runnable run in display thread
+        */
+       private void runAsyncInDisplayThread(Runnable runnable) {
+               if(Display.findDisplay(Thread.currentThread())!=null)
+                       runnable.run();
+               else if(PlatformUI.isWorkbenchRunning() && PlatformUI.getWorkbench().getDisplay() != null && !PlatformUI.getWorkbench().getDisplay().isDisposed())
+                       PlatformUI.getWorkbench().getDisplay().asyncExec(runnable);
+               // else should not happen and we ignore it...
+       }
+
+       @Override
+    public String getSettingsSummary() {
+               if(getTerminalConnector()!=null)
+                       return getTerminalConnector().getSettingsSummary();
+               return ""; //$NON-NLS-1$
+       }
+
+       @Override
+    public void setConnector(ITerminalConnector connector) {
+               fConnector=connector;
+
+       }
+       @Override
+    public ICommandInputField getCommandInputField() {
+               return fCommandInputField;
+       }
+
+       @Override
+    public void setCommandInputField(ICommandInputField inputField) {
+               if(fCommandInputField!=null)
+                       fCommandInputField.dispose();
+               fCommandInputField=inputField;
+               if(fCommandInputField!=null)
+                       fCommandInputField.createControl(fWndParent, this);
+               if(fWndParent.isVisible())
+                       fWndParent.layout(true);
+       }
+
+       @Override
+    public int getBufferLineLimit() {
+               return fTerminalModel.getMaxHeight();
+       }
+
+       @Override
+    public void setBufferLineLimit(int bufferLineLimit) {
+               if(bufferLineLimit<=0)
+                       return;
+               synchronized (fTerminalModel) {
+                       if(fTerminalModel.getHeight()>bufferLineLimit)
+                               fTerminalModel.setDimensions(bufferLineLimit, fTerminalModel.getWidth());
+                       fTerminalModel.setMaxHeight(bufferLineLimit);
+               }
+       }
+
+       @Override
+    public boolean isScrollLock() {
+               return fCtlText.isScrollLock();
+       }
+
+       @Override
+    public void setScrollLock(boolean on) {
+               fCtlText.setScrollLock(on);
+       }
+
+       @Override
+    public void setInvertedColors(boolean invert) {
+               fCtlText.setInvertedColors(invert);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#setConnectOnEnterIfClosed(boolean)
+        */
+       @Override
+    public final void setConnectOnEnterIfClosed(boolean on) {
+               connectOnEnterIfClosed = on;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#isConnectOnEnterIfClosed()
+        */
+       @Override
+    public final boolean isConnectOnEnterIfClosed() {
+               return connectOnEnterIfClosed;
+       }
+
+       @Override
+    public void setVT100LineWrapping(boolean enable) {
+               getTerminalText().setVT100LineWrapping(enable);
+       }
+
+       @Override
+    public boolean isVT100LineWrapping() {
+               return getTerminalText().isVT100LineWrapping();
+       }
+
+       @Override
+    public void enableApplicationCursorKeys(boolean enable) {
+               fApplicationCursorKeys = enable;
+       }
+       
+       @Override
+       public void addMouseListener(ITerminalMouseListener listener) {
+           getCtlText().addTerminalMouseListener(listener);
+       }
+       
+       @Override
+       public void removeMouseListener(ITerminalMouseListener listener) {
+           getCtlText().removeTerminalMouseListener(listener);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/ISnapshotChanges.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/ISnapshotChanges.java
new file mode 100644 (file)
index 0000000..184b63b
--- /dev/null
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+
+public interface ISnapshotChanges {
+
+       /**
+        * @param line might bigger than the number of lines....
+        */
+       void markLineChanged(int line);
+
+       /**
+        * Marks all lines in the range as changed
+        * @param line >=0
+        * @param n might be out of range
+        */
+       void markLinesChanged(int line, int n);
+
+       /**
+        * Marks all lines within the scrolling region
+        * changed and resets the scrolling information
+        */
+       void convertScrollingIntoChanges();
+
+       /**
+        * @return true if something has changed
+        */
+       boolean hasChanged();
+
+       /**
+        * @param startLine
+        * @param size
+        * @param shift
+        */
+       void scroll(int startLine, int size, int shift);
+
+       /**
+        * Mark all lines changed
+        * @param height if no window is set this is the number of 
+        * lines that are marked as changed
+        */
+       void setAllChanged(int height);
+
+       int getFirstChangedLine();
+
+       int getLastChangedLine();
+
+       int getScrollWindowStartLine();
+
+       int getScrollWindowSize();
+
+       int getScrollWindowShift();
+
+       boolean hasLineChanged(int line);
+
+       void markDimensionsChanged();
+       boolean hasDimensionsChanged();
+       void markCursorChanged();
+
+       /**
+        * @return true if the terminal data has changed
+        */
+       boolean hasTerminalChanged();
+       /**
+        * mark the terminal as changed
+        */
+       void setTerminalChanged();
+
+
+       void copyChangedLines(ITerminalTextData dest, ITerminalTextData source);
+
+       /**
+        * @param startLine -1 means follow the end of the data
+        * @param size number of lines to follow
+        */
+       void setInterestWindow(int startLine, int size);
+       int getInterestWindowStartLine();
+       int getInterestWindowSize();
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/SnapshotChanges.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/SnapshotChanges.java
new file mode 100644 (file)
index 0000000..362e8ce
--- /dev/null
@@ -0,0 +1,391 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+
+
+/**
+ * Collects the changes of the {@link ITerminalTextData}
+ *
+ */
+public class SnapshotChanges implements ISnapshotChanges {
+       /**
+        * The first line changed
+        */
+       private int fFirstChangedLine;
+       /**
+        * The last line changed
+        */
+       private int fLastChangedLine;
+       private int fScrollWindowStartLine;
+       private int fScrollWindowSize;
+       private int fScrollWindowShift;
+       /**
+        * true, if scrolling should not tracked anymore
+        */
+       private boolean fScrollDontTrack;
+       /**
+        * The lines that need to be copied
+        * into the snapshot (lines that have
+        * not changed don't have to be copied)
+        */
+       private boolean[] fChangedLines;
+       
+       private int fInterestWindowSize;
+       private int fInterestWindowStartLine;
+       private boolean fDimensionsChanged;
+       private boolean fTerminalHasChanged;
+       private boolean fCursorHasChanged;
+       
+       public SnapshotChanges(int nLines) {
+               setChangedLinesLength(nLines);
+               fFirstChangedLine=Integer.MAX_VALUE;
+               fLastChangedLine=-1;
+       }
+       public SnapshotChanges(int windowStart, int windowSize) {
+               setChangedLinesLength(windowStart+windowSize);
+               fFirstChangedLine=Integer.MAX_VALUE;
+               fLastChangedLine=-1;
+               fInterestWindowStartLine=windowStart;
+               fInterestWindowSize=windowSize;
+
+       }
+       /**
+        * This is used in asserts to throw an {@link RuntimeException}.
+        * This is useful for tests.
+        * @return never -- throws an exception
+        */
+       private boolean throwRuntimeException() {
+               throw new RuntimeException();
+       }
+       /**
+        * @param line
+        * @param size
+        * @return true if the range overlaps with the interest window
+        */
+       boolean isInInterestWindow(int line, int size) {
+               if(fInterestWindowSize<=0)
+                       return true;
+               if(line+size<=fInterestWindowStartLine || line>=fInterestWindowStartLine+fInterestWindowSize)
+                       return false;
+               return true;
+       }
+       /**
+        * @param line
+        * @return true if the line is within the interest window
+        */
+       boolean isInInterestWindow(int line) {
+               if(fInterestWindowSize<=0)
+                       return true;
+               if(line<fInterestWindowStartLine || line>=fInterestWindowStartLine+fInterestWindowSize)
+                       return false;
+               return true;
+       }
+       /**
+        * @param line
+        * @return the line within the window
+        */
+       int fitLineToWindow(int line) {
+               if(fInterestWindowSize<=0)
+                       return line;
+               if(line<fInterestWindowStartLine)
+                       return fInterestWindowStartLine;
+               return line;
+       }
+       /**
+        * The result is only defined if {@link #isInInterestWindow(int, int)} returns true!
+        * @param line the line <b>before</b> {@link #fitLineToWindow(int)} has been called!
+        * @param size
+        * @return the adjusted size. 
+        * <p>Note:</p> {@link #fitLineToWindow(int)} has to be called on the line to
+        * move the window correctly!
+        */
+       int fitSizeToWindow(int line, int size) {
+               if(fInterestWindowSize<=0)
+                       return size;
+               if(line<fInterestWindowStartLine) {
+                       size-=fInterestWindowStartLine-line;
+                       line=fInterestWindowStartLine;
+               }
+               if(line+size>fInterestWindowStartLine+fInterestWindowSize)
+                       size=fInterestWindowStartLine+fInterestWindowSize-line;
+               return size;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#markLineChanged(int)
+        */
+       public void markLineChanged(int line) {
+               if(!isInInterestWindow(line))
+                       return;
+               line=fitLineToWindow(line);
+               if(line<fFirstChangedLine)
+                       fFirstChangedLine=line;
+               if(line>fLastChangedLine)
+                       fLastChangedLine=line;
+               // in case the terminal got resized we expand 
+               // don't remember the changed line because
+               // there is nothing to copy
+               if(line<getChangedLineLength()) {
+                       setChangedLine(line,true);
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#markLinesChanged(int, int)
+        */
+       public void markLinesChanged(int line, int n) {
+               if(n<=0 || !isInInterestWindow(line,n))
+                       return;
+               // do not exceed the bounds of fChangedLines
+               // the terminal might have been resized and 
+               // we can only keep changes for the size of the
+               // previous terminal
+               n=fitSizeToWindow(line, n);
+               line=fitLineToWindow(line);
+               int m=Math.min(line+n, getChangedLineLength());
+               for (int i = line; i < m; i++) {
+                       setChangedLine(i,true);
+               }
+               // this sets fFirstChangedLine as well
+               markLineChanged(line);
+               // this sets fLastChangedLine as well
+               markLineChanged(line+n-1);
+       }
+       public void markCursorChanged() {
+               fCursorHasChanged=true;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#convertScrollingIntoChanges()
+        */
+       public void convertScrollingIntoChanges() {
+               markLinesChanged(fScrollWindowStartLine,fScrollWindowSize);
+               fScrollWindowStartLine=0;
+               fScrollWindowSize=0;
+               fScrollWindowShift=0;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#hasChanged()
+        */
+       public boolean hasChanged() {
+               if(fFirstChangedLine!=Integer.MAX_VALUE || fLastChangedLine>0 || fScrollWindowShift!=0 ||fDimensionsChanged || fCursorHasChanged)
+                       return true;
+               return false;
+       }
+       public void markDimensionsChanged() {
+               fDimensionsChanged=true;
+       }
+       public boolean hasDimensionsChanged() {
+               return fDimensionsChanged;
+       }
+       public boolean hasTerminalChanged() {
+               return fTerminalHasChanged;
+       }
+       public void setTerminalChanged() {
+               fTerminalHasChanged=true;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#scroll(int, int, int)
+        */
+       public void scroll(int startLine, int size, int shift) {
+               size=fitSizeToWindow(startLine, size);
+               startLine=fitLineToWindow(startLine);
+               // let's track only negative shifts
+               if(fScrollDontTrack) {
+                       // we are in a state where we cannot track scrolling
+                       // so let's simply mark the scrolled lines as changed
+                       markLinesChanged(startLine, size);
+               } else if(shift>=0) {
+                       // we cannot handle positive scroll
+                       // forget about clever caching of scroll events
+                       doNotTrackScrollingAnymore();
+                       // mark all lines inside the scroll region as changed
+                       markLinesChanged(startLine, size);
+               } else {
+                       // we have already scrolled
+                       if(fScrollWindowShift<0) {
+                               // we have already scrolled
+                               if(fScrollWindowStartLine==startLine && fScrollWindowSize==size) {
+                                       // we are scrolling the same region again?
+                                       fScrollWindowShift+=shift;
+                                       scrollChangesLinesWithNegativeShift(startLine,size,shift);
+                               } else {
+                                       // mark all lines in the old scroll region as changed
+                                       doNotTrackScrollingAnymore();
+                                       // mark all lines changed, because
+                                       markLinesChanged(startLine, size);
+                               }
+                       } else {
+                               // first scroll in this change -- we just notify it
+                               fScrollWindowStartLine=startLine;
+                               fScrollWindowSize=size;
+                               fScrollWindowShift=shift;
+                               scrollChangesLinesWithNegativeShift(startLine,size,shift);
+                       }
+               }
+       }
+       /**
+        * Some incompatible scrolling occurred. We cannot do the
+        * scroll optimization anymore...
+        */
+       private void doNotTrackScrollingAnymore() {
+               if(fScrollWindowSize>0) {
+                       // convert the current scrolling into changes
+                       markLinesChanged(fScrollWindowStartLine, fScrollWindowSize);
+                       fScrollWindowStartLine=0;
+                       fScrollWindowSize=0;
+                       fScrollWindowShift=0;
+               }
+               // don't be clever on scrolling anymore
+               fScrollDontTrack=true;
+       }
+       /**
+        * Scrolls the changed lines data
+        *
+        * @param line
+        * @param n
+        * @param shift must be negative!
+        */
+       private void scrollChangesLinesWithNegativeShift(int line, int n, int shift) {
+               assert shift <0 || throwRuntimeException();
+               // scroll the region
+               // don't run out of bounds!
+               int m=Math.min(line+n+shift,getChangedLineLength()+shift);
+               for (int i = line; i < m; i++) {
+                       setChangedLine(i, hasLineChanged(i-shift));
+                       // move the first changed line up.
+                       // We don't have to move the maximum down,
+                       // because with a shift scroll, the max is moved
+                       // my the next loop in this method
+                       if(i<fFirstChangedLine && hasLineChanged(i)) {
+                               fFirstChangedLine=i;
+                       }
+               }
+               // mark the "opened" lines as changed
+               for (int i = Math.max(0,line+n+shift); i < line+n; i++) {
+                       markLineChanged(i);
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#setAllChanged(int)
+        */
+       public void setAllChanged(int height) {
+               fScrollWindowStartLine=0;
+               fScrollWindowSize=0;
+               fScrollWindowShift=0;
+               fFirstChangedLine=fitLineToWindow(0);
+               fLastChangedLine=fFirstChangedLine+fitSizeToWindow(0, height)-1;
+               // no need to keep an array of changes anymore
+               setChangedLinesLength(0);
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#getFirstChangedLine()
+        */
+       public int getFirstChangedLine() {
+               return fFirstChangedLine;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#getLastChangedLine()
+        */
+       public int getLastChangedLine() {
+               return fLastChangedLine;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#getScrollWindowStartLine()
+        */
+       public int getScrollWindowStartLine() {
+               return fScrollWindowStartLine;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#getScrollWindowSize()
+        */
+       public int getScrollWindowSize() {
+               return fScrollWindowSize;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#getScrollWindowShift()
+        */
+       public int getScrollWindowShift() {
+               return fScrollWindowShift;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#copyChangedLines(org.eclipse.tm.terminal.model.ITerminalTextData, org.eclipse.tm.terminal.model.ITerminalTextData)
+        */
+       public void copyChangedLines(ITerminalTextData dest, ITerminalTextData source) {
+               int n=Math.min(fLastChangedLine+1,source.getHeight());
+               for (int i = fFirstChangedLine; i < n ; i++) {
+                       if(hasLineChanged(i))
+                               dest.copyLine(source,i,i);
+               }
+       }
+       
+       public int getInterestWindowSize() {
+               return fInterestWindowSize;
+       }
+
+       public int getInterestWindowStartLine() {
+               return fInterestWindowStartLine;
+       }
+
+       public void setInterestWindow(int startLine, int size) {
+               int oldStartLine=fInterestWindowStartLine;
+               int oldSize=fInterestWindowSize;
+               fInterestWindowStartLine=startLine;
+               fInterestWindowSize=size;
+               if(oldSize>0) {
+                       int shift=oldStartLine-startLine;
+                       if(shift==0) {
+                               if(size>oldSize) {
+                                       // add lines to the end
+                                       markLinesChanged(oldStartLine+oldSize, size-oldSize);
+                               }
+                               // else no lines within the window have changed
+                                       
+                       } else if(Math.abs(shift)<size) {
+                               if(shift<0) {
+                                       // we can scroll
+                                       scroll(startLine, oldSize, shift);
+                                       // mark the lines at the end as new
+                                       for (int i = oldStartLine+oldSize; i < startLine+size; i++) {
+                                               markLineChanged(i);
+                                       }
+                               } else {
+                                       // we cannot shift positive -- mark all changed
+                                       markLinesChanged(startLine, size);
+                               }
+                       } else {
+                               // no scrolling possible
+                               markLinesChanged(startLine, size);
+                       }
+                               
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ISnapshotChanges#hasLineChanged(int)
+        */
+       public boolean hasLineChanged(int line) {
+               if(line<fChangedLines.length)
+                       return fChangedLines[line];
+               // since the height of the terminal could
+               // have changed but we have tracked only changes
+               // of the previous terminal height, any line outside
+               // the the range of the previous height has changed
+               return isInInterestWindow(line);
+       }
+       int getChangedLineLength() {
+               return fChangedLines.length;
+       }
+       void setChangedLine(int line,boolean changed){
+               fChangedLines[line]=changed;
+       }
+       void setChangedLinesLength(int length) {
+               fChangedLines=new boolean[length];
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/SynchronizedTerminalTextData.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/SynchronizedTerminalTextData.java
new file mode 100644 (file)
index 0000000..dedac09
--- /dev/null
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse synchronized public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+import org.eclipse.tm.terminal.model.LineSegment;
+import org.eclipse.tm.terminal.model.Style;
+
+/**
+ * This is a decorator to make all access to
+ * ITerminalTextData synchronized
+ *
+ */
+public class SynchronizedTerminalTextData implements ITerminalTextData {
+       final ITerminalTextData fData;
+       public SynchronizedTerminalTextData(ITerminalTextData data) {
+               fData=data;
+       }
+       synchronized public void addLine() {
+               fData.addLine();
+       }
+       synchronized public void cleanLine(int line) {
+               fData.cleanLine(line);
+       }
+       synchronized public void copy(ITerminalTextData source) {
+               fData.copy(source);
+       }
+       synchronized public void copyLine(ITerminalTextData source, int sourceLine, int destLine) {
+               fData.copyLine(source, sourceLine, destLine);
+       }
+       synchronized public void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine, int length) {
+               fData.copyRange(source, sourceStartLine, destStartLine, length);
+       }
+       synchronized public char getChar(int line, int column) {
+               return fData.getChar(line, column);
+       }
+       synchronized public char[] getChars(int line) {
+               return fData.getChars(line);
+       }
+       synchronized public int getCursorColumn() {
+               return fData.getCursorColumn();
+       }
+       synchronized public int getCursorLine() {
+               return fData.getCursorLine();
+       }
+       synchronized public int getHeight() {
+               return fData.getHeight();
+       }
+       synchronized public LineSegment[] getLineSegments(int line, int startCol, int numberOfCols) {
+               return fData.getLineSegments(line, startCol, numberOfCols);
+       }
+       synchronized public int getMaxHeight() {
+               return fData.getMaxHeight();
+       }
+       synchronized public Style getStyle(int line, int column) {
+               return fData.getStyle(line, column);
+       }
+       synchronized public Style[] getStyles(int line) {
+               return fData.getStyles(line);
+       }
+       synchronized public int getWidth() {
+               return fData.getWidth();
+       }
+       synchronized public ITerminalTextDataSnapshot makeSnapshot() {
+               return fData.makeSnapshot();
+       }
+       synchronized public void scroll(int startLine, int size, int shift) {
+               fData.scroll(startLine, size, shift);
+       }
+       synchronized public void setChar(int line, int column, char c, Style style) {
+               fData.setChar(line, column, c, style);
+       }
+       synchronized public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
+               fData.setChars(line, column, chars, start, len, style);
+       }
+       synchronized public void setChars(int line, int column, char[] chars, Style style) {
+               fData.setChars(line, column, chars, style);
+       }
+       synchronized public void setCursorColumn(int column) {
+               fData.setCursorColumn(column);
+       }
+       synchronized public void setCursorLine(int line) {
+               fData.setCursorLine(line);
+       }
+       synchronized public void setDimensions(int height, int width) {
+               fData.setDimensions(height, width);
+       }
+       synchronized public void setMaxHeight(int height) {
+               fData.setMaxHeight(height);
+       }
+       synchronized public boolean isWrappedLine(int line) {
+               return fData.isWrappedLine(line);
+       }
+       synchronized public void setWrappedLine(int line) {
+               fData.setWrappedLine(line);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextData.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextData.java
new file mode 100644 (file)
index 0000000..a361d0a
--- /dev/null
@@ -0,0 +1,274 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [168197] Fix Terminal for CDC-1.1/Foundation-1.1
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+import org.eclipse.tm.terminal.model.LineSegment;
+import org.eclipse.tm.terminal.model.Style;
+
+/**
+ * This class is thread safe.
+ *
+ */
+public class TerminalTextData implements ITerminalTextData {
+       final ITerminalTextData fData;
+       /**
+        * A list of active snapshots
+        */
+       public TerminalTextDataSnapshot[] fSnapshots=new TerminalTextDataSnapshot[0];
+       private int fCursorColumn;
+       private int fCursorLine;
+       /**
+        * Debug helper method -- use as "New Detail Formatter.." in the
+        * debugger variables view:
+        *   <pre>TerminalTextData.toMultiLineText(this,0,200))</pre>
+        * @param term the terminal
+        * @param start start line to show
+        * @param len number of lines to show -- negative numbers means show all
+        * @return a string representation of the content
+        */
+       static public String toMultiLineText(ITerminalTextDataReadOnly term, int start, int len) {
+               if(len<0)
+                       len=term.getHeight();
+               StringBuffer buff=new StringBuffer();
+               int width=term.getWidth();
+               int n=Math.min(len,term.getHeight()-start);
+               for (int line = start; line < n; line++) {
+                       if(line>0)
+                               buff.append("\n"); //$NON-NLS-1$
+                       for (int column = 0; column < width; column++) {
+                               buff.append(term.getChar(line, column));
+                       }
+               }
+               // get rid of the empty space at the end of the lines
+               //return buff.toString().replaceAll("\000+", "");  //$NON-NLS-1$//$NON-NLS-2$
+               //<J2ME CDC-1.1 Foundation-1.1 variant>
+               int i = buff.length() - 1;
+               while (i >= 0 && buff.charAt(i) == '\000') {
+                       i--;
+               }
+               buff.setLength(i + 1);
+               return buff.toString();
+               //</J2ME CDC-1.1 Foundation-1.1 variant>
+       }
+
+       /**
+        * Show the first 100 lines
+        * see {@link #toMultiLineText(ITerminalTextDataReadOnly, int, int)}
+        * @param term A read-only terminal model
+        * @return a string representation of the terminal
+        */
+       static public String toMultiLineText(ITerminalTextDataReadOnly term) {
+               return toMultiLineText(term, 0, 100);
+       }
+
+       public TerminalTextData() {
+               this(new TerminalTextDataFastScroll());
+
+//             this(new TerminalTextDataStore());
+       }
+       public TerminalTextData(ITerminalTextData data) {
+               fData=data;
+       }
+       public int getWidth() {
+               return fData.getWidth();
+       }
+       public int getHeight() {
+               // no need for an extra variable
+               return fData.getHeight();
+       }
+       public void setDimensions(int height, int width) {
+               int h=getHeight();
+               int w=getWidth();
+               if(w==width && h==height)
+                       return;
+               fData.setDimensions(height, width);
+               sendDimensionsChanged(h, w, height, width);
+       }
+       private void sendDimensionsChanged(int oldHeight, int oldWidth, int newHeight, int newWidth) {
+               // determine what has changed
+               if(oldWidth==newWidth) {
+                       if(oldHeight<newHeight)
+                               sendLinesChangedToSnapshot(oldHeight, newHeight-oldHeight);
+                       else
+                               sendLinesChangedToSnapshot(newHeight,oldHeight-newHeight);
+               } else {
+                       sendLinesChangedToSnapshot(0, oldHeight);
+               }
+               sendDimensionsChanged();
+       }
+       public LineSegment[] getLineSegments(int line, int column, int len) {
+               return fData.getLineSegments(line, column, len);
+       }
+       public char getChar(int line, int column) {
+               return fData.getChar(line, column);
+       }
+       public Style getStyle(int line, int column) {
+               return fData.getStyle(line, column);
+       }
+       public void setChar(int line, int column, char c, Style style) {
+               fData.setChar(line, column, c, style);
+               sendLineChangedToSnapshots(line);
+       }
+       public void setChars(int line, int column, char[] chars, Style style) {
+               fData.setChars(line, column, chars, style);
+               sendLineChangedToSnapshots(line);
+       }
+       public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
+               fData.setChars(line, column, chars, start, len, style);
+               sendLineChangedToSnapshots(line);
+       }
+       public void scroll(int startLine, int size, int shift) {
+               fData.scroll(startLine, size, shift);
+               sendScrolledToSnapshots(startLine, size, shift);
+       }
+       public String toString() {
+               return fData.toString();
+       }
+       private void sendDimensionsChanged() {
+               for (int i = 0; i < fSnapshots.length; i++) {
+                       fSnapshots[i].markDimensionsChanged();
+               }
+       }
+       /**
+        * @param line notifies snapshots that line line has changed
+        */
+       protected void sendLineChangedToSnapshots(int line) {
+               for (int i = 0; i < fSnapshots.length; i++) {
+                       fSnapshots[i].markLineChanged(line);
+               }
+       }
+       /**
+        * Notify snapshots that multiple lines have changed
+        * @param line changed line
+        * @param n number of changed lines
+        */
+       protected void sendLinesChangedToSnapshot(int line,int n) {
+               for (int i = 0; i < fSnapshots.length; i++) {
+                       fSnapshots[i].markLinesChanged(line, n);
+               }
+       }
+
+       /**
+        * Notify snapshot that a region was scrolled
+        * @param startLine first line of scrolled region
+        * @param size size of scrolled region (number of lines)
+        * @param shift delta by which the region is scrolled
+        */
+       protected void sendScrolledToSnapshots(int startLine,int size, int shift) {
+               for (int i = 0; i < fSnapshots.length; i++) {
+                       fSnapshots[i].scroll(startLine, size, shift);
+               }
+       }
+       protected void sendCursorChanged() {
+               for (int i = 0; i < fSnapshots.length; i++) {
+                       fSnapshots[i].markCursorChanged();
+               }
+       }
+       /**
+        * Removes the snapshot from the @observer@ list
+        * @param snapshot A snapshot of a terminal model
+        */
+       protected void removeSnapshot(TerminalTextDataSnapshot snapshot) {
+               // poor mans approach to modify the array
+               List<TerminalTextDataSnapshot> list=new ArrayList<TerminalTextDataSnapshot>();
+               list.addAll(Arrays.asList(fSnapshots));
+               list.remove(snapshot);
+               fSnapshots=list.toArray(new TerminalTextDataSnapshot[list.size()]);
+       }
+
+       public ITerminalTextDataSnapshot makeSnapshot() {
+               // poor mans approach to modify the array
+               TerminalTextDataSnapshot snapshot=new TerminalTextDataSnapshot(this);
+               snapshot.markDimensionsChanged();
+               List<TerminalTextDataSnapshot> list=new ArrayList<TerminalTextDataSnapshot>();
+               list.addAll(Arrays.asList(fSnapshots));
+               list.add(snapshot);
+               fSnapshots=list.toArray(new TerminalTextDataSnapshot[list.size()]);
+               return snapshot;
+       }
+       public void addLine() {
+               int oldHeight=getHeight();
+               fData.addLine();
+               // was is an append or a scroll?
+               int newHeight=getHeight();
+               if(newHeight>oldHeight) {
+                       //the line was appended
+                       sendLinesChangedToSnapshot(oldHeight, 1);
+                       int width=getWidth();
+                       sendDimensionsChanged(oldHeight, width, newHeight, width);
+
+               } else {
+                       // the line was scrolled
+                       sendScrolledToSnapshots(0, oldHeight, -1);
+               }
+
+       }
+
+       public void copy(ITerminalTextData source) {
+               fData.copy(source);
+               fCursorLine=source.getCursorLine();
+               fCursorColumn=source.getCursorColumn();
+       }
+
+       public void copyLine(ITerminalTextData source, int sourceLine, int destLine) {
+               fData.copyLine(source, sourceLine, destLine);
+       }
+       public void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine, int length) {
+               fData.copyRange(source, sourceStartLine, destStartLine, length);
+       }
+       public char[] getChars(int line) {
+               return fData.getChars(line);
+       }
+       public Style[] getStyles(int line) {
+               return fData.getStyles(line);
+       }
+       public int getMaxHeight() {
+               return fData.getMaxHeight();
+       }
+       public void setMaxHeight(int height) {
+               fData.setMaxHeight(height);
+       }
+       public void cleanLine(int line) {
+               fData.cleanLine(line);
+               sendLineChangedToSnapshots(line);
+       }
+       public int getCursorColumn() {
+               return fCursorColumn;
+       }
+       public int getCursorLine() {
+               return fCursorLine;
+       }
+       public void setCursorColumn(int column) {
+               fCursorColumn=column;
+               sendCursorChanged();
+       }
+       public void setCursorLine(int line) {
+               fCursorLine=line;
+               sendCursorChanged();
+       }
+
+       public boolean isWrappedLine(int line) {
+               return fData.isWrappedLine(line);
+       }
+
+       public void setWrappedLine(int line) {
+               fData.setWrappedLine(line);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataFastScroll.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataFastScroll.java
new file mode 100644 (file)
index 0000000..9202178
--- /dev/null
@@ -0,0 +1,259 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+import org.eclipse.tm.terminal.model.LineSegment;
+import org.eclipse.tm.terminal.model.Style;
+
+/**
+ * This class is optimized for scrolling the entire {@link #getHeight()}.
+ * The scrolling is done by moving an offset into the data and using
+ * the modulo operator.
+ *
+ */
+public class TerminalTextDataFastScroll implements ITerminalTextData {
+       
+       final ITerminalTextData fData;
+       private int fHeight;
+       private int fMaxHeight;
+       /**
+        * The offset into the array. 
+        */
+       int fOffset;
+       public TerminalTextDataFastScroll(ITerminalTextData data,int maxHeight) {
+               fMaxHeight=maxHeight;
+               fData=data;
+               fData.setDimensions(maxHeight, fData.getWidth());
+               if(maxHeight>2)
+                       assert shiftOffset(-2) || throwRuntimeException();
+       }
+       public TerminalTextDataFastScroll(int maxHeight) {
+               this(new TerminalTextDataStore(),maxHeight);
+       }
+       public TerminalTextDataFastScroll() {
+               this(new TerminalTextDataStore(),1);
+       }
+       /**
+        * This is used in asserts to throw an {@link RuntimeException}.
+        * This is useful for tests.
+        * @return never -- throws an exception
+        */
+       private boolean throwRuntimeException() {
+               throw new RuntimeException();
+       }
+       /**
+        * 
+        * @param line
+        * @return the actual line number in {@link #fData}
+        */
+       int getPositionOfLine(int line) {
+               return (line+fOffset)%fMaxHeight;
+       }
+       /**
+        * Moves offset by delta. This does <b>not</b> move the data!
+        * @param delta
+        */
+       void moveOffset(int delta) {
+               assert Math.abs(delta)<fMaxHeight || throwRuntimeException();
+               fOffset=(fMaxHeight+fOffset+delta)%fMaxHeight;
+               
+       }
+       /**
+        * Test method to shift the offset for testing (if assert ==true)
+        * @param shift TODO
+        * @return true
+        */
+       private boolean shiftOffset(int shift) {
+               moveOffset(shift);
+               return true;
+       }
+       public void addLine() {
+               if(getHeight()<fMaxHeight) {
+                       setDimensions(getHeight()+1, getWidth());
+               } else {
+                       scroll(0,getHeight(),-1);
+               }
+       }
+       public void cleanLine(int line) {
+               fData.cleanLine(getPositionOfLine(line));
+       }
+
+       public void copy(ITerminalTextData source) {
+               int n=source.getHeight();
+               setDimensions(source.getHeight(),source.getWidth());
+               for (int i = 0; i < n; i++) {
+                       fData.copyLine(source, i, getPositionOfLine(i));
+               }
+       }
+
+       public void copyLine(ITerminalTextData source, int sourceLine, int destLine) {
+               fData.copyLine(source, sourceLine, getPositionOfLine(destLine));
+       }
+
+       public void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine, int length) {
+               assert (destStartLine>=0 && destStartLine+length<=fHeight) || throwRuntimeException();
+               for (int i = 0; i < length; i++) {
+                       fData.copyLine(source, i+sourceStartLine, getPositionOfLine(i+destStartLine));
+               }
+       }
+
+       public char getChar(int line, int column) {
+               assert (line>=0 && line<fHeight) || throwRuntimeException();
+               return fData.getChar(getPositionOfLine(line), column);
+       }
+
+       public char[] getChars(int line) {
+               assert (line>=0 && line<fHeight) || throwRuntimeException();
+               return fData.getChars(getPositionOfLine(line));
+       }
+
+       public int getHeight() {
+               return fHeight;
+       }
+
+       public LineSegment[] getLineSegments(int line, int startCol, int numberOfCols) {
+               assert (line>=0 && line<fHeight) || throwRuntimeException();
+               return fData.getLineSegments(getPositionOfLine(line), startCol, numberOfCols);
+       }
+
+       public int getMaxHeight() {
+               return fMaxHeight;
+       }
+
+       public Style getStyle(int line, int column) {
+               assert (line>=0 && line<fHeight) || throwRuntimeException();
+               return fData.getStyle(getPositionOfLine(line), column);
+       }
+
+       public Style[] getStyles(int line) {
+               assert (line>=0 && line<fHeight) || throwRuntimeException();
+               return fData.getStyles(getPositionOfLine(line));
+       }
+
+       public int getWidth() {
+               return fData.getWidth();
+       }
+
+       public ITerminalTextDataSnapshot makeSnapshot() {
+               return fData.makeSnapshot();
+       }
+       private void cleanLines(int line, int len) {
+               for (int i = line; i < line+len; i++) {
+                       fData.cleanLine(getPositionOfLine(i));
+               }
+       }
+       public void scroll(int startLine, int size, int shift) {
+               assert (startLine>=0 && startLine+size<=fHeight) || throwRuntimeException();
+               if(shift>=fMaxHeight || -shift>=fMaxHeight) {
+                       cleanLines(startLine, fMaxHeight-startLine);
+                       return;
+               }
+               if(size==fHeight) {
+                       // This is the case this class is optimized for!
+                       moveOffset(-shift);
+                       // we only have to clean the lines that appear by the move 
+                       if(shift<0) {
+                               cleanLines(Math.max(startLine, startLine+size+shift),Math.min(-shift, getHeight()-startLine));
+                       } else {
+                               cleanLines(startLine, Math.min(shift, getHeight()-startLine));
+                       }
+               } else {
+                       // we have to copy the lines.
+                       if(shift<0) {
+                               // move the region up
+                               // shift is negative!!
+                               for (int i = startLine; i < startLine+size+shift; i++) {
+                                       fData.copyLine(fData, getPositionOfLine(i-shift), getPositionOfLine(i));
+                               }
+                               // then clean the opened lines
+                               cleanLines(Math.max(0, startLine+size+shift),Math.min(-shift, getHeight()-startLine));
+                       } else {
+                               for (int i = startLine+size-1; i >=startLine && i-shift>=0; i--) {
+                                       fData.copyLine(fData, getPositionOfLine(i-shift), getPositionOfLine(i));
+                               }
+                               cleanLines(startLine, Math.min(shift, getHeight()-startLine));
+                       }
+               }
+       }
+
+       public void setChar(int line, int column, char c, Style style) {
+               assert (line>=0 && line<fHeight) || throwRuntimeException();
+               fData.setChar(getPositionOfLine(line), column, c, style);
+       }
+
+       public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
+               assert (line>=0 && line<fHeight) || throwRuntimeException();
+               fData.setChars(getPositionOfLine(line), column, chars, start, len, style);
+       }
+
+       public void setChars(int line, int column, char[] chars, Style style) {
+               assert (line>=0 && line<fHeight) || throwRuntimeException();
+               fData.setChars(getPositionOfLine(line), column, chars, style);
+       }
+
+       public void setDimensions(int height, int width) {
+               assert height>=0 || throwRuntimeException();
+               assert width>=0 || throwRuntimeException();
+               if(height > fMaxHeight)
+                       setMaxHeight(height);
+               fHeight=height;
+               if(width!=fData.getWidth())
+                       fData.setDimensions(fMaxHeight, width);
+       }
+
+       public void setMaxHeight(int maxHeight) {
+               assert maxHeight>=fHeight || throwRuntimeException();
+               // move everything to offset0
+               int start=getPositionOfLine(0);
+               if(start!=0) {
+                       // invent a more efficient algorithm....
+                       ITerminalTextData buffer=new TerminalTextDataStore();
+                       // create a buffer with the expected height
+                       buffer.setDimensions(maxHeight, getWidth());
+                       int n=Math.min(fMaxHeight-start,maxHeight);
+                       // copy the first part
+                       buffer.copyRange(fData, start, 0, n);
+                       // copy the second part
+                       if(n<maxHeight)
+                               buffer.copyRange(fData, 0, n, Math.min(fMaxHeight-n,maxHeight-n));
+                       // copy the buffer back to our data
+                       fData.copy(buffer);
+                       shiftOffset(-start);
+               } else {
+                       fData.setDimensions(maxHeight, fData.getWidth());
+               }
+               fMaxHeight=maxHeight;
+       }
+       public int getCursorColumn() {
+               throw new UnsupportedOperationException();
+       }
+       public int getCursorLine() {
+               throw new UnsupportedOperationException();
+       }
+       public void setCursorColumn(int column) {
+               throw new UnsupportedOperationException();
+       }
+       public void setCursorLine(int line) {
+               throw new UnsupportedOperationException();
+       }
+       public boolean isWrappedLine(int line) {
+               assert (line>=0 && line<fHeight) || throwRuntimeException();
+               return fData.isWrappedLine(getPositionOfLine(line));
+       }
+       public void setWrappedLine(int line) {
+               assert (line>=0 && line<fHeight) || throwRuntimeException();
+               fData.setWrappedLine(getPositionOfLine(line));
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataSnapshot.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataSnapshot.java
new file mode 100644 (file)
index 0000000..9d9924b
--- /dev/null
@@ -0,0 +1,303 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+import org.eclipse.tm.terminal.model.LineSegment;
+import org.eclipse.tm.terminal.model.Style;
+
+/**
+ * The public methods of this class have to be called from one thread! 
+ *
+ * Threading considerations:
+ * This class is <b>not threadsafe</b>!
+ */
+class TerminalTextDataSnapshot implements ITerminalTextDataSnapshot {
+       /**
+        * The changes of the current snapshot relative to the
+        * previous snapshot
+        */
+       volatile ISnapshotChanges fCurrentChanges;
+       /**
+        * Keeps track of changes that happened since the current
+        * snapshot has been made.
+        */
+       ISnapshotChanges fFutureChanges;
+       /**
+        * Is used as lock and is the reference to the terminal we take snapshots from.
+        */
+       final TerminalTextData fTerminal;
+       /**
+        * A snapshot copy of of fTerminal
+        */
+       // snapshot does not need internal synchronisation
+       final TerminalTextDataWindow fSnapshot;
+       // this variable is synchronized on fTerminal!
+       private SnapshotOutOfDateListener[] fListener=new SnapshotOutOfDateListener[0];
+       // this variable is synchronized on fTerminal!
+       private boolean fListenersNeedNotify;
+       private int fInterestWindowSize;
+       private int fInterestWindowStartLine;
+
+       TerminalTextDataSnapshot(TerminalTextData terminal) {
+               fSnapshot = new TerminalTextDataWindow();
+               fTerminal = terminal;
+               fCurrentChanges = new SnapshotChanges(fTerminal.getHeight());
+               fCurrentChanges.setTerminalChanged();
+               fFutureChanges = new SnapshotChanges(fTerminal.getHeight());
+               fFutureChanges.markLinesChanged(0, fTerminal.getHeight());
+               fListenersNeedNotify=true;
+               fInterestWindowSize=-1;
+       }
+       /**
+        * This is used in asserts to throw an {@link RuntimeException}.
+        * This is useful for tests.
+        * @return never -- throws an exception
+        */
+       private boolean throwRuntimeException() {
+               throw new RuntimeException();
+       }
+       
+       public void detach() {
+               fTerminal.removeSnapshot(this);
+       }
+
+       public boolean isOutOfDate() {
+               // this is called from fTerminal, therefore we lock on fTerminal
+               synchronized (fTerminal) {
+                       return fFutureChanges.hasChanged();
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ITerminalTextDataSnapshot#snapshot()
+        */
+       public void updateSnapshot(boolean detectScrolling) {
+               // make sure terminal does not change while we make the snapshot
+               synchronized (fTerminal) {
+                       // let's make the future changes current
+                       fCurrentChanges=fFutureChanges;
+                       fFutureChanges=new SnapshotChanges(fTerminal.getHeight());
+                       fFutureChanges.setInterestWindow(fInterestWindowStartLine, fInterestWindowSize);
+                       // and update the snapshot
+                       if(fSnapshot.getHeight()!=fTerminal.getHeight()||fSnapshot.getWidth()!=fTerminal.getWidth()) {
+                               if(fInterestWindowSize==-1)
+                                       fSnapshot.setWindow(0, fTerminal.getHeight());
+                               // if the dimensions have changed, we need a full copy
+                               fSnapshot.copy(fTerminal);
+                               // and we mark all lines as changed
+                               fCurrentChanges.setAllChanged(fTerminal.getHeight());
+                       } else {
+                               // first we do the scroll on the copy
+                               int start=fCurrentChanges.getScrollWindowStartLine();
+                               int lines=Math.min(fCurrentChanges.getScrollWindowSize(), fSnapshot.getHeight()-start);
+                               fSnapshot.scroll(start, lines, fCurrentChanges.getScrollWindowShift());
+                               // and then create the snapshot of the changed lines
+                               fCurrentChanges.copyChangedLines(fSnapshot, fTerminal);
+                       }
+                       fListenersNeedNotify=true;
+                       fSnapshot.setCursorLine(fTerminal.getCursorLine());
+                       fSnapshot.setCursorColumn(fTerminal.getCursorColumn());
+               }
+               if(!detectScrolling) {
+                       // let's pretend there was no scrolling and
+                       // convert the scrolling into line changes
+                       fCurrentChanges.convertScrollingIntoChanges();
+               }
+       }
+
+       public char getChar(int line, int column) {
+               return fSnapshot.getChar(line, column);
+       }
+
+       public int getHeight() {
+               return fSnapshot.getHeight();
+       }
+
+       public LineSegment[] getLineSegments(int line, int column, int len) {
+               return fSnapshot.getLineSegments(line, column, len);
+       }
+
+       public Style getStyle(int line, int column) {
+               return fSnapshot.getStyle(line, column);
+       }
+
+       public int getWidth() {
+               return fSnapshot.getWidth();
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ITerminalTextDataSnapshot#getFirstChangedLine()
+        */
+       public int getFirstChangedLine() {
+               return fCurrentChanges.getFirstChangedLine();
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ITerminalTextDataSnapshot#getLastChangedLine()
+        */
+       public int getLastChangedLine() {
+               return fCurrentChanges.getLastChangedLine();
+       }
+
+       public boolean hasLineChanged(int line) {
+               return fCurrentChanges.hasLineChanged(line);
+       }
+       public boolean hasDimensionsChanged() {
+               return fCurrentChanges.hasDimensionsChanged();
+       }
+       public boolean hasTerminalChanged() {
+               return fCurrentChanges.hasTerminalChanged();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ITerminalTextDataSnapshot#getScrollChangeY()
+        */
+       public int getScrollWindowStartLine() {
+               return fCurrentChanges.getScrollWindowStartLine();
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ITerminalTextDataSnapshot#getScrollChangeN()
+        */
+       public int getScrollWindowSize() {
+               return fCurrentChanges.getScrollWindowSize();
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.model.ITerminalTextDataSnapshot#getScrollChangeShift()
+        */
+       public int getScrollWindowShift() {
+               return fCurrentChanges.getScrollWindowShift();
+       }
+       
+       /**
+        * Announces a change in line line
+        * @param line
+        */
+       void markLineChanged(int line) {
+               // threading
+               fFutureChanges.markLineChanged(line);
+               fFutureChanges.setTerminalChanged();
+               notifyListers();
+       }
+       /**
+        * Announces a change of n lines beginning with line line
+        * @param line
+        * @param n
+        */
+       void markLinesChanged(int line,int n) {
+               fFutureChanges.markLinesChanged(line,n);
+               fFutureChanges.setTerminalChanged();
+               notifyListers();
+       }
+       
+       void markDimensionsChanged() {
+               fFutureChanges.markDimensionsChanged();
+               fFutureChanges.setTerminalChanged();
+               notifyListers();
+       }
+       void markCursorChanged() {
+               fFutureChanges.markCursorChanged();
+               fFutureChanges.setTerminalChanged();
+               notifyListers();
+       }
+
+       /**
+        * @param startLine
+        * @param size
+        * @param shift
+        */
+       void scroll(int startLine, int size, int shift) {
+               fFutureChanges.scroll(startLine,size,shift);
+               fFutureChanges.setTerminalChanged();
+               notifyListers();
+       }
+       /**
+        * Notifies listeners about the change
+        */
+       private void notifyListers() {
+               // this code has to be called from a block synchronized on fTerminal
+               synchronized (fTerminal) {
+                       if(fListenersNeedNotify) {
+                               for (int i = 0; i < fListener.length; i++) {
+                                       fListener[i].snapshotOutOfDate(this);
+                               }
+                               fListenersNeedNotify=false;
+                       }
+               }
+       }
+       public ITerminalTextDataSnapshot makeSnapshot() {
+               return fSnapshot.makeSnapshot();
+       }
+
+       synchronized public void addListener(SnapshotOutOfDateListener listener) {
+               List<SnapshotOutOfDateListener> list=new ArrayList<SnapshotOutOfDateListener>();
+               list.addAll(Arrays.asList(fListener));
+               list.add(listener);
+               fListener=list.toArray(new SnapshotOutOfDateListener[list.size()]);
+       }
+
+       synchronized public void removeListener(SnapshotOutOfDateListener listener) {
+               List<SnapshotOutOfDateListener> list=new ArrayList<SnapshotOutOfDateListener>();
+               list.addAll(Arrays.asList(fListener));
+               list.remove(listener);
+               fListener=list.toArray(new SnapshotOutOfDateListener[list.size()]);
+       }
+       public String toString() {
+               return fSnapshot.toString();
+       }
+
+
+       public int getInterestWindowSize() {
+               return fInterestWindowSize;
+       }
+
+
+       public int getInterestWindowStartLine() {
+               return fInterestWindowStartLine;
+       }
+
+       public void setInterestWindow(int startLine, int size) {
+               assert startLine>=0 || throwRuntimeException();
+               assert size>=0 || throwRuntimeException();
+               fInterestWindowStartLine=startLine;
+               fInterestWindowSize=size;
+               fSnapshot.setWindow(startLine, size);
+               fFutureChanges.setInterestWindow(startLine, size);
+               notifyListers();
+       }
+
+
+       public char[] getChars(int line) {
+               return fSnapshot.getChars(line);
+       }
+
+
+       public Style[] getStyles(int line) {
+               return fSnapshot.getStyles(line);
+       }
+       public int getCursorColumn() {
+               return fSnapshot.getCursorColumn();
+       }
+       public int getCursorLine() {
+               return fSnapshot.getCursorLine();
+       }
+       public ITerminalTextData getTerminalTextData() {
+               return fTerminal;
+       }
+       public boolean isWrappedLine(int line) {
+               return fSnapshot.isWrappedLine(line);
+       }
+}
+
+
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataStore.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataStore.java
new file mode 100644 (file)
index 0000000..9817087
--- /dev/null
@@ -0,0 +1,344 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.List;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+import org.eclipse.tm.terminal.model.LineSegment;
+import org.eclipse.tm.terminal.model.Style;
+
+/**
+ * This class is thread safe.
+ *
+ */
+public class TerminalTextDataStore implements ITerminalTextData {
+       private char[][] fChars;
+       private Style[][] fStyle;
+       private int fWidth;
+       private int fHeight;
+       private int fMaxHeight;
+       private int fCursorColumn;
+       private int fCursorLine;
+       final private BitSet fWrappedLines = new BitSet();
+
+       public TerminalTextDataStore() {
+               fChars=new char[0][];
+               fStyle=new Style[0][];
+               fWidth=0;
+       }
+       /**
+        * This is used in asserts to throw an {@link RuntimeException}.
+        * This is useful for tests.
+        * @return never -- throws an exception
+        */
+       private boolean throwRuntimeException() {
+               throw new RuntimeException();
+       }
+       
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#getWidth()
+        */
+       public int getWidth() {
+               return fWidth;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#getHeight()
+        */
+       public int getHeight() {
+               return fHeight;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#setDimensions(int, int)
+        */
+       public void setDimensions(int height, int width) {
+               assert height>=0 || throwRuntimeException();
+               assert width>=0  || throwRuntimeException();
+               // just extend the region
+               if(height>fChars.length) {
+                       int h=4*height/3;
+                       if(fMaxHeight>0 && h>fMaxHeight)
+                               h=fMaxHeight;
+                       fStyle=(Style[][]) resizeArray(fStyle, height);
+                       fChars=(char[][]) resizeArray(fChars, height);
+               }
+               // clean the new lines
+               if(height>fHeight) {
+                       for (int i = fHeight; i < height; i++) {
+                               cleanLine(i);
+                       }
+               }
+               // set dimensions after successful resize!
+               fWidth=width;
+               fHeight=height;
+       }
+       /**
+        * Reallocates an array with a new size, and copies the contents of the old
+        * array to the new array.
+        * 
+        * @param origArray the old array, to be reallocated.
+        * @param newSize the new array size.
+        * @return A new array with the same contents (chopped off if needed or filled with 0 or null).
+        */
+       private Object resizeArray(Object origArray, int newSize) {
+               int oldSize = Array.getLength(origArray);
+               if(oldSize==newSize)
+                       return origArray;
+               Class<?> elementType = origArray.getClass().getComponentType();
+               Object newArray = Array.newInstance(elementType, newSize);
+               int preserveLength = Math.min(oldSize, newSize);
+               if (preserveLength > 0)
+                       System.arraycopy(origArray, 0, newArray, 0, preserveLength);
+               return newArray;
+       }
+
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#getLineSegments(int, int, int)
+        */
+       public LineSegment[] getLineSegments(int line, int column, int len) {
+               // get the styles and chars for this line
+               Style[] styles=fStyle[line];
+               char[] chars=fChars[line];
+               int col=column;
+               int n=column+len;
+               
+               // expand the line if needed....
+               if(styles==null)
+                       styles=new Style[n];
+               else if(styles.length<n)
+                       styles=(Style[]) resizeArray(styles, n);
+
+               if(chars==null)
+                       chars=new char[n];
+               else if(chars.length<n)
+                       chars=(char[]) resizeArray(chars, n);
+       
+               // and create the line segments
+               Style style=styles[column];
+               List<LineSegment> segments=new ArrayList<LineSegment>();
+               for (int i = column; i < n; i++) {
+                       if(styles[i]!=style) {
+                               segments.add(new LineSegment(col,new String(chars,col,i-col),style));
+                               style=styles[i];
+                               col=i;
+                       }
+               }
+               if(col < n) {
+                       segments.add(new LineSegment(col,new String(chars,col,n-col),style));
+               }
+               return segments.toArray(new LineSegment[segments.size()]);
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#getChar(int, int)
+        */
+       public char getChar(int line, int column) {
+               assert column<fWidth || throwRuntimeException();
+               if(fChars[line]==null||column>=fChars[line].length)
+                       return 0;
+               return fChars[line][column];
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#getStyle(int, int)
+        */
+       public Style getStyle(int line, int column) {
+               assert column<fWidth || throwRuntimeException();
+               if(fStyle[line]==null || column>=fStyle[line].length)
+                       return null;
+               return fStyle[line][column];
+       }
+       
+       void ensureLineLength(int iLine, int length) {
+               if(length>fWidth)
+                       throw new RuntimeException();
+               if(fChars[iLine]==null) {
+                       fChars[iLine]=new char[length];
+               } else if(fChars[iLine].length<length) {
+                       fChars[iLine]=(char[]) resizeArray(fChars[iLine],length);
+               }
+               if(fStyle[iLine]==null) {
+                       fStyle[iLine]=new Style[length];
+               } else if(fStyle[iLine].length<length) {
+                       fStyle[iLine]=(Style[]) resizeArray(fStyle[iLine],length);
+               }
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#setChar(int, int, char, org.eclipse.tm.internal.terminal.text.Style)
+        */
+       public void setChar(int line, int column, char c, Style style) {
+               ensureLineLength(line,column+1);
+               fChars[line][column]=c;
+               fStyle[line][column]=style;             
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#setChars(int, int, char[], org.eclipse.tm.internal.terminal.text.Style)
+        */
+       public void setChars(int line, int column, char[] chars, Style style) {
+               setChars(line,column,chars,0,chars.length,style);
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#setChars(int, int, char[], int, int, org.eclipse.tm.internal.terminal.text.Style)
+        */
+       public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
+               ensureLineLength(line,column+len);
+               for (int i = 0; i < len; i++) {
+                       fChars[line][column+i]=chars[i+start];
+                       fStyle[line][column+i]=style;           
+               }
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.text.ITerminalTextData#scroll(int, int, int)
+        */
+       public void scroll(int startLine, int size, int shift) {
+               assert startLine+size <= getHeight() || throwRuntimeException();
+               if(shift<0) {
+                       // move the region up
+                       // shift is negative!!
+                       for (int i = startLine; i < startLine+size+shift; i++) {
+                               fChars[i]=fChars[i-shift];
+                               fStyle[i]=fStyle[i-shift];
+                               fWrappedLines.set(i, fWrappedLines.get(i-shift));
+                       }
+                       // then clean the opened lines
+                       cleanLines(Math.max(startLine, startLine+size+shift),Math.min(-shift, getHeight()-startLine));
+//                     cleanLines(Math.max(0, startLine+size+shift),Math.min(-shift, getHeight()-startLine));
+               } else {
+                       for (int i = startLine+size-1; i >=startLine && i-shift>=0; i--) {
+                               fChars[i]=fChars[i-shift];
+                               fStyle[i]=fStyle[i-shift];
+                               fWrappedLines.set(i, fWrappedLines.get(i-shift));
+                       }
+                       cleanLines(startLine, Math.min(shift, getHeight()-startLine));
+               }
+       }
+       /**
+        * Replaces the lines with new empty data
+        * @param line
+        * @param len
+        */
+       private void cleanLines(int line, int len) {
+               for (int i = line; i < line+len; i++) {
+                       cleanLine(i);
+               }
+       }
+       
+       /*
+        * @return a text representation of the object.
+        * Lines are separated by '\n'. No style information is returned.
+        */
+       public String toString() {
+               StringBuffer buff=new StringBuffer();
+               for (int line = 0; line < getHeight(); line++) {
+                       if(line>0)
+                               buff.append("\n"); //$NON-NLS-1$
+                       for (int column = 0; column < fWidth; column++) {
+                               buff.append(getChar(line, column));
+                       }
+               }
+               return buff.toString();
+       }
+
+
+       public ITerminalTextDataSnapshot makeSnapshot() {
+               throw new UnsupportedOperationException();
+       }
+
+       public void addLine() {
+               if(fMaxHeight>0 && getHeight()<fMaxHeight) {
+                       setDimensions(getHeight()+1, getWidth());
+               } else {
+                       scroll(0,getHeight(),-1);
+               }
+       }
+
+       public void copy(ITerminalTextData source) {
+               fWidth=source.getWidth();
+               int n=source.getHeight();
+               if(getHeight()!=n) {
+                       fChars=new char[n][];
+                       fStyle=new Style[n][];
+               }
+               for (int i = 0; i < n; i++) {
+                       copyLine(source, i, i);
+               }
+               fHeight=n;
+               fCursorLine=source.getCursorLine();
+               fCursorColumn=source.getCursorColumn();
+       }
+       public void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine,int length) {
+               for (int i = 0; i < length; i++) {
+                       copyLine(source, i+sourceStartLine, i+destStartLine);
+               }
+       }
+
+       public void copyLine(ITerminalTextData source, int sourceLine, int destLine) {
+               fChars[destLine]=source.getChars(sourceLine);
+               fStyle[destLine]=source.getStyles(sourceLine);
+               fWrappedLines.set(destLine, source.isWrappedLine(sourceLine));
+       }
+
+       public char[] getChars(int line) {
+               if(fChars[line]==null)
+                       return null;
+               return fChars[line].clone();
+       }
+
+       public Style[] getStyles(int line) {
+               if(fStyle[line]==null)
+                       return null;
+               return fStyle[line].clone();
+       }
+
+       public void setLine(int line, char[] chars, Style[] styles) {
+               fChars[line]=chars.clone();
+               fStyle[line]=styles.clone();
+               fWrappedLines.clear(line);
+       }
+
+       public void setMaxHeight(int height) {
+               fMaxHeight=height;
+       }
+
+       public int getMaxHeight() {
+               return fMaxHeight;
+       }
+
+       public void cleanLine(int line) {
+               fChars[line]=null;
+               fStyle[line]=null;
+               fWrappedLines.clear(line);
+       }
+       public int getCursorColumn() {
+               return fCursorColumn;
+       }
+       public int getCursorLine() {
+               return fCursorLine;
+       }
+       public void setCursorColumn(int column) {
+               fCursorColumn=column;
+       }
+       public void setCursorLine(int line) {
+               fCursorLine=line;
+       }
+       public boolean isWrappedLine(int line) {
+               return fWrappedLines.get(line);
+       }
+       public void setWrappedLine(int line) {
+               fWrappedLines.set(line);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataWindow.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataWindow.java
new file mode 100644 (file)
index 0000000..52f351a
--- /dev/null
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+import org.eclipse.tm.terminal.model.LineSegment;
+import org.eclipse.tm.terminal.model.Style;
+
+/**
+ * This class stores the data only within a window {@link #setWindow(int, int)} and 
+ * {@link #getWindowStartLine()} and {@link #getWindowSize()}. Everything outside 
+ * the is <code>char=='\000'</code> and <code>style=null</code>.
+ *
+ */
+public class TerminalTextDataWindow implements ITerminalTextData {
+       final ITerminalTextData fData;
+       int fWindowStartLine;
+       int fWindowSize;
+       int fHeight;
+       int fMaxHeight;
+       public TerminalTextDataWindow(ITerminalTextData data) {
+               fData=data;
+       }
+       public TerminalTextDataWindow() {
+               this(new TerminalTextDataStore());
+       }
+       /**
+        * This is used in asserts to throw an {@link RuntimeException}.
+        * This is useful for tests.
+        * @return never -- throws an exception
+        */
+       private boolean throwRuntimeException() {
+               throw new RuntimeException();
+       }
+       /**
+        * @param line
+        * @return true if the line is within the window
+        */
+       boolean isInWindow(int line) {
+               return line>=fWindowStartLine && line<fWindowStartLine+fWindowSize;
+       }
+       public char getChar(int line, int column) {
+               if(!isInWindow(line))
+                       return 0;
+               return fData.getChar(line-fWindowStartLine, column);
+       }
+
+       public char[] getChars(int line) {
+               if(!isInWindow(line))
+                       return null;
+               return fData.getChars(line-fWindowStartLine);
+       }
+
+       public int getHeight() {
+               return fHeight;
+       }
+
+       public LineSegment[] getLineSegments(int line, int startCol, int numberOfCols) {
+               if(!isInWindow(line))
+                       return new LineSegment[]{new LineSegment(startCol,new String(new char[numberOfCols]),null)};
+               return fData.getLineSegments(line-fWindowStartLine, startCol, numberOfCols);
+       }
+
+       public int getMaxHeight() {
+               return fMaxHeight;
+       }
+
+       public Style getStyle(int line, int column) {
+               if(!isInWindow(line))
+                       return null;
+               return fData.getStyle(line-fWindowStartLine, column);
+       }
+
+       public Style[] getStyles(int line) {
+               if(!isInWindow(line))
+                       return null;
+               return fData.getStyles(line-fWindowStartLine);
+       }
+
+       public int getWidth() {
+               return fData.getWidth();
+       }
+
+       public ITerminalTextDataSnapshot makeSnapshot() {
+               throw new UnsupportedOperationException();
+       }
+       public void addLine() {
+               if(fMaxHeight>0 && getHeight()<fMaxHeight) {
+                       setDimensions(getHeight()+1, getWidth());
+               } else {
+                       scroll(0,getHeight(),-1);
+               }
+       }
+       public void copy(ITerminalTextData source) {
+               // we inherit the dimensions of the source
+               setDimensions(source.getHeight(), source.getWidth());
+               int n=Math.min(fWindowSize, source.getHeight()-fWindowStartLine);
+               if(n>0)
+                       fData.copyRange(source, fWindowStartLine, 0, n);
+       }
+       public void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine, int length) {
+               int n=length;
+               int dStart=destStartLine-fWindowStartLine;
+               int sStart=sourceStartLine;
+               // if start outside our range, cut the length to copy
+               if(dStart<0) {
+                       n+=dStart;
+                       sStart-=dStart;
+                       dStart=0;
+               }
+               // do not exceed the window size
+               n=Math.min(n,fWindowSize);
+               if(n>0)
+                       fData.copyRange(source, sStart, dStart, n);
+               
+       }
+       public void copyLine(ITerminalTextData source, int sourceLine, int destLine) {
+               if(isInWindow(destLine))
+                       fData.copyLine(source, sourceLine, destLine-fWindowStartLine);
+       }
+       public void scroll(int startLine, int size, int shift) {
+               assert (startLine>=0 && startLine+size<=fHeight) || throwRuntimeException();
+               int n=size;
+               int start=startLine-fWindowStartLine;
+               // if start outside our range, cut the length to copy
+               if(start<0) {
+                       n+=start;
+                       start=0;
+               }
+               n=Math.min(n,fWindowSize-start);
+               // do not exceed the window size
+               if(n>0)
+                       fData.scroll(start, n, shift);
+       }
+       public void setChar(int line, int column, char c, Style style) {
+               if(!isInWindow(line))
+                       return;
+               fData.setChar(line-fWindowStartLine, column, c, style);
+       }
+       public void setChars(int line, int column, char[] chars, int start, int len, Style style) {
+               if(!isInWindow(line))
+                       return;
+               fData.setChars(line-fWindowStartLine, column, chars, start, len, style);
+       }
+       public void setChars(int line, int column, char[] chars, Style style) {
+               if(!isInWindow(line))
+                       return;
+               fData.setChars(line-fWindowStartLine, column, chars, style);
+       }
+       public void setDimensions(int height, int width) {
+               assert height>=0 || throwRuntimeException();
+               fData.setDimensions(fWindowSize, width);
+               fHeight=height;
+       }
+       public void setMaxHeight(int height) {
+               fMaxHeight=height;
+       }
+       public void setWindow(int startLine, int size) {
+               fWindowStartLine=startLine;
+               fWindowSize=size;
+               fData.setDimensions(fWindowSize, getWidth());
+       }
+       public int getWindowStartLine() {
+               return fWindowStartLine;
+       }
+       public int getWindowSize() {
+               return fWindowSize;
+       }
+       public void setHeight(int height) {
+               fHeight = height;
+       }
+       public void cleanLine(int line) {
+               if(isInWindow(line))
+                       fData.cleanLine(line-fWindowStartLine);
+       }
+       public int getCursorColumn() {
+               return fData.getCursorColumn();
+       }
+       public int getCursorLine() {
+               return fData.getCursorLine();
+       }
+       public void setCursorColumn(int column) {
+               fData.setCursorColumn(column);
+       }
+       public void setCursorLine(int line) {
+               fData.setCursorLine(line);
+       }
+       public boolean isWrappedLine(int line) {
+               if(isInWindow(line))
+                       return fData.isWrappedLine(line - fWindowStartLine);
+               return false;
+       }
+       public void setWrappedLine(int line) {
+               if(isInWindow(line))
+                       fData.setWrappedLine(line - fWindowStartLine);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/preferences/ITerminalConstants.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/preferences/ITerminalConstants.java
new file mode 100644 (file)
index 0000000..907c79d
--- /dev/null
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.preferences;
+
+/**
+ * Constants for Terminal Preferences.
+ * 
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface ITerminalConstants {
+
+       public static final String  PREF_HAS_MIGRATED      = "TerminalPref.migrated"; //$NON-NLS-1$
+
+       public static final String  PREF_BUFFERLINES       = "TerminalPrefBufferLines"; //$NON-NLS-1$
+       public static final String  PREF_INVERT_COLORS     = "TerminalPrefInvertColors"; //$NON-NLS-1$
+       public static final int     DEFAULT_BUFFERLINES    = 1000;
+       public static final boolean DEFAULT_INVERT_COLORS  = false;
+
+       public static final String  FONT_DEFINITION = "terminal.views.view.font.definition"; //$NON-NLS-1$
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/preferences/TerminalPreferenceInitializer.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/preferences/TerminalPreferenceInitializer.java
new file mode 100644 (file)
index 0000000..920d5e4
--- /dev/null
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
+ * Martin Oberhuber (Wind River) - [436612] Restore Eclipse 3.4 compatibility
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.preferences;
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
+
+/**
+ * Terminal Preference Initializer.
+ *  
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ * @noreference This class is not intended to be referenced by clients.
+ */
+public class TerminalPreferenceInitializer extends AbstractPreferenceInitializer {
+
+       public TerminalPreferenceInitializer() {
+       }
+
+       public void initializeDefaultPreferences() {
+               //DefaultScope.INSTANCE was added in Eclipse 3.7
+               IEclipsePreferences defaultPrefs = DefaultScope.INSTANCE.getNode(TerminalPlugin.PLUGIN_ID);
+               defaultPrefs.putBoolean(ITerminalConstants.PREF_INVERT_COLORS, ITerminalConstants.DEFAULT_INVERT_COLORS);
+               defaultPrefs.putInt(ITerminalConstants.PREF_BUFFERLINES, ITerminalConstants.DEFAULT_BUFFERLINES);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/preferences/TerminalPreferencePage.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/preferences/TerminalPreferencePage.java
new file mode 100644 (file)
index 0000000..89a2c8f
--- /dev/null
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Initial Contributors:
+ * The following Wind River employees contributed to the Terminal component
+ * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+ * Helmut Haigermoser and Ted Williams.
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [378691][api] push Preferences into the Widget
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.preferences;
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.tm.internal.terminal.control.impl.TerminalMessages;
+import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * Terminal Preference Page.
+ *  
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ * @noreference This class is not intended to be referenced by clients.
+ */
+public class TerminalPreferencePage extends FieldEditorPreferencePage implements
+               IWorkbenchPreferencePage {
+    protected BooleanFieldEditor fInvertColors;
+
+       protected IntegerFieldEditor fEditorBufferSize;
+
+       public TerminalPreferencePage() {
+               super(GRID);
+       }
+       protected void createFieldEditors() {
+               setupPage();
+       }
+       public void init(IWorkbench workbench) {
+               // do nothing
+       }
+       protected void setupPage() {
+               setupData();
+               setupEditors();
+       }
+       protected void setupData() {
+               TerminalPlugin plugin;
+               IPreferenceStore preferenceStore;
+
+               plugin = TerminalPlugin.getDefault();
+               preferenceStore = plugin.getPreferenceStore();
+               setPreferenceStore(preferenceStore);
+       }
+       protected void setupEditors() {
+               fInvertColors = new BooleanFieldEditor(
+                               ITerminalConstants.PREF_INVERT_COLORS, TerminalMessages.INVERT_COLORS,
+                               getFieldEditorParent());
+               fEditorBufferSize = new IntegerFieldEditor(ITerminalConstants.PREF_BUFFERLINES,
+                               TerminalMessages.BUFFERLINES, getFieldEditorParent());
+
+               fEditorBufferSize.setValidRange(0, Integer.MAX_VALUE);
+
+               addField(fInvertColors);
+               addField(fEditorBufferSize);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/AbstractSettingsPage.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/AbstractSettingsPage.java
new file mode 100644 (file)
index 0000000..501f45f
--- /dev/null
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ * Copyright (c) 2013, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.provisional.api;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.fieldassist.ControlDecoration;
+import org.eclipse.jface.fieldassist.FieldDecoration;
+import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * Abstract settings page providing a common implementation of the listener handling.
+ */
+public abstract class AbstractSettingsPage implements ISettingsPage, IMessageProvider {
+       // A message associated with the control.
+       private String message = null;
+
+       // The message type of the associated message.
+       private int messageType = IMessageProvider.NONE;
+
+       // Reference to the listener
+       private final ListenerList listeners = new ListenerList();
+
+       // Flag to control the control decorations
+       private boolean hasDecoration = false;
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage#addListener(org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage.Listener)
+        */
+       public void addListener(Listener listener) {
+       Assert.isNotNull(listener);
+       listeners.add(listener);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage#removeListener(org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage.Listener)
+        */
+       public void removeListener(Listener listener) {
+       Assert.isNotNull(listener);
+       listeners.remove(listener);
+       }
+
+       /**
+        * Fire the listeners for the given control.
+        *
+        * @param control The control or <code>null</code>.
+        */
+       public void fireListeners(Control control) {
+               Object[] list = listeners.getListeners();
+               for (int i = 0; i < list.length; i++) {
+                       Object l = list[i];
+                       if (!(l instanceof Listener)) continue;
+                       ((Listener)l).onSettingsPageChanged(control);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.IMessageProvider#getMessage()
+        */
+       public final String getMessage() {
+               return message;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.IMessageProvider#getMessageType()
+        */
+       public final int getMessageType() {
+               return messageType;
+       }
+
+       /**
+        * Set the message and the message type.
+        *
+        * @param message The message or <code>null</code>.
+        * @param messageType The type of the message (NONE, INFORMATION, WARNING, ERROR).
+        */
+       public final void setMessage(String message, int messageType) {
+               this.message = message;
+               this.messageType = messageType;
+       }
+
+       /**
+        * Sets if or if not the settings panel widgets will have control decorations
+        * or not. The method has effect only if called before {@link #createControl(org.eclipse.swt.widgets.Composite)}.
+        *
+        * @param value <code>True</code> if the panel widgets have control decorations, <code>false</code> otherwise.
+        */
+       public final void setHasControlDecoration(boolean value) {
+               this.hasDecoration = value;
+       }
+
+       /**
+        * Returns if or if not the settings panel widgets will have control
+        * decorations or not.
+        *
+        * @return <code>True</code> if the panel widgets have control decorations, <code>false</code> otherwise.
+        */
+       protected final boolean hasControlDecoration() {
+               return hasDecoration;
+       }
+
+       /**
+        * Creates a new instance of a {@link ControlDecoration} object associated with
+        * the given control. The method is called after the control has been created.
+        *
+        * @param control The control. Must not be <code>null</code>.
+        * @return The control decoration object instance.
+        */
+       protected final ControlDecoration createControlDecoration(Control control) {
+               Assert.isNotNull(control);
+               if (!hasDecoration) return null;
+               ControlDecoration controlDecoration = new ControlDecoration(control, getControlDecorationPosition());
+               controlDecoration.setShowOnlyOnFocus(false);
+               control.setData("controlDecoration", controlDecoration); //$NON-NLS-1$
+               return controlDecoration;
+       }
+
+       /**
+        * Returns the control decoration position. The default is
+        * {@link SWT#TOP} | {@link SWT#LEFT}.
+        *
+        * @return The control position.
+        */
+       protected int getControlDecorationPosition() {
+               return SWT.TOP | SWT.LEFT;
+       }
+
+       /**
+        * Updates the control decoration of the given control to represent the given message
+        * and message type. If the message is <code>null</code> or the message type is
+        * {@link IMessageProvider#NONE} no decoration will be shown.
+        *
+        * @param control The control. Must not be <code>null</code>.
+        * @param message The message.
+        * @param messageType The message type.
+        */
+       protected final void updateControlDecoration(Control control, String message, int messageType) {
+               Assert.isNotNull(control);
+
+               ControlDecoration controlDecoration = (ControlDecoration)control.getData("controlDecoration"); //$NON-NLS-1$
+               if (controlDecoration != null) {
+                       // The description is the same as the message
+                       controlDecoration.setDescriptionText(message);
+
+                       // The icon depends on the message type
+                       FieldDecorationRegistry registry = FieldDecorationRegistry.getDefault();
+
+                       // Determine the id of the decoration to show
+                       String decorationId = FieldDecorationRegistry.DEC_INFORMATION;
+                       if (messageType == IMessageProvider.ERROR) {
+                               decorationId = FieldDecorationRegistry.DEC_ERROR;
+                       } else if (messageType == IMessageProvider.WARNING) {
+                               decorationId = FieldDecorationRegistry.DEC_WARNING;
+                       }
+
+                       // Get the field decoration
+                       FieldDecoration fieldDeco = registry.getFieldDecoration(decorationId);
+                       if (fieldDeco != null) {
+                               controlDecoration.setImage(fieldDeco.getImage());
+                       }
+
+                       if (message == null || messageType == IMessageProvider.NONE) {
+                               controlDecoration.hide();
+                       }
+                       else {
+                               controlDecoration.show();
+                       }
+               }
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ISettingsPage.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ISettingsPage.java
new file mode 100644 (file)
index 0000000..a00d71d
--- /dev/null
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.provisional.api;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * @author Michael Scharf
+ *
+ * TODO: Michael Scharf: provide a long description of a wizard
+ * TODO: Michael Scharf: allow multiple pages to be generated
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
+ * part of a work in progress. There is no guarantee that this API will
+ * work or that it will remain the same. Please do not use this API without
+ * consulting with the <a href="http://www.eclipse.org/tm/">Target Management</a> team.
+ * </p>
+ */
+public interface ISettingsPage {
+
+       public interface Listener {
+
+               /**
+                * Invoked by settings page controls to signal that the settings page
+                * changed and page container may update their state.
+                *
+                * @param control The control which triggered the event or <code>null</code>
+                */
+               public void onSettingsPageChanged(Control control);
+       }
+
+       /**
+        * Create a page to be shown in a dialog or wizard to setup the connection.
+        * @param parent
+        */
+       void createControl(Composite parent);
+
+       /**
+        * Called before the page is shown. Loads the state from the {@link ITerminalConnector}.
+        */
+       void loadSettings();
+
+       /**
+        * Called when the OK button is pressed.
+        */
+       void saveSettings();
+
+       /**
+        * @return true if the
+        */
+       boolean validateSettings();
+
+       /**
+        * Adds the given listener.
+        * <p>
+        * Has not effect if the same listener is already registered.
+        *
+        * @param listener The listener. Must not be <code>null</code>.
+        */
+       public void addListener(Listener listener);
+
+       /**
+        * Removes the given listener.
+        * <p>
+        * Has no effect if the same listener was not registered.
+        *
+        * @param listener The listener. Must not be <code>null</code>.
+        */
+       public void removeListener(Listener listener);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ISettingsStore.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ISettingsStore.java
new file mode 100644 (file)
index 0000000..b7dd859
--- /dev/null
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.provisional.api;
+
+/**
+ * A simple interface to a store to persist the state of a connection. 
+ * 
+ * @author Michael Scharf
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
+ * part of a work in progress. There is no guarantee that this API will
+ * work or that it will remain the same. Please do not use this API without
+ * consulting with the <a href="http://www.eclipse.org/tm/">Target Management</a> team.
+ * </p>
+ */
+public interface ISettingsStore {
+       /**
+        * @param key alpha numeric key, may contain dots (.)
+        * @return value
+        */
+       String get(String key);
+
+       /**
+        * @param key alpha numeric key, may contain dots (.)
+        * @param defaultValue
+        * @return the value or the default
+        */
+       String get(String key, String defaultValue);
+
+       /**
+        * Save a string value
+        * @param key alpha numeric key, may contain dots (.)
+        * @param value
+        */
+       void put(String key, String value);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ITerminalConnector.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ITerminalConnector.java
new file mode 100644 (file)
index 0000000..242726e
--- /dev/null
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [261486][api][cleanup] Mark @noimplement interfaces as @noextend
+ * Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.provisional.api;
+
+import java.io.OutputStream;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
+
+/**
+ * A contributed connection type to manage a single connection.
+ *
+ * Implementations of this class are contributed through the
+ * <code>org.eclipse.tm.terminal.control.connectors</code> extension point. This
+ * class gives access to the static markup of a terminal connector extension as
+ * well as providing the lifecycle management for the dynamically loaded
+ * {@link TerminalConnectorImpl} instance, which performs the actual
+ * communications. This pattern allows for lazy initialization, bundle
+ * activation and class loading of the actual {@link TerminalConnectorImpl}
+ * instance.
+ *
+ * Clients can get terminal connector instances from the
+ * {@link TerminalConnectorExtension} class, or from
+ * {@link ITerminalViewControl#getTerminalConnector()} when running inside an
+ * active terminal widget.
+ *
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ *
+ * @author Michael Scharf
+ *         <p>
+ *         <strong>EXPERIMENTAL</strong>. This class or interface has been added
+ *         as part of a work in progress. There is no guarantee that this API
+ *         will work or that it will remain the same. Please do not use this API
+ *         without consulting with the <a
+ *         href="http://www.eclipse.org/tm/">Target Management</a> team.
+ *         </p>
+ */
+public interface ITerminalConnector extends IAdaptable {
+       /**
+        * @return an ID of this connector. The id from the plugin.xml.
+        * @since org.eclipse.tm.terminal 2.0
+        */
+       String getId();
+
+       /**
+        * @return <code>null</code> the name (as specified in the plugin.xml)
+        * @since org.eclipse.tm.terminal 2.0
+        */
+       String getName();
+
+       /**
+        * @return <code>True</code> if the connector is not visible in user
+        *         selections.
+        * @since org.eclipse.tm.terminal 3.0.1
+        */
+       boolean isHidden();
+
+       /**
+        * @return true if the {@link TerminalConnectorImpl} has been initialized.
+        * If there was an initialization error, {@link #getInitializationErrorMessage()}
+        * returns the error message.
+        * @since org.eclipse.tm.terminal 2.0
+        */
+       boolean isInitialized();
+
+       /**
+        * This method initializes the connector if it is not initialized!
+        * If the connector was initialized successfully, <code>null</code> is
+        * returned. Otherwise an error message describing the problem is returned.
+        * @return <code>null</code> or a localized error message.
+        * @since org.eclipse.tm.terminal 2.0
+        */
+       String getInitializationErrorMessage();
+
+       /**
+        * Connect using the current state of the settings.
+        * @param control Used to inform the UI about state changes and messages from the connection.
+        */
+       void connect(ITerminalControl control);
+
+       /**
+        * Disconnect if connected. Else do nothing.
+        */
+       void disconnect();
+
+       /**
+        * @return true if a local echo is needed.
+        * TODO:Michael Scharf: this should be handed within the connection....
+        */
+       boolean isLocalEcho();
+
+    /**
+     * Notify the remote site that the size of the terminal has changed.
+     * @param newWidth
+     * @param newHeight
+     */
+    void setTerminalSize(int newWidth, int newHeight);
+
+    /**
+     * @return the terminal to remote stream (bytes written to this stream will
+     * be sent to the remote site). For the stream in the other direction (remote to
+     * terminal see {@link ITerminalControl#getRemoteToTerminalOutputStream()}
+        * @since org.eclipse.tm.terminal 2.0
+     */
+    OutputStream getTerminalToRemoteStream();
+
+       /**
+        * Load the state of this connection. Is typically called before
+        * {@link #connect(ITerminalControl)}.
+        *
+        * @param store a string based data store. Short keys like "foo" can be used to
+        * store the state of the connection.
+        */
+       void load(ISettingsStore store);
+
+       /**
+        * When the view or dialog containing the terminal is closed,
+        * the state of the connection is saved into the settings store <code>store</code>
+        * @param store
+        */
+       void save(ISettingsStore store);
+       
+       /**
+        * Set or reset the settings store to the default values.
+        */
+       void setDefaultSettings();
+
+       /**
+        * @return A string that represents the settings of the connection. This representation
+        * may be shown in the status line of the terminal view.
+        */
+       String getSettingsSummary();
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ITerminalControl.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/ITerminalControl.java
new file mode 100644 (file)
index 0000000..79b3cb8
--- /dev/null
@@ -0,0 +1,160 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Martin Oberhuber (Wind River) - [204796] Terminal should allow setting the encoding to use
+ * Martin Oberhuber (Wind River) - [261486][api][cleanup] Mark @noimplement interfaces as @noextend
+ * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.provisional.api;
+
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Represents the terminal view as seen by a terminal connection.
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as part
+ * of a work in progress. There is no guarantee that this API will work or that
+ * it will remain the same. Please do not use this API without consulting with
+ * the <a href="http://www.eclipse.org/tm/">Target Management</a> team.
+ * </p>
+ *
+ * @author Michael Scharf
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ */
+public interface ITerminalControl {
+
+       /**
+        * @return the current state of the connection
+        */
+       TerminalState getState();
+
+       /**
+        * @param state
+        */
+       void setState(TerminalState state);
+
+       /**
+        * Setup the terminal control within the given parent composite.
+        *
+        * @param parent The parent composite. Must not be <code>null</code>.
+        */
+       void setupTerminal(Composite parent);
+
+       /**
+        * A shell to show dialogs.
+        * @return the shell in which the terminal is shown.
+        */
+       Shell getShell();
+
+       /**
+        * Set the encoding that the Terminal uses to decode bytes from the
+        * Terminal-to-remote-Stream into Unicode Characters used in Java; or, to
+        * encode Characters typed by the user into bytes sent over the wire to the
+        * remote.
+        *
+        * By default, the local Platform Default Encoding is used. Also note that
+        * the encoding must not be applied in case the terminal stream is processed
+        * by some data transfer protocol which requires binary data.
+        *
+        * Validity of the encoding set here is not checked. Since some encodings do
+        * not cover the entire range of Unicode characters, it can happen that a
+        * particular Unicode String typed in by the user can not be encoded into a
+        * byte Stream with the encoding specified. and UnsupportedEncodingException
+        * will be thrown in this case at the time the String is about to be
+        * processed.
+        *
+        * The concrete encoding to use can either be specified manually by a user,
+        * by means of a dialog, or a connector can try to obtain it automatically
+        * from the remote side e.g. by evaluating an environment variable such as
+        * LANG on UNIX systems.
+        *
+        * @since org.eclipse.tm.terminal 2.0
+        */
+       void setEncoding(String encoding) throws UnsupportedEncodingException;
+
+       /**
+        * Return the current encoding. That's interesting when the previous
+        * setEncoding() call failed and the fallback default encoding should be
+        * queried, such that e.g. a combobox with encodings to choose can be
+        * properly initialized.
+        *
+        * @return the current Encoding of the Terminal.
+        * @since org.eclipse.tm.terminal 2.0
+        */
+       String getEncoding();
+
+       /**
+        * Show a text in the terminal. If puts newlines at the beginning and the
+        * end.
+        *
+        * @param text TODO: Michael Scharf: Is this really needed?
+        */
+       void displayTextInTerminal(String text);
+
+       /**
+        * @return a stream used to write to the terminal. Any bytes written to this
+        * stream appear in the terminal or are interpreted by the emulator as
+        * control sequences. The stream in the opposite direction, terminal
+        * to remote is in {@link ITerminalConnector#getTerminalToRemoteStream()}.
+        */
+       OutputStream getRemoteToTerminalOutputStream();
+
+       /**
+        * Set the title of the terminal view.
+        * @param title
+        */
+       void setTerminalTitle(String title);
+
+       /**
+        * Show an error message during connect.
+        * @param msg
+        * TODO: Michael Scharf: Should be replaced by a better error notification mechanism!
+        */
+       void setMsg(String msg);
+
+       /**
+        * Sets if or if not the terminal view control should try to reconnect
+        * the terminal connection if the user hits ENTER in a closed terminal.
+        * <p>
+        * Reconnect on ENTER if terminal is closed is enabled by default.
+        * 
+        * @param on <code>True</code> to enable the reconnect, <code>false</code> to disable it.
+        */
+       void setConnectOnEnterIfClosed(boolean on);
+       
+       /**
+        * Returns if or if not the terminal view control should try to reconnect
+        * the terminal connection if the user hits ENTER in a closed terminal.
+        * 
+        * @return <code>True</code> the reconnect is enabled, <code>false</code> if disabled.
+        */
+       boolean isConnectOnEnterIfClosed();
+       
+       /**
+        * Enables VT100 line wrapping mode (default is off).
+        * This corresponds to the VT100 'eat_newline_glitch' terminal capability.
+        * If enabled, writing to the rightmost column does not cause
+        * an immediate wrap to the next line. Instead the line wrap occurs on the
+        * next output character.
+        * 
+        * @param enable  whether to enable or disable VT100 line wrapping mode
+        */
+       void setVT100LineWrapping(boolean enable);
+       
+       /**
+        * @return whether VT100 line wrapping mode is enabled
+        */
+       boolean isVT100LineWrapping();
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/Logger.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/Logger.java
new file mode 100644 (file)
index 0000000..437935f
--- /dev/null
@@ -0,0 +1,195 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Fran Litterio (Wind River) - initial API and implementation
+ * Ted Williams (Wind River) - refactored into org.eclipse namespace
+ * Michael Scharf (Wind River) - split into core, view and connector plugins
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.provisional.api;
+
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
+
+/**
+ * A simple logger class. Every method in this class is static, so they can be
+ * called from both class and instance methods. To use this class, write code
+ * like this:
+ * <p>
+ *
+ * <pre>
+ * Logger.log(&quot;something has happened&quot;);
+ * Logger.log(&quot;counter is &quot; + counter);
+ * </pre>
+ *
+ * @author Fran Litterio <francis.litterio@windriver.com>
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
+ * part of a work in progress. There is no guarantee that this API will
+ * work or that it will remain the same. Please do not use this API without
+ * consulting with the <a href="http://www.eclipse.org/tm/">Target Management</a> team.
+ * </p>
+ */
+public final class Logger {
+    public static final String TRACE_DEBUG_LOG                                 = "org.eclipse.tm.terminal.control/debug/log"; //$NON-NLS-1$
+    public static final String TRACE_DEBUG_LOG_CHAR                            = "org.eclipse.tm.terminal.control/debug/log/char"; //$NON-NLS-1$
+    public static final String TRACE_DEBUG_LOG_VT100BACKEND            = "org.eclipse.tm.terminal.control/debug/log/VT100Backend"; //$NON-NLS-1$
+
+    private static PrintStream logStream;
+
+       static {
+               // Any of the three known debugging options turns on the creation of the log file
+               boolean createLogFile = TerminalPlugin.isOptionEnabled(TRACE_DEBUG_LOG)
+                                                                       || TerminalPlugin.isOptionEnabled(TRACE_DEBUG_LOG_CHAR)
+                                                                       || TerminalPlugin.isOptionEnabled(TRACE_DEBUG_LOG_VT100BACKEND);
+               
+               // Log only if tracing is enabled
+               if (createLogFile && TerminalPlugin.getDefault() != null) {
+                       IPath logFile = Platform.getStateLocation(TerminalPlugin.getDefault().getBundle());
+                       if (logFile != null && logFile.toFile().isDirectory()) {
+                               logFile = logFile.append("tmterminal.log"); //$NON-NLS-1$
+                               try {
+                                       logStream = new PrintStream(new FileOutputStream(logFile.toFile(), true));
+                               } catch (Exception ex) {
+                                       logStream = System.err;
+                                       logStream.println("Exception when opening log file -- logging to stderr!"); //$NON-NLS-1$
+                                       ex.printStackTrace(logStream);
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Encodes a String such that non-printable control characters are
+        * converted into user-readable escape sequences for logging.
+        * @param message String to encode
+        * @return encoded String
+        */
+       public static final String encode(String message) {
+               boolean encoded = false;
+               StringBuffer buf = new StringBuffer(message.length()+32);
+               for (int i=0; i<message.length(); i++) {
+                       char c=message.charAt(i);
+                       switch(c) {
+                               case '\\':
+                               case '\'':
+                                       buf.append('\\'); buf.append(c); encoded=true;
+                                       break;
+                               case '\r':
+                                       buf.append('\\'); buf.append('r'); encoded=true;
+                                       break;
+                               case '\n':
+                                       buf.append('\\'); buf.append('n'); encoded=true;
+                                       break;
+                               case '\t':
+                                       buf.append('\\'); buf.append('t'); encoded=true;
+                                       break;
+                               case '\f':
+                                       buf.append('\\'); buf.append('f'); encoded=true;
+                                       break;
+                               case '\b':
+                                       buf.append('\\'); buf.append('b'); encoded=true;
+                                       break;
+                               default:
+                                       if (c <= '\u000f') {
+                                               buf.append('\\'); buf.append('x'); buf.append('0');
+                                               buf.append(Integer.toHexString(c));
+                                               encoded=true;
+                                       } else if (c>=' ' && c<'\u007f') {
+                                               buf.append(c);
+                                       } else if (c <= '\u00ff') {
+                                                       buf.append('\\'); buf.append('x');
+                                                       buf.append(Integer.toHexString(c));
+                                                       encoded=true;
+                                       } else {
+                                               buf.append('\\'); buf.append('u');
+                                               if (c<='\u0fff') {
+                                                       buf.append('0');
+                                               }
+                                               buf.append(Integer.toHexString(c));
+                                               encoded=true;
+                                       }
+                       }
+               }
+               if (encoded) {
+                       return buf.toString();
+               }
+               return message;
+       }
+
+       /**
+        * Checks if logging is enabled.
+        * @return true if logging is enabled.
+        */
+       public static final boolean isLogEnabled() {
+               return (logStream!=null);
+       }
+
+       /**
+        * Logs the specified message. Do not append a newline to parameter
+        * <i>message</i>. This method does that for you.
+        *
+     * @param message           A String containing the message to log.
+        */
+       public static final void log(String message) {
+               if (logStream != null) {
+                       // Read my own stack to get the class name, method name, and line
+                       // number of
+                       // where this method was called.
+
+                       StackTraceElement caller = new Throwable().getStackTrace()[1];
+                       int lineNumber = caller.getLineNumber();
+                       String className = caller.getClassName();
+                       String methodName = caller.getMethodName();
+                       className = className.substring(className.lastIndexOf('.') + 1);
+
+            logStream.println(className + "." + methodName + ":" + lineNumber + ": " + message);   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+                       logStream.flush();
+               }
+       }
+
+       /**
+        * Writes a stack trace for an exception to both Standard Error and to the
+        * log file.
+        */
+       public static final void logException(Exception ex) {
+               // log in eclipse error log
+               if (TerminalPlugin.getDefault() != null) {
+                       TerminalPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, TerminalPlugin.PLUGIN_ID, IStatus.OK, ex.getMessage(), ex));
+               } else {
+                       ex.printStackTrace();
+               }
+               // Additional Tracing for debug purposes:
+               // Read my own stack to get the class name, method name, and line number
+               // of where this method was called
+               if(logStream!=null) {
+                       StackTraceElement caller = new Throwable().getStackTrace()[1];
+                       int lineNumber = caller.getLineNumber();
+                       String className = caller.getClassName();
+                       String methodName = caller.getMethodName();
+                       className = className.substring(className.lastIndexOf('.') + 1);
+
+                       PrintStream tmpStream = System.err;
+
+                       if (logStream != null) {
+                               tmpStream = logStream;
+                       }
+
+                       tmpStream.println(className
+                                       + "." + methodName + ":" + lineNumber + ": " + //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+                                       "Caught exception: " + ex); //$NON-NLS-1$
+                       ex.printStackTrace(tmpStream);
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/NullSettingsStore.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/NullSettingsStore.java
new file mode 100644 (file)
index 0000000..e86f157
--- /dev/null
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.provisional.api;
+
+/**
+ * A settings store implementation doing nothing.
+ */
+public class NullSettingsStore implements ISettingsStore {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore#get(java.lang.String)
+        */
+       @Override
+       public String get(String key) {
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore#get(java.lang.String, java.lang.String)
+        */
+       @Override
+       public String get(String key, String defaultValue) {
+               return defaultValue;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore#put(java.lang.String, java.lang.String)
+        */
+       @Override
+       public void put(String key, String value) {
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/TerminalConnectorExtension.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/TerminalConnectorExtension.java
new file mode 100644 (file)
index 0000000..fe494bc
--- /dev/null
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.provisional.api;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.RegistryFactory;
+import org.eclipse.tm.internal.terminal.connector.TerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
+
+/**
+ * A factory to get {@link ITerminalConnector} instances.
+ *
+ * @author Michael Scharf
+ *
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ *
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
+ * part of a work in progress. There is no guarantee that this API will work or
+ * that it will remain the same. Please do not use this API without consulting
+ * with the <a href="http://www.eclipse.org/tm/">Target Management</a>
+ * team.
+ * </p>
+ */
+public class TerminalConnectorExtension {
+       static private ITerminalConnector makeConnector(final IConfigurationElement config) {
+               String id = config.getAttribute("id"); //$NON-NLS-1$
+               if(id==null || id.length()==0)
+                       id=config.getAttribute("class"); //$NON-NLS-1$
+               String name= config.getAttribute("name"); //$NON-NLS-1$
+               if(name==null || name.length()==0) {
+                       name=id;
+               }
+               String hidden = config.getAttribute("hidden"); //$NON-NLS-1$
+               boolean isHidden = hidden != null ? new Boolean(hidden).booleanValue() : false;
+               TerminalConnector.Factory factory=new TerminalConnector.Factory(){
+                       public TerminalConnectorImpl makeConnector() throws Exception {
+                               return (TerminalConnectorImpl)config.createExecutableExtension("class"); //$NON-NLS-1$
+                       }};
+               return new TerminalConnector(factory,id,name, isHidden);
+       }
+
+       /**
+        * Return a specific terminal connector for a given connector id. The
+        * terminal connector is not yet instantiated to any real connection.
+        *
+        * @param id the id of the terminal connector in the
+        *            <code>org.eclipse.tm.terminal.control.connectors</code>
+        *            extension point
+        * @return a new ITerminalConnector with id or <code>null</code> if there
+        *         is no extension with that id.
+        * @since org.eclipse.tm.terminal 2.0
+        */
+       public static ITerminalConnector makeTerminalConnector(String id) {
+               IConfigurationElement[] config = RegistryFactory.getRegistry().getConfigurationElementsFor("org.eclipse.tm.terminal.control.connectors"); //$NON-NLS-1$
+               for (int i = 0; i < config.length; i++) {
+                       if(id.equals(config[i].getAttribute("id"))) { //$NON-NLS-1$
+                               return makeConnector(config[i]);
+                       }
+               }
+               return null;
+       }
+       /**
+        * Return a list of available terminal connectors (connection types).
+        *
+        * The terminal connectors returned are not yet instantiated to any real
+        * connection. Each terminal connector can connect to one remote system at a
+        * time.
+        *
+        * @return a new list of {@link ITerminalConnector} instances defined in the
+        *         <code>org.eclipse.tm.terminal.control.connectors</code>
+        *         extension point
+        * @since org.eclipse.tm.terminal 2.0 return value is ITerminalConnector[]
+        */
+       public static ITerminalConnector[] makeTerminalConnectors() {
+               IConfigurationElement[] config = RegistryFactory.getRegistry().getConfigurationElementsFor("org.eclipse.tm.terminal.control.connectors"); //$NON-NLS-1$
+               List<ITerminalConnector> result=new ArrayList<ITerminalConnector>();
+               for (int i = 0; i < config.length; i++) {
+                       result.add(makeConnector(config[i]));
+               }
+               return result.toArray(new ITerminalConnector[result.size()]);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/TerminalState.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/TerminalState.java
new file mode 100644 (file)
index 0000000..14051ae
--- /dev/null
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+ * Michael Scharf (Wind River) - [262996] get rid of TerminalState.OPENED
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.provisional.api;
+
+/**
+ * Represent the sate of a terminal connection.
+ * In java 1.5 this would be an enum.
+ * @author Michael Scharf
+ *
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
+ * part of a work in progress. There is no guarantee that this API will
+ * work or that it will remain the same. Please do not use this API without
+ * consulting with the <a href="http://www.eclipse.org/tm/">Target Management</a> team.
+ * </p>
+ */
+public class TerminalState {
+       /**
+        * The terminal is not connected.
+        */
+       public final static TerminalState CLOSED=new TerminalState("CLOSED"); //$NON-NLS-1$
+
+       /**
+        * The terminal is about to connect.
+        */
+       public final static TerminalState CONNECTING=new TerminalState("CONNECTING..."); //$NON-NLS-1$
+
+       /**
+        * The terminal is connected.
+        */
+       public final static TerminalState CONNECTED=new TerminalState("CONNECTED"); //$NON-NLS-1$
+
+       private final String fState;
+
+       public TerminalState(String state) {
+               fState = state;
+       }
+
+       public String toString() {
+               return fState;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/provider/TerminalConnectorImpl.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/provisional/api/provider/TerminalConnectorImpl.java
new file mode 100644 (file)
index 0000000..a358335
--- /dev/null
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl 
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.provisional.api.provider;
+
+import java.io.OutputStream;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+
+/**
+ * Abstract base class for all terminal connector implementations to be
+ * registered via the <code>org.eclipse.tm.terminal.control.connectors</code>
+ * extension point.
+ *
+ * @since org.eclipse.tm.terminal 2.0
+ */
+public abstract class TerminalConnectorImpl {
+
+       /**
+        * The TerminalControl associated with this connector.
+        * Required for advertising state changes when needed.
+        */
+       protected ITerminalControl fControl;
+
+       /**
+        * Initialize this connector. This is called once after the constructor, in
+        * order to perform any required initializations such as loading required
+        * native libraries. Any work that may lead to runtime exceptions should be
+        * done in this method rather than in the constructor.
+        *
+        * @throws Exception when the connector fails to initialize (due to missing
+        *             required libraries, for instance).
+        */
+       public void initialize() throws Exception {
+       }
+
+       /**
+        * Connect using the current state of the settings.
+        * 
+        * This method is designed to be overridden by actual implementations, in
+        * order to open the streams required for communicating with the remote
+        * side. Extenders must call <code>super.connect(control)</code> as the
+        * first thing they are doing.
+        * 
+        * @param control Used to inform the UI about state changes and messages
+        *            from the connection.
+        */
+       public void connect(ITerminalControl control) {
+               Logger.log("entered."); //$NON-NLS-1$
+               fControl = control;
+       }
+
+       /**
+        * Disconnect if connected. Else do nothing. Has to set the state of the
+        * {@link ITerminalControl} when finished disconnecting.
+        */
+       public final void disconnect() {
+               Logger.log("entered."); //$NON-NLS-1$
+               doDisconnect();
+               fControl.setState(TerminalState.CLOSED);
+       }
+
+       /**
+        * Disconnect if connected. Else do nothing. Clients should override to
+        * perform any extra work needed for disconnecting.
+        */
+       protected void doDisconnect() {
+               // Do nothing by default
+       }
+
+    /**
+     * @return the terminal to remote stream (bytes written to this stream will
+     * be sent to the remote site). For the stream in the other direction (remote to
+     * terminal see {@link ITerminalControl#getRemoteToTerminalOutputStream()}
+     */
+       abstract public OutputStream getTerminalToRemoteStream();
+
+       /**
+        * @return A string that represents the settings of the connection. This representation
+        * may be shown in the status line of the terminal view.
+        */
+       abstract public String getSettingsSummary();
+
+       /**
+        * Test if local echo is needed. The default implementation returns
+        * <code>false</code>. Override to modify this behavior.
+        *
+        * @return true if a local echo is needed. TODO:Michael Scharf: this should
+        *         be handed within the connection....
+        */
+       public boolean isLocalEcho() {
+               return false;
+       }
+
+       /**
+        * Set or reset the settings store to the default values.
+        */
+       public void setDefaultSettings() {
+               // do nothing by default
+       }
+
+       /**
+        * Load the state or settings of this connection. Is typically called before
+        * {@link #connect(ITerminalControl)}.
+        *
+        * Connectors that have nothing to configure do not need to implement this.
+        * Those terminals that do have configuration need to override this method
+        * to load settings.
+        *
+        * @param store a string based data store. Short keys like "foo" can be used
+        *            to store the state of the connection.
+        */
+       public void load(ISettingsStore store) {
+               // do nothing by default
+       }
+
+       /**
+        * When the view or dialog containing the terminal is closed, the state of
+        * the connection is saved into the settings store <code>store</code>.
+        *
+        * Connectors that have no state or settings to persist do not need to
+        * override this. Others should override to persist their settings.
+        *
+        * @param store the store for persisting settings.
+        */
+       public void save(ISettingsStore store) {
+               // do nothing by default
+       }
+
+    /**
+        * Notify the remote site that the size of the terminal has changed.
+        *
+        * Concrete connectors should override this if they have the possibility to
+        * inform the remote about changed terminal size.
+        *
+        * @param newWidth the new width in characters.
+        * @param newHeight the new height in characters.
+        */
+       public void setTerminalSize(int newWidth, int newHeight) {
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java
new file mode 100644 (file)
index 0000000..7991014
--- /dev/null
@@ -0,0 +1,348 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [168197] Fix Terminal for CDC-1.1/Foundation-1.1
+ * Anton Leherbauer (Wind River) - [219589] Copy an entire line selection
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.textcanvas;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+
+abstract public class AbstractTextCanvasModel implements ITextCanvasModel {
+       protected List<ITextCanvasModelListener> fListeners = new ArrayList<ITextCanvasModelListener>();
+       private int fCursorLine;
+       private int fCursorColumn;
+       private boolean fShowCursor;
+       private long fCursorTime;
+       private boolean fCursorIsEnabled;
+       private final ITerminalTextDataSnapshot fSnapshot;
+       private int fLines;
+
+       private int fSelectionStartLine=-1;
+       private int fSeletionEndLine;
+       private int fSelectionStartCoumn;
+       private int fSelectionEndColumn;
+       private ITerminalTextDataSnapshot fSelectionSnapshot;
+       private String fCurrentSelection=""; //$NON-NLS-1$
+       private final Point fSelectionAnchor=new Point(0,0);
+       /**
+        * do not update while update is running
+        */
+       boolean fInUpdate;
+       private int fCols;
+
+       public AbstractTextCanvasModel(ITerminalTextDataSnapshot snapshot) {
+               fSnapshot=snapshot;
+               fLines=fSnapshot.getHeight();
+       }
+       public void addCellCanvasModelListener(ITextCanvasModelListener listener) {
+               fListeners.add(listener);
+       }
+
+       public void removeCellCanvasModelListener(ITextCanvasModelListener listener) {
+               fListeners.remove(listener);
+       }
+
+       protected void fireCellRangeChanged(int x, int y, int width, int height) {
+               for (Iterator<ITextCanvasModelListener> iter = fListeners.iterator(); iter.hasNext();) {
+                       ITextCanvasModelListener listener = iter.next();
+                       listener.rangeChanged(x, y, width, height);
+               }
+       }
+       protected void fireDimensionsChanged( int width,int height) {
+               for (Iterator<ITextCanvasModelListener> iter = fListeners.iterator(); iter.hasNext();) {
+                       ITextCanvasModelListener listener = iter.next();
+                       listener.dimensionsChanged(width,height);
+               }
+
+       }
+       protected void fireTerminalDataChanged() {
+               for (Iterator<ITextCanvasModelListener> iter = fListeners.iterator(); iter.hasNext();) {
+                       ITextCanvasModelListener listener = iter.next();
+                       listener.terminalDataChanged();
+               }
+
+       }
+
+       public ITerminalTextDataReadOnly getTerminalText() {
+               return fSnapshot;
+       }
+       protected ITerminalTextDataSnapshot getSnapshot() {
+               return fSnapshot;
+       }
+       protected void updateSnapshot() {
+               if(!fInUpdate && fSnapshot.isOutOfDate()) {
+                       fInUpdate=true;
+                       try {
+                               fSnapshot.updateSnapshot(false);
+                               if(fSnapshot.hasTerminalChanged())
+                                       fireTerminalDataChanged();
+                               // TODO why does hasDimensionsChanged not work??????
+                               //                      if(fSnapshot.hasDimensionsChanged())
+                               //                              fireDimensionsChanged();
+                               if(fLines!=fSnapshot.getHeight() || fCols!=fSnapshot.getWidth()) {
+                                       fireDimensionsChanged(fSnapshot.getWidth(),fSnapshot.getHeight());
+                                       fLines=fSnapshot.getHeight();
+                                       fCols=fSnapshot.getWidth();
+                               }
+                               int y=fSnapshot.getFirstChangedLine();
+                               // has any line changed?
+                               if(y<Integer.MAX_VALUE) {
+                                       int height=fSnapshot.getLastChangedLine()-y+1;
+                                       fireCellRangeChanged(0, y, fSnapshot.getWidth(), height);
+                               }
+
+                       } finally {
+                               fInUpdate=false;
+                       }
+               }
+       }
+       /**
+        * must be called from the UI thread
+        */
+       public void update() {
+               // do the poll....
+               updateSnapshot();
+               updateSelection();
+               updateCursor();
+       }
+
+
+       public int getCursorColumn() {
+               return fCursorColumn;
+       }
+
+       public int getCursorLine() {
+               return fCursorLine;
+       }
+
+       public boolean isCursorOn() {
+               return fShowCursor && fCursorIsEnabled;
+       }
+       /**
+        * should be called regularly to draw an update of the
+        * blinking cursor
+        */
+       protected void updateCursor() {
+               if(!fCursorIsEnabled)
+                       return;
+               int cursorLine=getSnapshot().getCursorLine();
+               int cursorColumn=getSnapshot().getCursorColumn();
+               // if cursor at the end put it to the end of the
+               // last line...
+               if(cursorLine>=getSnapshot().getHeight()) {
+                       cursorLine=getSnapshot().getHeight()-1;
+                       cursorColumn=getSnapshot().getWidth()-1;
+               }
+               // has the cursor moved?
+               if(fCursorLine!=cursorLine || fCursorColumn!=cursorColumn) {
+                       // hide the old cursor!
+                       fShowCursor=false;
+                       // clean the previous cursor
+                       // bug 206363: paint also the char to the left and right of the cursor - see also below
+                       int col=fCursorColumn;
+                       int width=2;
+                       if(col>0) {
+                               col--;
+                               width++;
+                       }
+                       fireCellRangeChanged(col, fCursorLine, width, 1);
+                       // the cursor is shown when it moves!
+                       fShowCursor=true;
+                       fCursorTime=System.currentTimeMillis();
+                       fCursorLine=cursorLine;
+                       fCursorColumn=cursorColumn;
+                       // and draw the new cursor
+                       fireCellRangeChanged(fCursorColumn, fCursorLine, 1, 1);
+               } else {
+                       long t=System.currentTimeMillis();
+                       // TODO make the cursor blink time customisable
+                       if(t-fCursorTime>500) {
+                               fShowCursor=!fShowCursor;
+                               fCursorTime=t;
+                               // on some windows machines, there is some left
+                               // over when updating the cursor .
+                               // https://bugs.eclipse.org/bugs/show_bug.cgi?id=206363
+                               int col=fCursorColumn;
+                               int width=2;
+                               if(col>0) {
+                                       col--;
+                                       width++;
+                               }
+                               fireCellRangeChanged(col, fCursorLine, width, 1);
+                       }
+               }
+       }
+       public void setVisibleRectangle(int startLine, int startCol, int height, int width) {
+               fSnapshot.setInterestWindow(Math.max(0,startLine), Math.max(1,height));
+               update();
+       }
+       protected void showCursor(boolean show) {
+               fShowCursor=true;
+       }
+       public void setCursorEnabled(boolean visible) {
+               fCursorTime=System.currentTimeMillis();
+               fShowCursor=visible;
+               fCursorIsEnabled=visible;
+               fireCellRangeChanged(fCursorColumn, fCursorLine, 1, 1);
+       }
+       public boolean isCursorEnabled() {
+               return fCursorIsEnabled;
+       }
+
+       public Point getSelectionEnd() {
+               if(fSelectionStartLine<0)
+                       return null;
+               else
+                       return new Point(fSelectionEndColumn, fSeletionEndLine);
+       }
+
+       public Point getSelectionStart() {
+               if (fSelectionStartLine < 0)
+                       return null;
+               else
+                       return new Point(fSelectionStartCoumn,fSelectionStartLine);
+       }
+       public Point getSelectionAnchor() {
+               if(fSelectionStartLine<0)
+                       return null;
+               return new Point(fSelectionAnchor.x,fSelectionAnchor.y);
+       }
+       public void setSelectionAnchor(Point anchor) {
+               fSelectionAnchor.x=anchor.x;
+               fSelectionAnchor.y=anchor.y;
+       }
+
+       public void setSelection(int startLine, int endLine, int startColumn, int endColumn) {
+//             System.err.println(startLine+","+endLine+","+startColumn+","+endColumn);
+               doSetSelection(startLine, endLine, startColumn, endColumn);
+               fCurrentSelection=extractSelectedText();
+       }
+       private void doSetSelection(int startLine, int endLine, int startColumn, int endColumn) {
+               assert(startLine<0 || startLine<=endLine);
+               if(startLine>=0) {
+                       if(fSelectionSnapshot==null) {
+                               fSelectionSnapshot=fSnapshot.getTerminalTextData().makeSnapshot();
+                               fSelectionSnapshot.updateSnapshot(true);
+                       }
+               } else if(fSelectionSnapshot!=null) {
+                       fSelectionSnapshot.detach();
+                       fSelectionSnapshot=null;
+               }
+               int oldStart=fSelectionStartLine;
+               int oldEnd=fSeletionEndLine;
+               fSelectionStartLine = startLine;
+               fSeletionEndLine = endLine;
+               fSelectionStartCoumn = startColumn;
+               fSelectionEndColumn = endColumn;
+               if(fSelectionSnapshot!=null) {
+                       fSelectionSnapshot.setInterestWindow(0, fSelectionSnapshot.getHeight());
+               }
+               int changedStart;
+               int changedEnd;
+               if(oldStart<0) {
+                       changedStart=fSelectionStartLine;
+                       changedEnd=fSeletionEndLine;
+               } else if(fSelectionStartLine<0) {
+                       changedStart=oldStart;
+                       changedEnd=oldEnd;
+               } else {
+                       changedStart=Math.min(oldStart, fSelectionStartLine);
+                       changedEnd=Math.max(oldEnd, fSeletionEndLine);
+               }
+               if(changedStart>=0) {
+                       fireCellRangeChanged(0, changedStart, fSnapshot.getWidth(), changedEnd-changedStart+1);
+               }
+       }
+
+       public boolean hasLineSelection(int line) {
+               if (fSelectionStartLine < 0)
+                       return false;
+               else
+                       return line >= fSelectionStartLine && line <= fSeletionEndLine;
+       }
+
+       public String getSelectedText() {
+               return fCurrentSelection;
+       }
+       /**
+        * Calculates the currently selected text
+        * @return the currently selected text
+        */
+       private String extractSelectedText() {
+               if(fSelectionStartLine<0 || fSelectionStartCoumn<0 || fSelectionSnapshot==null)
+                       return ""; //$NON-NLS-1$
+               StringBuffer buffer=new StringBuffer();
+               for (int line = fSelectionStartLine; line <= fSeletionEndLine; line++) {
+                       String text;
+                       char[] chars=fSelectionSnapshot.getChars(line);
+                       if(chars!=null) {
+                               text=new String(chars);
+                               if(line==fSeletionEndLine && fSelectionEndColumn >= 0)
+                                       text=text.substring(0, Math.min(fSelectionEndColumn+1,text.length()));
+                               if(line==fSelectionStartLine)
+                                       text=text.substring(Math.min(fSelectionStartCoumn,text.length()));
+                               // get rid of the empty space at the end of the lines
+                               // text=text.replaceAll("\000+$","");  //$NON-NLS-1$//$NON-NLS-2$
+                               // <J2ME-CDC-1.1 version>
+                               int i = text.length() - 1;
+                               while (i >= 0 && text.charAt(i) == '\000') {
+                                       i--;
+                               }
+                               text = text.substring(0, i + 1);
+                               // </J2ME-CDC-1.1 version>
+                               // null means space
+                               text=text.replace('\000', ' ');
+                       } else {
+                               text=""; //$NON-NLS-1$
+                       }
+                       buffer.append(text);
+                       if(line < fSeletionEndLine && !fSelectionSnapshot.isWrappedLine(line))
+                               buffer.append('\n');
+               }
+               return buffer.toString();
+       }
+       private void updateSelection() {
+               if (fSelectionSnapshot != null && fSelectionSnapshot.isOutOfDate()) {
+                       fSelectionSnapshot.updateSnapshot(true);
+                       // has the selection moved?
+                       if (fSelectionSnapshot != null && fSelectionStartLine >= 0 && fSelectionSnapshot.getScrollWindowSize() > 0) {
+                               int start = fSelectionStartLine + fSelectionSnapshot.getScrollWindowShift();
+                               int end = fSeletionEndLine + fSelectionSnapshot.getScrollWindowShift();
+                               if (start < 0)
+                                       if (end >= 0)
+                                               start = 0;
+                                       else
+                                               start = -1;
+                               doSetSelection(start, end, fSelectionStartCoumn, fSelectionEndColumn);
+                       }
+                       // check if the content of the selection has changed. If the content has
+                       // changed, clear the selection
+                       if (fCurrentSelection.length()>0 && fSelectionSnapshot != null
+                                       && fSelectionSnapshot.getFirstChangedLine() <= fSeletionEndLine
+                                       && fSelectionSnapshot.getLastChangedLine() >= fSelectionStartLine) {
+                               // has the selected text changed?
+                               if (!fCurrentSelection.equals(extractSelectedText())) {
+                                       setSelection(-1, -1, -1, -1);
+                               }
+                       }
+                       // update the observed window...
+                       if (fSelectionSnapshot != null)
+                               // todo make -1 to work!
+                               fSelectionSnapshot.setInterestWindow(0, fSelectionSnapshot.getHeight());
+               }
+       }
+
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/GridCanvas.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/GridCanvas.java
new file mode 100644 (file)
index 0000000..40ab4bf
--- /dev/null
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [294468] Fix scroller and text line rendering
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.textcanvas;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ScrollBar;
+
+/**
+ * A Grid based Canvas. The canvas has rows and columns.
+ * CellPainting is done with the abstract method drawCell
+ */
+abstract public class GridCanvas extends VirtualCanvas {
+       /** width of a cell */
+       private int fCellWidth;
+       /** height of a cell */
+       private int fCellHeight;
+
+       public GridCanvas(Composite parent, int style) {
+               super(parent, style);
+               addListener(SWT.MouseWheel, new Listener() {
+                       public void handleEvent(Event event) {
+                               if(getVerticalBar().isVisible()) {
+                                       int delta=-fCellHeight;
+                                       if(event.count<0)
+                                               delta=-delta;
+                                       scrollYDelta(delta);
+                               }
+                               event.doit=false;
+                       }
+               });
+
+       }
+
+       /** template method paint.
+        * iterates over all cells in the clipping rectangle and paints them.
+        */
+       protected void paint(GC gc) {
+               Rectangle clipping=gc.getClipping();
+               if(clipping.width==0 || clipping.height==0)
+                       return;
+               Rectangle clientArea= getScreenRectInVirtualSpace();
+               // Beginning coordinates
+               int xOffset=clientArea.x;
+               int yOffset=clientArea.y;
+               int colFirst=virtualXToCell(xOffset+clipping.x);
+               if(colFirst>getCols())
+                       colFirst=getCols();
+               else if (colFirst < 0) {
+                       colFirst = 0;
+               }
+               int rowFirst=virtualYToCell(yOffset+clipping.y);
+               // End coordinates
+               int colLast=virtualXToCell(xOffset+clipping.x+clipping.width+fCellWidth);
+               if(colLast>getCols())
+                       colLast=getCols();
+               int rowLast=virtualYToCell(yOffset+clipping.y+clipping.height+fCellHeight);
+               if(rowLast>getRows())
+                       rowLast=getRows();
+               // System.out.println(rowFirst+"->"+rowLast+" "+System.currentTimeMillis());
+               // draw the cells
+               for(int row=rowFirst;row<=rowLast;row++) {
+                       int cx=colFirst*fCellWidth-xOffset;
+                       int cy=row*fCellHeight-yOffset;
+                       drawLine(gc,row,cx,cy,colFirst,colLast);
+               }
+               paintUnoccupiedSpace(gc,clipping);
+       }
+       /**
+        * @param gc
+        * @param row the line to draw
+        * @param x coordinate on screen
+        * @param y coordinate on screen
+        * @param colFirst first column to draw
+        * @param colLast last column to draw
+        */
+       abstract void drawLine(GC gc, int row, int x, int y, int colFirst, int colLast);
+
+       abstract protected int getRows();
+       abstract protected int getCols();
+
+       protected void setCellWidth(int cellWidth) {
+               fCellWidth = cellWidth;
+               getHorizontalBar().setIncrement(fCellWidth);
+       }
+
+       public int getCellWidth() {
+               return fCellWidth;
+       }
+
+       protected void setCellHeight(int cellHeight) {
+               fCellHeight = cellHeight;
+               getVerticalBar().setIncrement(fCellHeight);
+       }
+
+       public int getCellHeight() {
+               return fCellHeight;
+       }
+
+       int virtualXToCell(int x) {
+               return x/fCellWidth;
+       }
+
+       int virtualYToCell(int y) {
+               return y/fCellHeight;
+       }
+
+       protected Point screenPointToCell(int x, int y) {
+               x=screenXtoVirtual(x)/fCellWidth;
+               y=screenYtoVirtual(y)/fCellHeight;
+               return new Point(x,y);
+       }
+
+       Point screenPointToCell(Point point) {
+               return screenPointToCell(point.x,point.y);
+       }
+
+       protected Point cellToOriginOnScreen(int x, int y) {
+               x=virtualXtoScreen(fCellWidth*x);
+               y=virtualYtoScreen(fCellHeight*y);
+               return new Point(x,y);
+       }
+
+       Point cellToOriginOnScreen(Point cell) {
+               return cellToOriginOnScreen(cell.x,cell.y);
+       }
+
+       Rectangle getCellScreenRect(Point cell) {
+               return getCellScreenRect(cell.x,cell.y);
+       }
+
+       Rectangle getCellScreenRect(int x, int y) {
+               x=fCellWidth*virtualXtoScreen(x);
+               y=fCellHeight*virtualYtoScreen(y);
+               return new Rectangle(x,y,fCellWidth,fCellHeight);
+       }
+
+       protected Rectangle getCellVirtualRect(Point cell) {
+               return getCellVirtualRect(cell.x,cell.y);
+       }
+
+       Rectangle getCellVirtualRect(int x, int y) {
+               x=fCellWidth*x;
+               y=fCellHeight*y;
+               return new Rectangle(x,y,fCellWidth,fCellHeight);
+       }
+       protected void viewRectangleChanged(int x, int y, int width, int height) {
+               int cellX=virtualXToCell(x);
+               int cellY=virtualYToCell(y);
+               // End coordinates
+               int xE=virtualXToCell(x+width);
+//             if(xE>getCols())
+//                     xE=getCols();
+               int yE=virtualYToCell(y+height);
+//             if(yE>getRows())
+//                     yE=getRows();
+               visibleCellRectangleChanged(cellX,cellY,xE-cellX,yE-cellY);
+       }
+       
+       /**
+        * Called when the viewed part has changed.
+        * Override when you need this information....
+        * Is only called if the values change (well, almost)
+        * @param x origin of visible cells
+        * @param y origin of visible cells
+        * @param width number of cells visible in x direction
+        * @param height number of cells visible in y direction
+        */
+       protected void visibleCellRectangleChanged(int x, int y, int width, int height) {
+       }
+       
+       protected void setVirtualExtend(int width, int height) {
+               int cellHeight = getCellHeight();
+               if (cellHeight > 0) {
+                       height -= height % cellHeight;
+               }
+               super.setVirtualExtend(width, height);
+       }
+       
+       protected void setVirtualOrigin(int x, int y) {
+               int cellHeight = getCellHeight();
+               if (cellHeight > 0) {
+                       int remainder = y % cellHeight;
+                       if (remainder < 0) {
+                               y -= (cellHeight + remainder);
+                       } else {
+                               y -= remainder;
+                       }
+               }
+               super.setVirtualOrigin(x, y);
+       }
+       
+       protected void scrollY(ScrollBar vBar) {
+               int vSelection = vBar.getSelection ();
+               Rectangle bounds = getVirtualBounds();
+               int y = -vSelection;
+               int cellHeight = getCellHeight();
+               if (cellHeight > 0) {
+                       int remainder = y % cellHeight;
+                       if (remainder < 0) {
+                               y -= (cellHeight + remainder);
+                       } else {
+                               y -= remainder;
+                       }
+               }
+               int deltaY = y - bounds.y;
+               if(deltaY!=0) {
+                       scrollSmart(0,deltaY);
+                       setVirtualOrigin(bounds.x, bounds.y += deltaY);
+               }
+               if (-bounds.y + getRows() * getCellHeight() >= bounds.height) {
+                       // scrolled to bottom - need to redraw bottom area
+                       Rectangle clientRect = getClientArea();
+                       redraw(0, clientRect.height - fCellHeight, clientRect.width, fCellHeight, false);
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ILinelRenderer.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ILinelRenderer.java
new file mode 100644 (file)
index 0000000..e03946b
--- /dev/null
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [294468] Fix scroller and text line rendering
+ * Martin Oberhuber (Wind River) - [265352][api] Allow setting fonts programmatically
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.textcanvas;
+
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+
+/**
+ *
+ */
+public interface ILinelRenderer {
+       int getCellWidth();
+       int getCellHeight();
+       void drawLine(ITextCanvasModel model, GC gc, int line, int x, int y, int colFirst, int colLast);
+       /**
+        * Update for a font change from the global JFace Registry.
+        */
+       void onFontChange();
+       /**
+        * Set a new font
+        * @param fontName Jface name of the new font
+        * @since 3.2
+        */
+       void updateFont(String fontName);
+       void setInvertedColors(boolean invert);
+       Color getDefaultBackgroundColor();
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModel.java
new file mode 100644 (file)
index 0000000..1891c60
--- /dev/null
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.textcanvas;
+
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
+
+public interface ITextCanvasModel {
+       void addCellCanvasModelListener(ITextCanvasModelListener listener);
+       void removeCellCanvasModelListener(ITextCanvasModelListener listener);
+
+       ITerminalTextDataReadOnly getTerminalText();
+       /**
+        * This is is
+        * @param startLine
+        * @param startCol
+        * @param height
+        * @param width
+        */
+       void setVisibleRectangle(int startLine, int startCol, int height, int width);
+
+       /**
+        * @return true when the cursor is shown (used for blinking cursors)
+        */
+       boolean isCursorOn();
+       /**
+        * Show/Hide the cursor.
+        * @param visible
+        */
+       void setCursorEnabled(boolean visible);
+
+       /**
+        * @return true if the cursor is shown.
+        */
+       boolean isCursorEnabled();
+
+       /**
+        * @return the line of the cursor
+        */
+       int getCursorLine();
+       /**
+        * @return the column of the cursor
+        */
+       int getCursorColumn();
+
+       /**
+        * @return the start of the selection or null if nothing is selected
+        * {@link Point#x} is the column and {@link Point#y} is the line.
+        */
+       Point getSelectionStart();
+       /**
+        * @return the end of the selection or null if nothing is selected
+        * {@link Point#x} is the column and {@link Point#y} is the line.
+        */
+       Point getSelectionEnd();
+
+       Point getSelectionAnchor();
+
+       void setSelectionAnchor(Point anchor);
+       /**
+        * Sets the selection. A negative startLine clears the selection.
+        * @param startLine
+        * @param endLine
+        * @param startColumn
+        * @param endColumn
+        */
+       void setSelection(int startLine, int endLine, int startColumn, int endColumn);
+
+       /**
+        * @param line
+        * @return true if line is part of the selection
+        */
+       boolean hasLineSelection(int line);
+
+       String getSelectedText();
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModelListener.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/ITextCanvasModelListener.java
new file mode 100644 (file)
index 0000000..4e09027
--- /dev/null
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.textcanvas;
+
+/**
+ */
+public interface ITextCanvasModelListener {
+       void rangeChanged(int col, int line, int width, int height);
+       void dimensionsChanged(int cols, int rows);
+       /**
+        * Called when any text change happened. Used to scroll to the
+        * end of text in auto scroll mode. This does not get fired
+        * when the window of interest has changed!
+        */
+       void terminalDataChanged();
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/PipedInputStream.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/PipedInputStream.java
new file mode 100644 (file)
index 0000000..f0e1132
--- /dev/null
@@ -0,0 +1,312 @@
+/*******************************************************************************
+ * Copyright (c) 1996, 2011 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Douglas Lea (Addison Wesley) - [cq:1552] BoundedBufferWithStateTracking adapted to BoundedByteBuffer 
+ * Martin Oberhuber (Wind River) - the waitForAvailable method
+ * Martin Oberhuber (Wind River) - [208166] Avoid unnecessary arraycopy in BoundedByteBuffer
+ * Pawel Piech (Wind River) - [333613] "Job found still running" after shutdown
+ *******************************************************************************/
+
+package org.eclipse.tm.internal.terminal.textcanvas;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * The main purpose of this class is to start a runnable in the
+ * display thread when data is available and to pretend no data 
+ * is available after a given amount of time the runnable is running.
+ *
+ */
+public class PipedInputStream extends InputStream {
+       /**
+        * The output stream used by the terminal backend to write to the terminal
+        */
+       protected final OutputStream fOutputStream;
+       /**
+        * A blocking byte queue.
+        */
+       private final BoundedByteBuffer fQueue;
+       
+       /**
+        * A byte bounded buffer used to synchronize the input and the output stream.
+        * <p>
+        * Adapted from BoundedBufferWithStateTracking 
+        * http://gee.cs.oswego.edu/dl/cpj/allcode.java
+        * http://gee.cs.oswego.edu/dl/cpj/
+        * <p>
+        * BoundedBufferWithStateTracking is part of the examples for the book
+        * Concurrent Programming in Java: Design Principles and Patterns by
+        * Doug Lea (ISBN 0-201-31009-0). Second edition published by 
+        * Addison-Wesley, November 1999. The code is 
+        * Copyright(c) Douglas Lea 1996, 1999 and released to the public domain
+        * and may be used for any purposes whatsoever. 
+        * <p>
+        * For some reasons a solution based on
+        * PipedOutputStream/PipedIntputStream
+        * does work *very* slowly:
+        *              http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4404700
+        * <p>
+        * 
+        */
+       private class BoundedByteBuffer {
+               protected final byte[] fBuffer; // the elements
+               protected int fPutPos = 0; // circular indices
+               protected int fTakePos = 0;
+               protected int fUsedSlots = 0; // the count
+               private boolean fClosed;
+               public BoundedByteBuffer(int capacity) throws IllegalArgumentException {
+                       // make sure we don't deadlock on too small capacity
+                       if (capacity <= 0)
+                               throw new IllegalArgumentException();
+                       fBuffer = new byte[capacity];
+               }
+               /**
+                * @return the bytes available for {@link #read()}
+                * Must be called with a lock on this!
+                */
+               public int available() {
+                   return fUsedSlots;
+               }
+               /**
+                * Writes a single byte to the buffer. Blocks if the buffer is full.
+                * @param b byte to write to the buffer
+                * @throws InterruptedException when the thread is interrupted while waiting
+                *     for the buffer to become ready
+                * Must be called with a lock on this!
+                */
+               public void write(byte b) throws InterruptedException {
+                       while (fUsedSlots == fBuffer.length)
+                               // wait until not full
+                               wait();
+
+                       fBuffer[fPutPos] = b;
+                       fPutPos = (fPutPos + 1) % fBuffer.length; // cyclically increment
+
+                       if (fUsedSlots++ == 0) // signal if was empty
+                               notifyAll();
+               }
+               public int getFreeSlots() {
+                       return fBuffer.length - fUsedSlots;
+               }
+               public void write(byte[] b, int off, int len) throws InterruptedException {
+                       assert len<=getFreeSlots();
+                       while (fUsedSlots == fBuffer.length)
+                               // wait until not full
+                               wait();
+                       int n = Math.min(len, fBuffer.length - fPutPos);
+                       System.arraycopy(b, off, fBuffer, fPutPos, n);
+                       if (fPutPos + len > fBuffer.length)
+                               System.arraycopy(b, off + n, fBuffer, 0, len - n);
+                       fPutPos = (fPutPos + len) % fBuffer.length; // cyclically increment
+                       boolean wasEmpty = fUsedSlots == 0;
+                       fUsedSlots += len;
+                       if (wasEmpty) // signal if was empty
+                               notifyAll();
+               }
+               /**
+                * Read a single byte. Blocks until a byte is available.
+                * @return a byte from the buffer
+                * @throws InterruptedException when the thread is interrupted while waiting
+                *     for the buffer to become ready
+                * Must be called with a lock on this!
+                */
+               public int read() throws InterruptedException {
+                       while (fUsedSlots == 0) {
+                               if(fClosed)
+                                       return -1;
+                               // wait until not empty
+                               wait();
+                       }
+                       byte b = fBuffer[fTakePos];
+                       fTakePos = (fTakePos + 1) % fBuffer.length;
+
+                       if (fUsedSlots-- == fBuffer.length) // signal if was full
+                               notifyAll();
+                       return b;
+               }
+               public int read(byte[] cbuf, int off, int len) throws InterruptedException {
+                       assert len<=available();
+                       while (fUsedSlots == 0) {
+                               if(fClosed)
+                                       return 0;
+                               // wait until not empty
+                               wait();
+                       }
+                       int n = Math.min(len, fBuffer.length - fTakePos);
+                       System.arraycopy(fBuffer, fTakePos, cbuf, off, n);
+                       if (fTakePos + len > n)
+                               System.arraycopy(fBuffer, 0, cbuf, off + n, len - n);
+                       fTakePos = (fTakePos + len) % fBuffer.length;
+                       boolean wasFull = fUsedSlots == fBuffer.length;
+                       fUsedSlots -= len;
+                       if(wasFull)
+                               notifyAll();
+                               
+                       return len;
+               }
+               public void close() {
+                       fClosed=true;
+                       notifyAll();
+               }
+               public boolean isClosed() {
+                       return fClosed;
+               }
+       }
+
+       /**
+        * An output stream that calls {@link PipedInputStream#textAvailable} 
+        * every time data is written to the stream. The data is written to
+        * {@link PipedInputStream#fQueue}.
+        * 
+        */
+       class PipedOutputStream extends OutputStream {
+               public void write(byte[] b, int off, int len) throws IOException {
+                       try {
+                               synchronized (fQueue) {
+                                       if(fQueue.isClosed())
+                                               throw new IOException("Stream is closed!"); //$NON-NLS-1$
+                                       int written=0;
+                                       while(written<len) {
+                                               if(fQueue.getFreeSlots()==0) {
+                                                       // if no slots available, write one byte and block
+                                                       // until free slots are available
+                                                       fQueue.write(b[off + written]);
+                                                       written++;
+                                               } else {
+                                                       // if slots are available, write as much as 
+                                                       // we can in one junk
+                                                       int n=Math.min(fQueue.getFreeSlots(), len-written);
+                                                       fQueue.write(b, off + written, n);
+                                                       written+=n;
+                                               }
+                                       }
+                               }
+                       } catch (InterruptedException e) {
+                               Thread.currentThread().interrupt();
+                       }
+               }
+
+               public void write(int b) throws IOException {
+                       try {
+                               synchronized(fQueue) {
+                                       if(fQueue.isClosed())
+                                               throw new IOException("Stream is closed!"); //$NON-NLS-1$
+                                       fQueue.write((byte)b);
+                               }
+                       } catch (InterruptedException e) {
+                               Thread.currentThread().interrupt();
+                       }
+               }
+               public void close() throws IOException {
+                       synchronized(fQueue) {
+                               fQueue.close();
+                       }
+               }
+       }
+       /**
+        * @param bufferSize the size of the buffer of the output stream
+        */
+       public PipedInputStream(int bufferSize) {
+               fOutputStream =new PipedOutputStream();
+               fQueue=new BoundedByteBuffer(bufferSize);
+       }
+       /**
+        * @return the output stream used by the backend to write to the terminal.
+        */
+       public OutputStream getOutputStream() {
+               return fOutputStream;
+       }
+       /**
+        * Waits until data is available for reading.
+        * @param millis see {@link Object#wait(long)}
+        * @throws InterruptedException when the thread is interrupted while waiting
+        *     for the buffer to become ready
+        */
+       public void waitForAvailable(long millis) throws InterruptedException {
+               synchronized(fQueue) {
+                       if(fQueue.available()==0 && !fQueue.fClosed) 
+                               fQueue.wait(millis);
+               }
+       } 
+       /**
+        * Must be called in the Display Thread!
+        * @return number of characters available for reading.
+        */
+       public int available() {
+               synchronized(fQueue) {
+                       return fQueue.available();
+               }
+       }
+       /**
+        * @return the next available byte. Check with {@link #available}
+        * if characters are available.
+        */
+       public int read() throws IOException  {
+               try {
+                       synchronized (fQueue) {
+                               return fQueue.read();
+                       }
+               } catch (InterruptedException e) {
+                       Thread.currentThread().interrupt();
+                       return -1;
+               }
+       }
+    /**
+     * Closing a <tt>PipedInputStream</tt> is the same as closing the output stream. 
+     * The stream will allow reading data that's still in the pipe after which it will
+     * throw an <tt>IOException</tt>.
+     */
+       public void close() throws IOException {
+           synchronized(fQueue) {
+               fQueue.close();
+           }
+       }
+
+       public int read(byte[] cbuf, int off, int len) throws IOException {
+               int n=0;
+               if(len==0)
+                       return 0;
+               // read as much as we can using a single synchronized statement
+               try {
+                       synchronized (fQueue) {         
+                               // if nothing available, block and read one byte
+                               if (fQueue.available() == 0) {
+                                       // block now until at least one byte is available
+                                       int c = fQueue.read();
+                                       // are we at the end of stream
+                                       if (c == -1)
+                                               return -1;
+                                       cbuf[off] = (byte) c;
+                                       n++;
+                               }
+                               // is there more data available?
+                               if (n < len && fQueue.available() > 0) {
+                                       // read at most available()
+                                       int nn = Math.min(fQueue.available(), len - n);
+                                       // are we at the end of the stream?
+                                       if (nn == 0 && fQueue.isClosed()) {
+                                               // if no byte was read, return -1 to indicate end of stream
+                                               // else return the bytes we read up to now
+                                               if (n == 0)
+                                                       n = -1;
+                                               return n;
+                                       }
+                                       fQueue.read(cbuf, off + n, nn);
+                                       n += nn;
+                               }
+                               
+                       }
+               } catch (InterruptedException e) {
+                       Thread.currentThread().interrupt();
+               }
+               return n;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/PollingTextCanvasModel.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/PollingTextCanvasModel.java
new file mode 100644 (file)
index 0000000..b54fdf6
--- /dev/null
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [420928] Terminal widget leaks memory
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.textcanvas;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+
+/**
+ * @author Michael.Scharf@scharf-software.com
+ *
+ */
+public class PollingTextCanvasModel extends AbstractTextCanvasModel {
+       private static final int DEFAULT_POLL_INTERVAL = 50;
+       int fPollInterval = -1;
+
+       /**
+        * 
+        */
+       public PollingTextCanvasModel(ITerminalTextDataSnapshot snapshot) {
+               super(snapshot);
+               startPolling();
+       }
+       public void setUpdateInterval(int t) {
+               fPollInterval = t;
+       }
+       public void stopPolling() {
+               // timerExec only dispatches if the delay is >=0
+               fPollInterval = -1;
+       }
+       public void startPolling() {
+               if (fPollInterval < 0) {
+                       fPollInterval = DEFAULT_POLL_INTERVAL;
+                       Display.getDefault().timerExec(fPollInterval, new Runnable(){
+                               public void run() {
+                                       update();
+                                       Display.getDefault().timerExec(fPollInterval, this);
+                               }
+                       });
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/StyleMap.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/StyleMap.java
new file mode 100644 (file)
index 0000000..81e63e2
--- /dev/null
@@ -0,0 +1,296 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Michael Scharf (Wind River) - [205260] Terminal does not take the font from the preferences
+ * Michael Scharf (Wind River) - [209746] There are cases where some colors not displayed correctly
+ * Michael Scharf (Wind River) - [206328] Terminal does not draw correctly with proportional fonts
+ * Martin Oberhuber (Wind River) - [247700] Terminal uses ugly fonts in JEE package
+ * Martin Oberhuber (Wind River) - [335358] Fix Terminal color definition
+ * Martin Oberhuber (Wind River) - [265352][api] Allow setting fonts programmatically
+ * Martin Oberhuber (Wind River) - [475422] Fix display on MacOSX Retina
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.textcanvas;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tm.internal.terminal.preferences.ITerminalConstants;
+import org.eclipse.tm.terminal.model.Style;
+import org.eclipse.tm.terminal.model.StyleColor;
+
+public class StyleMap {
+       private static final String BLACK = "black"; //$NON-NLS-1$
+       private static final String WHITE = "white"; //$NON-NLS-1$
+       private static final String WHITE_FOREGROUND = "white_foreground"; //$NON-NLS-1$
+       private static final String GRAY = "gray"; //$NON-NLS-1$
+       private static final String MAGENTA = "magenta"; //$NON-NLS-1$
+       private static final String CYAN = "cyan"; //$NON-NLS-1$
+       private static final String YELLOW = "yellow"; //$NON-NLS-1$
+       private static final String BLUE = "blue"; //$NON-NLS-1$
+       private static final String GREEN = "green"; //$NON-NLS-1$
+       private static final String RED = "red"; //$NON-NLS-1$
+       
+       private static final String PREFIX = "org.eclipse.tm.internal."; //$NON-NLS-1$
+       String fFontName=ITerminalConstants.FONT_DEFINITION;
+       Map<StyleColor, Color> fColorMapForeground=new HashMap<StyleColor, Color>();
+       Map<StyleColor, Color> fColorMapBackground=new HashMap<StyleColor, Color>();
+       Map<StyleColor, Color> fColorMapIntense=new HashMap<StyleColor, Color>();
+       private Point fCharSize;
+       private final Style fDefaultStyle;
+       private boolean fInvertColors;
+       private boolean fProportional;
+       private final int[] fOffsets=new int[256];
+       StyleMap() {
+               initColors();
+               fDefaultStyle=Style.getStyle(StyleColor.getStyleColor(BLACK),StyleColor.getStyleColor(WHITE));
+               updateFont();
+       }
+       private void initColors() {
+               initForegroundColors();
+               initBackgroundColors();
+               initIntenseColors();
+       }
+       private void initForegroundColors() {
+               if(fInvertColors) {
+                       setColor(fColorMapForeground, WHITE, 0, 0, 0);
+                       setColor(fColorMapForeground, WHITE_FOREGROUND, 50, 50, 50);
+                       setColor(fColorMapForeground, BLACK, 229, 229, 229);
+               } else {
+                       setColor(fColorMapForeground, WHITE, 255, 255, 255);
+                       setColor(fColorMapForeground, WHITE_FOREGROUND, 229, 229, 229);
+                       setColor(fColorMapForeground, BLACK, 50, 50, 50);
+               }
+               setColor(fColorMapForeground, RED, 205, 0, 0);
+               setColor(fColorMapForeground, GREEN, 0, 205, 0);
+               setColor(fColorMapForeground, BLUE, 0, 0, 238);
+               setColor(fColorMapForeground, YELLOW, 205, 205, 0);
+               setColor(fColorMapForeground, CYAN, 0, 205, 205);
+               setColor(fColorMapForeground, MAGENTA, 205, 0, 205);
+               setColor(fColorMapForeground, GRAY, 229, 229, 229);
+       }
+
+       private void initBackgroundColors() {
+               if(fInvertColors) {
+                       setColor(fColorMapBackground, WHITE, 0, 0, 0);
+                       setColor(fColorMapBackground, WHITE_FOREGROUND, 50, 50, 50); // only used when colors are inverse
+                       setColor(fColorMapBackground, BLACK, 255, 255, 255);
+               } else {
+                       setColor(fColorMapBackground, WHITE, 255, 255, 255);
+                       setColor(fColorMapBackground, WHITE_FOREGROUND, 229, 229, 229);
+                       setColor(fColorMapBackground, BLACK, 0, 0, 0);
+               }
+               setColor(fColorMapBackground, RED, 205, 0, 0);
+               setColor(fColorMapBackground, GREEN, 0, 205, 0);
+               setColor(fColorMapBackground, BLUE, 0, 0, 238);
+               setColor(fColorMapBackground, YELLOW, 205, 205, 0);
+               setColor(fColorMapBackground, CYAN, 0, 205, 205);
+               setColor(fColorMapBackground, MAGENTA, 205, 0, 205);
+               setColor(fColorMapBackground, GRAY, 229, 229, 229);
+       }
+
+       private void initIntenseColors() {
+               if(fInvertColors) {
+                       setColor(fColorMapIntense, WHITE, 127, 127, 127);
+                       setColor(fColorMapIntense, WHITE_FOREGROUND, 0, 0, 0); // only used when colors are inverse
+                       setColor(fColorMapIntense, BLACK, 255, 255, 255);
+               } else {
+                       setColor(fColorMapIntense, WHITE, 255, 255, 255);
+                       setColor(fColorMapIntense, WHITE_FOREGROUND, 255, 255, 255);
+                       setColor(fColorMapIntense, BLACK, 0, 0, 0);
+               }
+               setColor(fColorMapIntense, RED, 255, 0, 0);
+               setColor(fColorMapIntense, GREEN, 0, 255, 0);
+               setColor(fColorMapIntense, BLUE, 92, 92, 255);
+               setColor(fColorMapIntense, YELLOW, 255, 255, 0);
+               setColor(fColorMapIntense, CYAN, 0, 255, 255);
+               setColor(fColorMapIntense, MAGENTA, 255, 0, 255);
+               setColor(fColorMapIntense, GRAY, 255, 255, 255);
+       }
+       
+       private void setColor(Map<StyleColor, Color> colorMap, String name, int r, int g, int b) {
+               String colorName=PREFIX+r+"-"+g+"-"+b;  //$NON-NLS-1$//$NON-NLS-2$
+               Color color=JFaceResources.getColorRegistry().get(colorName);
+               if(color==null) {
+                       JFaceResources.getColorRegistry().put(colorName, new RGB(r,g,b));
+                       color=JFaceResources.getColorRegistry().get(colorName);
+               }
+               colorMap.put(StyleColor.getStyleColor(name), color);
+               colorMap.put(StyleColor.getStyleColor(name.toUpperCase()), color);
+       }
+
+       public Color getForegrondColor(Style style) {
+               style = defaultIfNull(style);
+               Map<StyleColor, Color> map = style.isBold() ? fColorMapIntense : fColorMapForeground;
+               //Map map = fColorMapForeground;
+               if(style.isReverse())
+                       return getColor(map ,style.getBackground());
+               else
+                       return  getColor(map ,style.getForground());
+       }
+       public Color getBackgroundColor(Style style) {
+               style = defaultIfNull(style);
+               if(style.isReverse())
+                       return getColor(fColorMapBackground,style.getForground());
+               else
+                       return getColor(fColorMapBackground,style.getBackground());
+       }
+       Color getColor(Map<StyleColor, Color> map,StyleColor color) {
+               Color c=map.get(color);
+               if(c==null) {
+                       c=Display.getCurrent().getSystemColor(SWT.COLOR_GRAY);
+               }
+               return c;
+       }
+       private Style defaultIfNull(Style style) {
+               if(style==null)
+                       style=fDefaultStyle;
+               return style;
+       }
+       public void setInvertedColors(boolean invert) {
+               if(invert==fInvertColors)
+                       return;
+               fInvertColors=invert;
+               initColors();
+       }
+//     static Font getBoldFont(Font font) {
+//             FontData fontDatas[] = font.getFontData();
+//             FontData data = fontDatas[0];
+//             return new Font(Display.getCurrent(), data.getName(), data.getHeight(), data.getStyle()|SWT.BOLD);
+//     }
+
+       public Font getFont(Style style) {
+               style = defaultIfNull(style);
+               if(style.isBold()) {
+                       return  JFaceResources.getFontRegistry().getBold(fFontName);
+               } else if(style.isUnderline()) {
+                       return  JFaceResources.getFontRegistry().getItalic(fFontName);
+
+               }
+               return  JFaceResources.getFontRegistry().get(fFontName);
+       }
+
+       public Font getFont() {
+               return  JFaceResources.getFontRegistry().get(fFontName);
+
+       }
+       public int getFontWidth() {
+               return fCharSize.x;
+       }
+       public int getFontHeight() {
+               return fCharSize.y;
+       }
+       public void updateFont() {
+               updateFont(ITerminalConstants.FONT_DEFINITION);
+       }
+       /**
+        * Update the StyleMap for a new font name.
+        * The font name must be a valid name in the Jface font registry.
+        * @param fontName Jface name of the new font to use.
+        * @since 3.2
+        */
+       public void updateFont(String fontName) {
+               Display display=Display.getCurrent();
+               GC gc = new GC (display);
+               if (JFaceResources.getFontRegistry().hasValueFor(fontName)) {
+                       fFontName = fontName;
+               } else {
+                       //fall back to "basic jface text font"
+                       fFontName = "org.eclipse.jface.textfont"; //$NON-NLS-1$
+               }
+               gc.setFont(getFont());
+               fCharSize = gc.textExtent ("W"); //$NON-NLS-1$
+               fProportional=false;
+               
+               for (char c = ' '; c <= '~'; c++) {
+                       // consider only the first 128 chars for deciding if a font
+                       // is proportional. Collect char width as a side-effect.
+                       if(measureChar(gc, c, true))
+                               fProportional=true;
+               }
+               if(fProportional) {
+                       // Widest char minus the padding on the left and right:
+                       // Looks much better for small fonts
+                       fCharSize.x-=2;
+                       // Collect width of the upper characters (for offset calculation)
+                       for (char c = '~'+1; c < fOffsets.length; c++) {
+                               measureChar(gc, c,false);
+                       }
+                       // Calculate offsets based on each character's width and the bounding box
+                       for (int i = ' '; i < fOffsets.length; i++) {
+                               fOffsets[i]=(fCharSize.x-fOffsets[i])/2;
+                       }
+               } else {
+                       // Non-Proportional: Reset all offsets (eg after font change)
+                       for (int i = 0; i < fOffsets.length; i++) {
+                               fOffsets[i]=0;
+                       }
+                       String t = "The quick brown Fox jumps over the Lazy Dog."; //$NON-NLS-1$
+                       Point ext=gc.textExtent(t);
+                       if(ext.x != fCharSize.x * t.length()) {
+                               //Bug 475422: On OSX with Retina display and due to scaling,
+                               //a text many be shorter than the sum of its bounding boxes.
+                               //Because even with fixed width font, bounding box size 
+                               //may not be an integer but a fraction eg 6.75 pixels.
+                               //
+                               //Painting in proportional mode ensures that each character
+                               //is painted individually into its proper bounding box, rather
+                               //than using an optimization where Strings would be drawn as
+                               //a whole. This fixes the "fractional bounding box" problem.
+                               fProportional=true;
+                       }
+                       //measure font in boldface, too, and if wider then treat like proportional
+                       gc.setFont(getFont(fDefaultStyle.setBold(true)));
+                       Point charSizeBold = gc.textExtent("W"); //$NON-NLS-1$
+                       if (fCharSize.x != charSizeBold.x) {
+                               fProportional=true;
+                       }
+               }
+               gc.dispose ();
+       }
+       /**
+        * @param gc
+        * @param c
+        * @param updateMax
+        * @return true if the the font is proportional
+        */
+       private boolean measureChar(GC gc, char c, boolean updateMax) {
+               boolean proportional=false;
+               Point ext=gc.textExtent(String.valueOf(c));
+               if(ext.x>0 && ext.y>0 && (fCharSize.x!=ext.x || fCharSize.y!=ext.y)) {
+                       proportional=true;
+                       if(updateMax) {
+                               fCharSize.x=Math.max(fCharSize.x, ext.x);
+                               fCharSize.y=Math.max(fCharSize.y, ext.y);
+                       }
+               }
+               fOffsets[c]=ext.x;
+               return proportional;
+       }
+       public boolean isFontProportional() {
+               return fProportional;
+       }
+       /**
+        * Return the offset in pixels required to center a given character
+        * @param c the character to measure
+        * @return the offset in x direction to center this character
+        */
+       public int getCharOffset(char c) {
+               if(c>=fOffsets.length)
+                       return 0;
+               return fOffsets[c];
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java
new file mode 100644 (file)
index 0000000..a8b9508
--- /dev/null
@@ -0,0 +1,470 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Michael Scharf (Wind River) - [240098] The cursor should not blink when the terminal is disconnected
+ * Uwe Stieber (Wind River) - [281328] The very first few characters might be missing in the terminal control if opened and connected programmatically
+ * Martin Oberhuber (Wind River) - [294327] After logging in, the remote prompt is hidden
+ * Anton Leherbauer (Wind River) - [294468] Fix scroller and text line rendering
+ * Uwe Stieber (Wind River) - [205486] Fix ScrollLock always moving to line 1
+ * Anton Leherbauer (Wind River) - [219589] Copy an entire line selection
+ * Anton Leherbauer (Wind River) - [196465] Resizing Terminal changes Scroller location
+ * Anton Leherbauer (Wind River) - [324608] Terminal has strange scrolling behaviour
+ * Martin Oberhuber (Wind River) - [265352][api] Allow setting fonts programmatically
+ * Anton Leherbauer (Wind River) - [434749] UnhandledEventLoopException when copying to clipboard while the selection is empty
+ * Davy Landman (CWI) - [475267][api] Allow custom mouse listeners
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.textcanvas;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.MouseMoveListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tm.internal.terminal.control.ITerminalMouseListener;
+
+/**
+ * A cell oriented Canvas. Maintains a list of "cells".
+ * It can either be vertically or horizontally scrolled.
+ * The CellRenderer is responsible for painting the cell.
+ */
+public class TextCanvas extends GridCanvas {
+       protected final ITextCanvasModel fCellCanvasModel;
+       /** Renders the cells */
+       private final ILinelRenderer fCellRenderer;
+       private boolean fScrollLock;
+       private Point fDraggingStart;
+       private Point fDraggingEnd;
+       private boolean fHasSelection;
+       private ResizeListener fResizeListener;
+       private final List<ITerminalMouseListener> fMouseListeners;
+
+       // The minSize is meant to determine the minimum size of the backing store
+       // (grid) into which remote data is rendered. If the viewport is smaller
+       // than that minimum size, the backing store size remains at the minSize,
+       // and a scrollbar is shown instead. In reality, this has the following
+       // issues or effects today:
+       //  (a) Bug 281328: For very early data coming in before the widget is 
+       //      realized, the minSize determines into what initial grid that is 
+       //      rendered. See also @link{#addResizeHandler(ResizeListener)}.
+       //  (b) Bug 294468: Since we have redraw and size computation problems 
+       //      with horizontal scrollers, for now the minColumns must be small
+       //      enough to avoid a horizontal scroller appearing in most cases.
+       //  (b) Bug 294327: since we have problems with the vertical scroller
+       //      showing the correct location, minLines must be small enough
+       //      to avoid a vertical scroller or new data may be rendered off-screen.
+       // As a compromise, we have been working with a 20x4 since the Terminal
+       // inception, though many users would want a 80x24 minSize and backing
+       // store. Pros and cons of the small minsize:
+       //   + consistent "remote size==viewport size", vi works as expected
+       //   - dumb terminals which expect 80x24 render garbled on small viewport.
+       // If bug 294468 were resolved, an 80 wide minSize would be preferrable
+       // since it allows switching the terminal viewport small/large as needed,
+       // without destroying the backing store. For a complete solution, 
+       // Bug 196462 tracks the request for a user-defined fixed-widow-size-mode.
+       private int fMinColumns=80;
+       private int fMinLines=4;
+       private boolean fCursorEnabled;
+       private boolean fResizing;
+       
+       /**
+        * Create a new CellCanvas with the given SWT style bits.
+        * (SWT.H_SCROLL and SWT.V_SCROLL are automatically added).
+        */
+       public TextCanvas(Composite parent, ITextCanvasModel model, int style,ILinelRenderer cellRenderer) {
+               super(parent, style | SWT.H_SCROLL | SWT.V_SCROLL);
+               fCellRenderer=cellRenderer;
+               setCellWidth(fCellRenderer.getCellWidth());
+               setCellHeight(fCellRenderer.getCellHeight());
+               fCellCanvasModel=model;
+               fCellCanvasModel.addCellCanvasModelListener(new ITextCanvasModelListener(){
+                       public void rangeChanged(int col, int line, int width, int height) {
+                               if(isDisposed()) return;
+                               repaintRange(col,line,width,height);
+                       }
+                       public void dimensionsChanged(int cols, int rows) {
+                               if(isDisposed()) return;
+                               calculateGrid();
+                       }
+                       public void terminalDataChanged() {
+                               if(isDisposed()) return;
+                               
+                               // scroll to end (unless scroll lock is active)
+                               if (!fResizing) {
+                                       calculateGrid();
+                                       scrollToEnd();
+                               }
+                       }
+               });
+               // let the cursor blink if the text canvas gets the focus...
+               addFocusListener(new FocusListener(){
+                       public void focusGained(FocusEvent e) {
+                               fCellCanvasModel.setCursorEnabled(fCursorEnabled);
+                       }
+                       public void focusLost(FocusEvent e) {
+                               fCellCanvasModel.setCursorEnabled(false);
+                       }});
+               fMouseListeners = new ArrayList<ITerminalMouseListener>();
+               addMouseListener(new MouseListener(){
+                       public void mouseDoubleClick(MouseEvent e) {
+                               if (fMouseListeners.size() > 0) {
+                                       Point pt = screenPointToCell(e.x, e.y);
+                                       if (pt != null) {
+                                               for (ITerminalMouseListener l : fMouseListeners) {
+                                                       l.mouseDoubleClick(fCellCanvasModel.getTerminalText(), pt.y, pt.x, e.button);
+                                               }
+                                       }
+                               }
+                       }
+                       public void mouseDown(MouseEvent e) {
+                               if(e.button==1) { // left button
+                                       fDraggingStart=screenPointToCell(e.x, e.y);
+                                       fHasSelection=false;
+                                       if((e.stateMask&SWT.SHIFT)!=0) {
+                                               Point anchor=fCellCanvasModel.getSelectionAnchor();
+                                               if(anchor!=null)
+                                                       fDraggingStart=anchor;
+                                       } else {
+                                               fCellCanvasModel.setSelectionAnchor(fDraggingStart);
+                                       }
+                                       fDraggingEnd=null;
+                               }
+                               if (fMouseListeners.size() > 0) {
+                                       Point pt = screenPointToCell(e.x, e.y);
+                                       if (pt != null) {
+                                               for (ITerminalMouseListener l : fMouseListeners) {
+                                                       l.mouseDown(fCellCanvasModel.getTerminalText(), pt.y, pt.x, e.button);
+                                               }
+                                       }
+                               }
+                       }
+                       public void mouseUp(MouseEvent e) {
+                               if(e.button==1) { // left button
+                                       updateHasSelection(e);
+                                       if(fHasSelection)
+                                               setSelection(screenPointToCell(e.x, e.y));
+                                       else
+                                               fCellCanvasModel.setSelection(-1,-1,-1,-1);
+                                       fDraggingStart=null;
+                               }
+                               if (fMouseListeners.size() > 0) {
+                                       Point pt = screenPointToCell(e.x, e.y);
+                                       if (pt != null) {
+                                               for (ITerminalMouseListener l : fMouseListeners) {
+                                                       l.mouseUp(fCellCanvasModel.getTerminalText(), pt.y, pt.x, e.button);
+                                               }
+                                       }
+                               }
+                       }
+               });
+               addMouseMoveListener(new MouseMoveListener() {
+
+                       public void mouseMove(MouseEvent e) {
+                               if (fDraggingStart != null) {
+                                       updateHasSelection(e);
+                                       setSelection(screenPointToCell(e.x, e.y));
+                               }
+                       }
+               });
+               serVerticalBarVisible(true);
+               setHorizontalBarVisible(false);
+       }
+
+       /**
+        * The user has to drag the mouse to at least one character to make a selection.
+        * Once this is done, even a one char selection is OK.
+        *
+        * @param e
+        */
+       private void updateHasSelection(MouseEvent e) {
+               if(fDraggingStart!=null) {
+                       Point p=screenPointToCell(e.x, e.y);
+                       if(fDraggingStart.x!=p.x||fDraggingStart.y!=p.y)
+                               fHasSelection=true;
+               }
+       }
+
+       void setSelection(Point p) {
+               if (fDraggingStart !=null && !p.equals(fDraggingEnd)) {
+                       fDraggingEnd = p;
+                       if (compare(p, fDraggingStart) < 0) {
+                               // bug 219589 - make sure selection start coordinates are non-negative
+                               int startColumn = Math.max(0, p.x);
+                               int startRow = Math.max(p.y, 0);
+                               fCellCanvasModel.setSelection(startRow, fDraggingStart.y, startColumn, fDraggingStart.x);
+                       } else {
+                               fCellCanvasModel.setSelection(fDraggingStart.y, p.y, fDraggingStart.x, p.x);
+
+                       }
+               }
+       }
+
+       int compare(Point p1, Point p2) {
+               if (p1.equals(p2))
+                       return 0;
+               if (p1.y == p2.y) {
+                       if (p1.x > p2.x)
+                               return 1;
+                       else
+                               return -1;
+               }
+               if (p1.y > p2.y) {
+                       return 1;
+               } else {
+                       return -1;
+               }
+       }
+       public ILinelRenderer getCellRenderer() {
+               return fCellRenderer;
+       }
+
+       public int getMinColumns() {
+               return fMinColumns;
+       }
+
+       public void setMinColumns(int minColumns) {
+               fMinColumns = minColumns;
+       }
+
+       public int getMinLines() {
+               return fMinLines;
+       }
+
+       public void setMinLines(int minLines) {
+               fMinLines = minLines;
+       }
+
+       protected void onResize(boolean init) {
+               if(fResizeListener!=null) {
+                       Rectangle bonds=getClientArea();
+                       int cellHeight = getCellHeight();
+                       int cellWidth = getCellWidth();
+                       int lines=bonds.height/cellHeight;
+                       int columns=bonds.width/cellWidth;
+                       // when the view is minimised, its size is set to 0
+                       // we don't sent this to the terminal!
+                       if((lines>0 && columns>0) || init) {
+                               if(columns<fMinColumns) {
+                                       if(!isHorizontalBarVisble()) {
+                                               setHorizontalBarVisible(true);
+                                               bonds=getClientArea();
+                                               lines=bonds.height/cellHeight;
+                                       }
+                                       columns=fMinColumns;
+                               } else if(columns>=fMinColumns && isHorizontalBarVisble()) {
+                                       setHorizontalBarVisible(false);
+                                       bonds=getClientArea();
+                                       lines=bonds.height/cellHeight;
+                                       columns=bonds.width/cellWidth;
+                               }
+                               if(lines<fMinLines)
+                                       lines=fMinLines;
+                               fResizeListener.sizeChanged(lines, columns);
+                       }
+               }
+               super.onResize();
+               calculateGrid();
+       }
+
+       protected void onResize() {
+               fResizing = true;
+               try {
+                       onResize(false);
+               } finally {
+                       fResizing = false;
+               }
+       }
+
+       private void calculateGrid() {
+               Rectangle virtualBounds = getVirtualBounds();
+               setRedraw(false);
+               try {
+                       setVirtualExtend(getCols()*getCellWidth(),getRows()*getCellHeight());
+                       getParent().layout();
+                       if (fResizing) {
+                               // scroll to end if view port was near last line
+                               Rectangle viewRect = getViewRectangle();
+                               if (virtualBounds.height - (viewRect.y + viewRect.height) < getCellHeight() * 2)
+                                       scrollToEnd();
+                       }
+               } finally {
+                       setRedraw(true);
+               }
+       }
+       void scrollToEnd() {
+               if(!fScrollLock) {
+                       int y=-(getRows()*getCellHeight()-getClientArea().height);
+                       if (y > 0) {
+                               y = 0;
+                       }
+                       Rectangle v=getViewRectangle();
+                       if(v.y!=-y) {
+                               setVirtualOrigin(v.x,y);
+                       }
+                       // make sure the scroll area is correct:
+                       scrollY(getVerticalBar());
+                       scrollX(getHorizontalBar());
+               }
+       }
+       /**
+        *
+        * @return true if the cursor should be shown on output....
+        */
+       public boolean isScrollLock() {
+               return fScrollLock;
+       }
+       /**
+        * If set then if the size changes
+        */
+       public void setScrollLock(boolean scrollLock) {
+               fScrollLock=scrollLock;
+       }
+       protected void repaintRange(int col, int line, int width, int height) {
+               Point origin=cellToOriginOnScreen(col,line);
+               Rectangle r=new Rectangle(origin.x,origin.y,width*getCellWidth(),height*getCellHeight());
+               repaint(r);
+       }
+       protected void drawLine(GC gc, int line, int x, int y, int colFirst, int colLast) {
+               fCellRenderer.drawLine(fCellCanvasModel, gc,line,x,y,colFirst, colLast);
+       }
+       protected Color getTerminalBackgroundColor() {
+               return fCellRenderer.getDefaultBackgroundColor();
+       }
+       protected void visibleCellRectangleChanged(int x, int y, int width, int height) {
+               fCellCanvasModel.setVisibleRectangle(y,x,height,width);
+               update();
+       }
+       protected int getCols() {
+               return fCellCanvasModel.getTerminalText().getWidth();
+       }
+       protected int getRows() {
+               return fCellCanvasModel.getTerminalText().getHeight();
+       }
+       public String getSelectionText() {
+               // TODO -- create a hasSelectionMethod!
+               return fCellCanvasModel.getSelectedText();
+       }
+       public void copy() {
+               String selectionText = getSelectionText();
+               if (selectionText != null && selectionText.length() > 0) {
+                       Clipboard clipboard = new Clipboard(getDisplay());
+                       clipboard.setContents(new Object[] { selectionText }, new Transfer[] { TextTransfer.getInstance() });
+                       clipboard.dispose();
+               }
+       }
+       public void selectAll() {
+               fCellCanvasModel.setSelection(0, fCellCanvasModel.getTerminalText().getHeight(), 0, fCellCanvasModel.getTerminalText().getWidth());
+               fCellCanvasModel.setSelectionAnchor(new Point(0,0));
+       }
+
+       /**
+        * @since 4.1
+        */
+       public void clearSelection() {
+               fCellCanvasModel.setSelection(-1,-1,-1,-1);
+       }
+
+       public boolean isEmpty() {
+               return false;
+       }
+       /**
+        * Gets notified when the visible size of the terminal changes.
+        * This should update the model!
+        *
+        */
+       public interface ResizeListener {
+               void sizeChanged(int lines, int columns);
+       }
+       /**
+        * @param listener this listener gets notified, when the size of
+        * the widget changed. It should change the dimensions of the underlying
+        * terminaldata
+        */
+       public void addResizeHandler(ResizeListener listener) {
+               if(fResizeListener!=null)
+                       throw new IllegalArgumentException("There can be at most one listener at the moment!"); //$NON-NLS-1$
+               fResizeListener=listener;
+
+               // Bug 281328: [terminal] The very first few characters might be missing in
+               //             the terminal control if opened and connected programmatically
+               //
+               // In case the terminal had not been visible yet or is too small (less than one
+               // line visible), the terminal should have a minimum size to avoid RuntimeExceptions.
+               Rectangle bonds=getClientArea();
+               if (bonds.height<getCellHeight() || bonds.width<getCellWidth()) {
+                       //Widget not realized yet, or minimized to < 1 item:
+                       //Just tell the listener our min size
+                       fResizeListener.sizeChanged(getMinLines(), getMinColumns());
+               } else {
+                       //Widget realized: compute actual size and force telling the listener
+                       onResize(true);
+               }
+       }
+
+       /**
+        * Notify about a change of the global Font Preference.
+        */
+       public void onFontChange() {
+               fCellRenderer.onFontChange();
+               setCellWidth(fCellRenderer.getCellWidth());
+               setCellHeight(fCellRenderer.getCellHeight());
+               calculateGrid();
+       }
+
+       public void updateFont(String fontName) {
+               fCellRenderer.updateFont(fontName);
+               setCellWidth(fCellRenderer.getCellWidth());
+               setCellHeight(fCellRenderer.getCellHeight());
+               calculateGrid();
+       }
+
+       public void setInvertedColors(boolean invert) {
+               fCellRenderer.setInvertedColors(invert);
+               redraw();
+       }
+
+       /**
+        * @return true if the cursor is enabled (blinking). By default the cursor is not enabled.
+        */
+       public boolean isCursorEnabled() {
+               return fCursorEnabled;
+       }
+
+       /**
+        * @param enabled enabling means that the cursor blinks
+        */
+       public void setCursorEnabled(boolean enabled) {
+               if(enabled!=fCursorEnabled) {
+                       fCursorEnabled=enabled;
+                       fCellCanvasModel.setCursorEnabled(fCursorEnabled);
+               }
+
+       }
+
+       public void addTerminalMouseListener(final ITerminalMouseListener listener) {
+               fMouseListeners.add(listener);
+       }
+
+       public void removeTerminalMouseListener(ITerminalMouseListener listener) {
+               fMouseListeners.remove(listener);
+       }
+}
+
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java
new file mode 100644 (file)
index 0000000..46497f4
--- /dev/null
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Michael Scharf (Wind River) - [205260] Terminal does not take the font from the preferences
+ * Michael Scharf (Wind River) - [206328] Terminal does not draw correctly with proportional fonts
+ * Anton Leherbauer (Wind River) - [294468] Fix scroller and text line rendering
+ * Martin Oberhuber (Wind River) - [265352][api] Allow setting fonts programmatically
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.textcanvas;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
+import org.eclipse.tm.terminal.model.LineSegment;
+import org.eclipse.tm.terminal.model.Style;
+
+/**
+ *
+ */
+public class TextLineRenderer implements ILinelRenderer {
+       private final ITextCanvasModel fModel;
+       StyleMap fStyleMap=new StyleMap();
+       public TextLineRenderer(TextCanvas c, ITextCanvasModel model) {
+               fModel=model;
+       }
+       /* (non-Javadoc)
+        * @see com.imagicus.thumbs.view.ICellRenderer#getCellWidth()
+        */
+       public int getCellWidth() {
+               return fStyleMap.getFontWidth();
+       }
+       /* (non-Javadoc)
+        * @see com.imagicus.thumbs.view.ICellRenderer#getCellHeight()
+        */
+       public int getCellHeight() {
+               return fStyleMap.getFontHeight();
+       }
+       public void drawLine(ITextCanvasModel model, GC gc, int line, int x, int y, int colFirst, int colLast) {
+               if(line<0 || line>=getTerminalText().getHeight() || colFirst>=getTerminalText().getWidth() || colFirst-colLast==0) {
+                       fillBackground(gc, x, y, getCellWidth()*(colLast-colFirst), getCellHeight());
+               } else {
+                       colLast=Math.min(colLast, getTerminalText().getWidth());
+                       LineSegment[] segments=getTerminalText().getLineSegments(line, colFirst, colLast-colFirst);
+                       for (int i = 0; i < segments.length; i++) {
+                               LineSegment segment=segments[i];
+                               Style style=segment.getStyle();
+                               setupGC(gc, style);
+                               String text=segment.getText();
+                               drawText(gc, x, y, colFirst, segment.getColumn(), text);
+                               drawCursor(model, gc, line, x, y, colFirst);
+                       }
+                       if(fModel.hasLineSelection(line)) {
+                               gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
+                               gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_LIST_SELECTION));
+                               Point start=model.getSelectionStart();
+                               Point end=model.getSelectionEnd();
+                               char[] chars=model.getTerminalText().getChars(line);
+                               if(chars==null)
+                                       return;
+                               int offset=0;
+                               if(start.y==line)
+                                       offset=start.x;
+                               offset=Math.max(offset, colFirst);
+                               int len;
+                               if(end.y==line)
+                                       len=end.x-offset+1;
+                               else
+                                       len=chars.length-offset+1;
+                               len=Math.min(len,chars.length-offset);
+                               if(len>0) {
+                                       String text=new String(chars,offset,len);
+                                       drawText(gc, x, y, colFirst, offset, text);
+                               }
+                       }
+               }
+       }
+
+       private void fillBackground(GC gc, int x, int y, int width, int height) {
+               Color bg=gc.getBackground();
+               gc.setBackground(getDefaultBackgroundColor());
+               gc.fillRectangle (x,y,width,height);
+               gc.setBackground(bg);
+
+       }
+
+       public Color getDefaultBackgroundColor() {
+               // null == default style
+               return fStyleMap.getBackgroundColor(null);
+       }
+       
+       private void drawCursor(ITextCanvasModel model, GC gc, int row, int x, int y, int colFirst) {
+               if(!model.isCursorOn())
+                       return;
+               int cursorLine=model.getCursorLine();
+
+               if(row==cursorLine) {
+                       int cursorColumn=model.getCursorColumn();
+                       if(cursorColumn<getTerminalText().getWidth()) {
+                               Style style=getTerminalText().getStyle(row, cursorColumn);
+                               if(style==null) {
+                                       // TODO make the cursor color customizable
+                                       style=Style.getStyle("BLACK", "WHITE");  //$NON-NLS-1$//$NON-NLS-2$
+                               }
+                               style=style.setReverse(!style.isReverse());
+                               setupGC(gc,style);
+                               String text=String.valueOf(getTerminalText().getChar(row, cursorColumn));
+                               drawText(gc, x, y, colFirst, cursorColumn, text);
+                       }
+               }
+       }
+       private void drawText(GC gc, int x, int y, int colFirst, int col, String text) {
+               int offset=(col-colFirst)*getCellWidth();
+               if(fStyleMap.isFontProportional()) {
+                       // draw the background
+                       // TODO why does this not work???????
+//                     gc.fillRectangle(x,y,fStyleMap.getFontWidth()*text.length(),fStyleMap.getFontHeight());
+                       for (int i = 0; i < text.length(); i++) {
+                               char c=text.charAt(i);
+                               int xx=x+offset+i*fStyleMap.getFontWidth();
+                               // TODO why do I have to draw the background character by character??????
+                               gc.fillRectangle(xx,y,fStyleMap.getFontWidth(),fStyleMap.getFontHeight());
+                               if(c!=' ' && c!='\000') {
+                                       gc.drawString(String.valueOf(c),fStyleMap.getCharOffset(c)+xx,y,true);
+                               }
+                       }
+               } else {
+                       text=text.replace('\000', ' ');
+                       gc.drawString(text,x+offset,y,false);
+               }
+       }
+       private void setupGC(GC gc, Style style) {
+               Color c=fStyleMap.getForegrondColor(style);
+               if(c!=gc.getForeground()) {
+                       gc.setForeground(c);
+               }
+               c=fStyleMap.getBackgroundColor(style);
+               if(c!=gc.getBackground()) {
+                       gc.setBackground(c);
+               }
+               Font f=fStyleMap.getFont(style);
+               if(f!=gc.getFont()) {
+                       gc.setFont(f);
+               }
+       }
+       ITerminalTextDataReadOnly getTerminalText() {
+               return fModel.getTerminalText();
+       }
+       public void onFontChange() {
+               fStyleMap.updateFont();
+       }
+       public void updateFont(String fontName) {
+               fStyleMap.updateFont(fontName);
+       }
+       public void setInvertedColors(boolean invert) {
+               fStyleMap.setInvertedColors(invert);
+
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/VirtualCanvas.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/VirtualCanvas.java
new file mode 100644 (file)
index 0000000..9d479c7
--- /dev/null
@@ -0,0 +1,348 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [294468] Fix scroller and text line rendering
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.textcanvas;
+
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ScrollBar;
+import org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin;
+
+/**
+ * A <code>Canvas</code> showing a virtual object.
+ * Virtual: the extent of the total canvas.
+ * Screen: the visible client area in the screen.
+ */
+public abstract class VirtualCanvas extends Canvas {
+
+       private final Rectangle fVirtualBounds = new Rectangle(0,0,0,0);
+       private Rectangle fClientArea;
+       /**
+        * prevent infinite loop in {@link #updateScrollbars()}
+        */
+       private boolean fInUpdateScrollbars;
+       private static boolean fInUpdateScrollbarsLogged;
+       
+       public VirtualCanvas(Composite parent, int style) {
+               super(parent, style|SWT.NO_BACKGROUND|SWT.NO_REDRAW_RESIZE);
+               fClientArea=getClientArea();
+               addListener(SWT.Paint, new Listener() {
+                       public void handleEvent(Event event) {
+                               paint(event.gc);
+                       }
+               });
+               addListener(SWT.Resize, new Listener() {
+                       public void handleEvent(Event event) {
+                               fClientArea=getClientArea();
+                               onResize();
+                       }
+               });
+               getVerticalBar().addListener(SWT.Selection, new Listener() {
+                       public void handleEvent(Event e) {
+                               scrollY((ScrollBar)e.widget);
+
+                       }
+
+               });
+               getHorizontalBar().addListener(SWT.Selection, new Listener() {
+                       public void handleEvent(Event e) {
+                               scrollX((ScrollBar)e.widget);
+
+                       }
+               });
+       }
+       protected void onResize() {
+               updateViewRectangle();
+       }
+       protected void scrollX(ScrollBar hBar) {
+               int hSelection = hBar.getSelection ();
+               int destX = -hSelection - fVirtualBounds.x;
+               fVirtualBounds.x = -hSelection;
+               scrollSmart(destX, 0);
+               updateViewRectangle();
+       }
+       protected void scrollXDelta(int delta) {
+               getHorizontalBar().setSelection(-fVirtualBounds.x+delta);
+               scrollX(getHorizontalBar());
+       }
+
+       protected void scrollY(ScrollBar vBar) {
+               int vSelection = vBar.getSelection ();
+               int destY = -vSelection - fVirtualBounds.y;
+               if(destY!=0) {
+                       fVirtualBounds.y = -vSelection;
+                       scrollSmart(0,destY);
+                       updateViewRectangle();
+               }
+               
+       }
+       protected void scrollYDelta(int delta) {
+               getVerticalBar().setSelection(-fVirtualBounds.y+delta);
+               scrollY(getVerticalBar());
+       }
+
+
+       protected void scrollSmart(int deltaX, int deltaY) {
+               if (deltaX != 0 || deltaY != 0) {
+                       Rectangle rect = getBounds();
+                       scroll (deltaX, deltaY, 0, 0, rect.width, rect.height, false);
+               }
+       }
+
+       /**
+        * @param rect in virtual space
+        */
+       protected void revealRect(Rectangle rect) {
+               Rectangle visibleRect=getScreenRectInVirtualSpace();
+               // scroll the X part
+               int deltaX=0;
+               if(rect.x<visibleRect.x) {
+                       deltaX=rect.x-visibleRect.x;
+               } else if(visibleRect.x+visibleRect.width<rect.x+rect.width){
+                       deltaX=(rect.x+rect.width)-(visibleRect.x+visibleRect.width);
+               }
+               if(deltaX!=0) {
+                       getHorizontalBar().setSelection(-fVirtualBounds.x+deltaX);
+                       scrollX(getHorizontalBar());
+               }
+       
+               // scroll the Y part
+               int deltaY=0;
+               if(rect.y<visibleRect.y){
+                       deltaY=rect.y-visibleRect.y;
+               } else if(visibleRect.y+visibleRect.height<rect.y+rect.height){
+                       deltaY=(rect.y+rect.height)-(visibleRect.y+visibleRect.height);
+                       
+               }
+               if(deltaY!=0) {
+                       getVerticalBar().setSelection(-fVirtualBounds.y+deltaY);
+                       scrollY(getVerticalBar());
+               }
+       }
+
+       protected void repaint(Rectangle r) {
+               if(isDisposed())
+                       return;
+               if(inClipping(r,fClientArea)) {
+                       redraw(r.x, r.y, r.width, r.height, true);
+                       update();
+               }
+       }
+
+       /**
+        * Paint the virtual canvas.
+        * Override to implement actual paint method.
+        * @param gc graphics context to paint in
+        */
+       abstract protected void paint(GC gc);
+       protected Color getTerminalBackgroundColor() {
+//             return getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND);
+               return getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
+       }
+       protected void paintUnoccupiedSpace(GC gc, Rectangle clipping) {
+               int width=fVirtualBounds.width + fVirtualBounds.x;
+               int height=fVirtualBounds.height + fVirtualBounds.y;
+               int marginWidth = (clipping.x+clipping.width) - width;
+               int marginHeight = (clipping.y+clipping.height) - height;
+               if(marginWidth>0||marginHeight>0){
+                       Color bg=getBackground();
+                       gc.setBackground(getTerminalBackgroundColor());
+                       if (marginWidth > 0) {
+                               gc.fillRectangle (width, clipping.y, marginWidth, clipping.height);
+                       }
+                       if (marginHeight > 0) {
+                               gc.fillRectangle (clipping.x, height, clipping.width, marginHeight);
+                       }
+                       gc.setBackground(bg);
+               }
+       }
+       /**
+        * @private
+        */
+       protected boolean inClipping(Rectangle clipping, Rectangle r) {
+               // TODO check if this is OK in all cases (the <=!)
+               // 
+               if(r.x+r.width<=clipping.x)
+                       return false;
+               if(clipping.x+clipping.width<=r.x)
+                       return false;
+               if(r.y+r.height<=clipping.y)
+                       return false;
+               if(clipping.y+clipping.height<=r.y)
+                       return false;
+               
+               return true;
+       }
+       /**
+        * @return the screen rect in virtual space (starting with (0,0))
+        * of the visible screen. (x,y>=0)
+        */
+       protected Rectangle getScreenRectInVirtualSpace() {
+               Rectangle r= new Rectangle(fClientArea.x-fVirtualBounds.x,fClientArea.y-fVirtualBounds.y,fClientArea.width,fClientArea.height);
+               return r;
+       }
+       /**
+        * @return the rect in virtual space (starting with (0,0))
+        * of the visible screen. (x,y>=0)
+        */
+       protected Rectangle getRectInVirtualSpace(Rectangle r) {
+               return new Rectangle(r.x-fVirtualBounds.x,r.y-fVirtualBounds.y,r.width,r.height);
+       }
+       
+       /**
+        * Sets the extent of the virtual display area
+        * @param width width of the display area
+        * @param height height of the display area
+        */
+       protected void setVirtualExtend(int width, int height) {
+               fVirtualBounds.width=width;
+               fVirtualBounds.height=height;
+               updateScrollbars();
+               updateViewRectangle();
+       }
+       /**
+        * sets the scrolling origin. Also sets the scrollbars.
+        * Does NOT redraw!
+        * Use negative values (move the virtual origin to the top left
+        * to see something in the screen (which is located at (0,0))
+        * @param x
+        * @param y
+        */
+       protected void setVirtualOrigin(int x, int y) {
+               if (fVirtualBounds.x != x || fVirtualBounds.y != y) {
+                       fVirtualBounds.x=x;
+                       fVirtualBounds.y=y;
+                       getHorizontalBar().setSelection(-x);
+                       getVerticalBar().setSelection(-y);
+                       updateViewRectangle();
+               }
+       }
+       protected Rectangle getVirtualBounds() {
+               return cloneRectangle(fVirtualBounds);
+       }
+       /**
+        * @param x
+        * @return the virtual coordinate in screen space
+        */
+       protected int virtualXtoScreen(int x) {
+               return x+fVirtualBounds.x;
+       }
+       protected int virtualYtoScreen(int y) {
+               return y+fVirtualBounds.y;
+       }
+       protected int screenXtoVirtual(int x) {
+               return x-fVirtualBounds.x;
+       }
+       protected int screenYtoVirtual(int y) {
+               return y-fVirtualBounds.y;
+       }
+       /** called when the viewed part is changing */
+       private final Rectangle fViewRectangle=new Rectangle(0,0,0,0);
+       protected void updateViewRectangle() {
+               if(
+                               fViewRectangle.x==-fVirtualBounds.x 
+                               && fViewRectangle.y==-fVirtualBounds.y
+                               && fViewRectangle.width==fClientArea.width
+                               && fViewRectangle.height==fClientArea.height
+                       )
+                       return;
+               fViewRectangle.x=-fVirtualBounds.x;
+               fViewRectangle.y=-fVirtualBounds.y;
+               fViewRectangle.width=fClientArea.width;
+               fViewRectangle.height=fClientArea.height;
+               viewRectangleChanged(fViewRectangle.x,fViewRectangle.y,fViewRectangle.width,fViewRectangle.height);
+       }
+       protected Rectangle getViewRectangle() {
+               return cloneRectangle(fViewRectangle);
+       }
+       private Rectangle cloneRectangle(Rectangle r) {
+               return new Rectangle(r.x,r.y,r.width,r.height);
+       }
+       /**
+        * Called when the viewed part has changed.
+        * Override when you need this information....
+        * Is only called if the values change!
+        * @param x visible in virtual space
+        * @param y visible in virtual space
+        * @param width
+        * @param height
+        */
+       protected void viewRectangleChanged(int x, int y, int width, int height) {
+       }
+       /**
+        * @private
+        */
+       private void updateScrollbars() {
+               // don't get into infinite loops....
+               if(!fInUpdateScrollbars) {
+                       fInUpdateScrollbars=true;
+                       try {
+                               doUpdateScrollbar();
+                       } finally {
+                               fInUpdateScrollbars=false;
+                       }
+               } else {
+                       if(!fInUpdateScrollbarsLogged) {
+                               fInUpdateScrollbarsLogged=true;
+                               TerminalPlugin.getDefault().getLog().log(new Status(IStatus.WARNING, 
+                                               TerminalPlugin.PLUGIN_ID, IStatus.OK, "Unexpected Recursion in terminal", //$NON-NLS-1$
+                                               new RuntimeException()));
+                       }
+               }
+       }
+       private void doUpdateScrollbar() {
+               Rectangle clientArea= getClientArea();
+               ScrollBar horizontal= getHorizontalBar();
+               // even if setVisible was called on the scrollbar, isVisible
+               // returns false if its parent is not visible. 
+               if(!isVisible() || horizontal.isVisible()) {
+                       horizontal.setPageIncrement(clientArea.width - horizontal.getIncrement());
+                       int max= fVirtualBounds.width;
+                       horizontal.setMaximum(max);
+                       horizontal.setThumb(clientArea.width);
+               }
+               ScrollBar vertical= getVerticalBar();
+               // even if setVisible was called on the scrollbar, isVisible
+               // returns false if its parent is not visible. 
+               if(!isVisible() || vertical.isVisible()) {
+                       vertical.setPageIncrement(clientArea.height - vertical.getIncrement());
+                       int max= fVirtualBounds.height;
+                       vertical.setMaximum(max);
+                       vertical.setThumb(clientArea.height);
+               }
+       }
+       protected boolean isVertialBarVisible() {
+               return getVerticalBar().isVisible();
+       }
+       protected void serVerticalBarVisible(boolean showVScrollBar) {
+               ScrollBar vertical= getVerticalBar();
+               vertical.setVisible(showVScrollBar);
+               vertical.setSelection(0);
+       }
+       protected boolean isHorizontalBarVisble() {
+               return getHorizontalBar().isVisible();
+       }
+       protected void setHorizontalBarVisible(boolean showHScrollBar) {
+               ScrollBar horizontal= getHorizontalBar();
+               horizontal.setVisible(showHScrollBar);
+               horizontal.setSelection(0);
+       }
+}
+
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/ITerminalTextData.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/ITerminalTextData.java
new file mode 100644 (file)
index 0000000..5ce26ee
--- /dev/null
@@ -0,0 +1,150 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [261486][api][cleanup] Mark @noimplement interfaces as @noextend
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ *******************************************************************************/
+package org.eclipse.tm.terminal.model;
+
+/**
+ * A writable matrix of characters and {@link Style}. This is intended to be the
+ * low level representation of the text of a Terminal. Higher layers are
+ * responsible to fill the text and styles into this representation.
+ * <p>
+ * <b>Note: </b> Implementations of this interface has to be thread safe.
+ * </p>
+ *
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ */
+public interface ITerminalTextData extends ITerminalTextDataReadOnly {
+
+       /**
+        * Sets the dimensions of the data. If the dimensions are smaller than the current
+        * dimensions, the lines will be chopped. If the dimensions are bigger, then
+        * the new elements will be filled with 0 chars and null Style.
+        * @param height
+        * @param width
+        */
+       void setDimensions(int height, int width);
+
+       void setMaxHeight(int height);
+       int getMaxHeight();
+
+       /**
+        * Set a single character and the associated {@link Style}.
+        * @param line line must be >=0 and < height
+        * @param column column must be >=0 and < width
+        * @param c the new character at this position
+        * @param style the style or null
+        */
+       void setChar(int line, int column, char c, Style style);
+
+       /**
+        * Set an array of characters showing in the same {@link Style}.
+        * @param line line must be >=0 and < height
+        * @param column column must be >=0 and < width
+        * @param chars the new characters at this position
+        * @param style the style or null
+        */
+       void setChars(int line, int column, char[] chars, Style style);
+
+       /**
+        * Set a subrange of an array of characters showing in the same {@link Style}.
+        * @param line line must be >=0 and < height
+        * @param column column must be >=0 and < width
+        * @param chars the new characters at this position
+        * @param start the start index in the chars array
+        * @param len the number of characters to insert. Characters beyond width are not inserted.
+        * @param style the style or null
+        */
+       void setChars(int line, int column, char[] chars, int start, int len, Style style);
+
+
+       /**
+        * Cleans the entire line.
+        * @param line
+        */
+       void cleanLine(int line);
+
+       /**
+        * Shifts some lines up or down. The "empty" space is filled with <code>'\000'</code> chars
+        * and <code>null</code> {@link Style}
+        * <p>To illustrate shift, here is some sample data:
+        * <pre>
+        * 0 aaaa
+        * 1 bbbb
+        * 2 cccc
+        * 3 dddd
+        * 4 eeee
+        * </pre>
+        *
+        * Shift a region of 3 lines <b>up</b> by one line <code>shift(1,3,-1)</code>
+        * <pre>
+        * 0 aaaa
+        * 1 cccc
+        * 2 dddd
+        * 3
+        * 4 eeee
+        * </pre>
+        *
+        *
+        * Shift a region of 3 lines <b>down</b> by one line <code>shift(1,3,1)</code>
+        * <pre>
+        * 0 aaaa
+        * 1
+        * 2 bbbb
+        * 3 cccc
+        * 4 eeee
+        * </pre>
+        * @param startLine the start line of the shift
+        * @param size the number of lines to shift
+        * @param shift how much scrolling is done. New scrolled area is filled with <code>'\000</code>'.
+        * Negative number means scroll down, positive scroll up (see example above).
+        */
+       void scroll(int startLine, int size, int shift);
+
+       /**Adds a new line to the terminal. If maxHeigth is reached, the entire terminal
+        * will be scrolled. Else a line will be added.
+        */
+       void addLine();
+       /**
+        * Copies the entire source into this and changes the size accordingly
+        * @param source
+        */
+       void copy(ITerminalTextData source);
+       /**
+        * Copy a sourceLine from source to this at destLine.
+        * @param source
+        * @param sourceLine
+        * @param destLine
+        */
+       void copyLine(ITerminalTextData source,int sourceLine, int destLine);
+       /**
+        * Copy <code>length</code> lines from source starting at sourceLine into this starting at
+        * destLine.
+        * @param source
+        * @param sourceStartLine
+        * @param destStartLine
+        * @param length
+        */
+       void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine,int length);
+
+       void setCursorLine(int line);
+       void setCursorColumn(int column);
+
+       /**
+        * Makes this line a wrapped line which logically continues on next line. 
+        *
+        * @param line
+        * @since 3.3
+        */
+       void setWrappedLine(int line);
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/ITerminalTextDataReadOnly.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/ITerminalTextDataReadOnly.java
new file mode 100644 (file)
index 0000000..d7a63ae
--- /dev/null
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [261486][api][cleanup] Mark @noimplement interfaces as @noextend
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ *******************************************************************************/
+package org.eclipse.tm.terminal.model;
+
+/**
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ */
+public interface ITerminalTextDataReadOnly {
+
+       /**
+        * @return the width of the terminal
+        */
+       int getWidth();
+
+       /**
+        * @return the height of the terminal
+        */
+       int getHeight();
+
+       /**
+        * @param line be >=0 and < height
+        * @param startCol must be >=0 and < width
+        * @param numberOfCols must be > 0
+        * @return a the line segments of the specified range
+        */
+       LineSegment[] getLineSegments(int line, int startCol, int numberOfCols);
+
+       /**
+        * @param line must be >=0 and < height
+        * @param column must be >=0 and < width
+        * @return the character at column,line
+        */
+       char getChar(int line, int column);
+
+       /**
+        * @param line must be >=0 and < height
+        * @param column must be >=0 and < width
+        * @return style at column,line or null
+        */
+       Style getStyle(int line, int column);
+
+       /**
+        * Creates a new instance of {@link ITerminalTextDataSnapshot} that
+        * can be used to track changes. Make sure to call {@link ITerminalTextDataSnapshot#detach()}
+        * if you don't need the snapshots anymore.
+        * <p><b>Note: </b>A new snapshot is empty and needs a call to {@link ITerminalTextDataSnapshot#updateSnapshot(boolean)} to
+        * get its initial values. You might want to setup the snapshot to your needs by calling
+        * {@link ITerminalTextDataSnapshot#setInterestWindow(int, int)}.
+        * </p>
+        * @return a new instance of {@link ITerminalTextDataSnapshot} that "listens" to changes of
+        * <code>this</code>.
+        */
+       public ITerminalTextDataSnapshot makeSnapshot();
+
+       char[] getChars(int line);
+       Style[] getStyles(int line);
+
+       /**
+        * @return the line in which the cursor is at the moment
+        */
+       int getCursorLine();
+       /**
+        * @return the column at which the cursor is at the moment
+        */
+       int getCursorColumn();
+
+       /**
+        * @param line
+        * @return true if this line got wrapped, ie. logically continues on next line
+        * @since 3.3
+        */
+       boolean isWrappedLine(int line);
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/ITerminalTextDataSnapshot.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/ITerminalTextDataSnapshot.java
new file mode 100644 (file)
index 0000000..0d5960a
--- /dev/null
@@ -0,0 +1,226 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [261486][api][cleanup] Mark @noimplement interfaces as @noextend
+ *******************************************************************************/
+package org.eclipse.tm.terminal.model;
+
+/**
+ * This class maintains a snapshot of an instance of {@link ITerminalTextData}.
+ * While the {@link ITerminalTextData} continues changing, the snapshot remains
+ * unchanged until the next snapshot is taken by calling
+ * {@link #updateSnapshot(boolean)}. This is important, because the
+ * {@link ITerminalTextData} might get modified by another thread. Suppose you
+ * would want to draw the content of the {@link ITerminalTextData} using the
+ * following loop:
+ *
+ * <pre>
+ * for (int line = 0; line &lt; term.getHeight(); line++)
+ *     for (int column = 0; column &lt; term.getWidth(); column++)
+ *             drawCharacter(column, line, term.getChar(column, line), term.getStyle(column, line));
+ * </pre>
+ *
+ * This might fail because the background thread could change the dimensions of
+ * the {@link ITerminalTextData} while you iterate the loop. One solution would
+ * be to put a <code>synchronized(term){}</code> statement around the code. This
+ * has two problems: 1. you would have to know about the internals of the
+ * synchronisation of {@link ITerminalTextData}. 2. The other thread that
+ * changes {@link ITerminalTextData} is blocked while the potentially slow
+ * drawing is done.
+ * <p>
+ * <b>Solution:</b> Take a snapshot of the terminal and use the snapshot to draw
+ * the content. There is no danger that the data structure get changed while you
+ * draw. There are also methods to find out what has changed to minimize the
+ * number of lines that get redrawn.
+ * </p>
+ *
+ * <p>
+ * <b>Drawing optimization</b>: To optimize redrawing of changed lines, this
+ * class keeps track of lines that have changed since the previous snapshot.
+ * </p>
+ *
+ * <pre>
+ * // iterate over the potentially changed lines
+ * for (int line = snap.getFirstChangedLine(); line &lt;= snap.getLastChangedLine(); line++)
+ *     // redraw only if the line has changed
+ *     if (snap.hasLineChanged(line))
+ *             for (int column = 0; column &lt; snap.getWidth(); column++)
+ *                     drawCharacter(column, line, snap.getChar(column, line), snap.getStyle(column, line));
+ * </pre>
+ *
+ * <p>
+ * <b>Scroll optimization:</b> Often new lines are appended at the bottom of the
+ * terminal and the rest of the lines are scrolled up. In this case all lines
+ * would be marked as changed. To optimize for this case,
+ * {@link #updateSnapshot(boolean)} can be called with <code>true</code> for the
+ * <code>detectScrolling</code> parameter. The object will keep track of
+ * scrolling. The UI must <b>first</b> handle the scrolling and then use the
+ * {@link #hasLineChanged(int)} method to determine scrolling:
+ *
+ * <pre>
+ * // scroll the visible region of the UI &lt;b&gt;before&lt;/b&gt; drawing the changed lines.
+ * doUIScrolling(snap.getScrollChangeY(), snap.getScrollChangeN(), snap.getScrollChangeShift());
+ * // iterate over the potentially changed lines
+ * for (int line = snap.getFirstChangedLine(); line &lt;= snap.getFirstChangedLine(); line++)
+ *     // redraw only if the line has changed
+ *     if (snap.hasLineChanged(line))
+ *             for (int column = 0; column &lt; snap.getWidth(); column++)
+ *                     drawCharacter(column, line, snap.getChar(column, line), snap.getStyle(column, line));
+ * </pre>
+ *
+ * </p>
+ * <p>
+ * <b>Threading Note</b>: This class is not thread safe! All methods have to be
+ * called by the a same thread, that created the instance by calling
+ * {@link ITerminalTextDataReadOnly#makeSnapshot()}.
+ * </p>
+ *
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ */
+public interface ITerminalTextDataSnapshot extends ITerminalTextDataReadOnly {
+       /**
+        * This listener gets called when the current snapshot
+        * is out of date. Calling {@link ITerminalTextDataSnapshot#updateSnapshot(boolean)}
+        * will have an effect. Once the {@link #snapshotOutOfDate(ITerminalTextDataSnapshot)} method is called,
+        * it will not be called until {@link ITerminalTextDataSnapshot#updateSnapshot(boolean)}
+        * is called and a new snapshot needs to be updated again.
+        * <p>
+        * A typical terminal view would not update the snapshot immediately
+        * after the {@link #snapshotOutOfDate(ITerminalTextDataSnapshot)} has been called. It would introduce a
+        * delay to update the UI (and the snapshot} 10 or 20 times per second.
+        *
+        * <p>Make sure you don't spend too much time in this method.
+        */
+       interface SnapshotOutOfDateListener {
+               /**
+                * Gets called when the snapshot is out of date. To get the snapshot up to date,
+                * call {@link ITerminalTextDataSnapshot#updateSnapshot(boolean)}.
+                * @param snapshot The snapshot that is out of date
+                */
+               void snapshotOutOfDate(ITerminalTextDataSnapshot snapshot);
+       }
+       void addListener(SnapshotOutOfDateListener listener);
+       void removeListener(SnapshotOutOfDateListener listener);
+
+       /**
+        * Ends the listening to the {@link ITerminalTextData}. After this
+        * has been called no new snapshot data is collected.
+        */
+       void detach();
+       /**
+        * @return true if the data has changed since the previous snapshot.
+        */
+       boolean isOutOfDate();
+
+       /**
+        * The window of interest is the region the snapshot should track.
+        * Changes outside this region are ignored. The change takes effect after
+        * an update!
+        * @param startLine -1 means track the end of the data
+        * @param size number of lines to track. A size of -1 means track all.
+        */
+       void setInterestWindow(int startLine, int size);
+       int getInterestWindowStartLine();
+       int getInterestWindowSize();
+
+       /**
+        * Create a new snapshot of the {@link ITerminalTextData}. It will efficiently
+        * copy the data of the {@link ITerminalTextData} into an internal representation.
+        * The snapshot also keeps track of the changes since the previous snapshot.
+        * <p>With the methods {@link #getFirstChangedLine()}, {@link #getLastChangedLine()} and
+        * {@link #hasLineChanged(int)}
+        * you can find out what has changed in the current snapshot since the previous snapshot.
+        * @param detectScrolling if <code>true</code> the snapshot tries to identify scroll
+        * changes since the last snapshot. In this case the information about scrolling
+        * can be retrieved using the following methods:
+        * {@link #getScrollWindowStartLine()}, {@link #getScrollWindowSize()} and {@link #getScrollWindowShift()}
+        * <br><b>Note:</b> The method {@link #hasLineChanged(int)} returns changes <b>after</b> the
+        * scrolling has been applied.
+        */
+       void updateSnapshot(boolean detectScrolling);
+
+       /**
+        * @return The first line changed in this snapshot compared
+        * to the previous snapshot.
+        *
+        * <p><b>Note:</b> If no line has changed, this
+        * returns {@link Integer#MAX_VALUE}
+        *
+        * <p><b>Note:</b> if {@link #updateSnapshot(boolean)} has been called with <code>true</code>,
+        * then this does not include lines that only have been scrolled. This is the
+        * first line that has changed <b>after</b> the scroll has been applied.
+        */
+       int getFirstChangedLine();
+
+       /**
+        * @return The last line changed in this snapshot compared
+        * to the previous snapshot. If the height has changed since the
+        * last update of the snapshot, then the returned value is within
+        * the new dimensions.
+        *
+        * <p><b>Note:</b> If no line has changed, this returns <code>-1</code>
+        *
+        * <p><b>Note:</b> if {@link #updateSnapshot(boolean)} has been called with <code>true</code>,
+        * then this does not include lines that only have been scrolled. This is the
+        * last line that has changed <b>after</b> the scroll has been applied.
+        *
+        * <p>A typical for loop using this method would look like this (note the <code>&lt;=</code> in the for loop):
+        * <pre>
+        * for(int line=snap.{@link #getFirstChangedLine()}; line <b>&lt;=</b> snap.getLastChangedLine(); line++)
+        *    if(snap.{@link #hasLineChanged(int) hasLineChanged(line)})
+        *       doSomething(line);
+        * </pre>
+        */
+       int getLastChangedLine();
+
+       /**
+        * @param line
+        * @return true if the line has changed since the previous snapshot
+        */
+       boolean hasLineChanged(int line);
+
+       boolean hasDimensionsChanged();
+
+       /**
+        * @return true if the terminal has changed (and not just the
+        * window of interest)
+        */
+       boolean hasTerminalChanged();
+       /**
+        * If {@link #updateSnapshot(boolean)} was called with <code>true</code>, then this method
+        * returns the top of the scroll region.
+        * @return The first line scrolled in this snapshot compared
+        * to the previous snapshot. See also {@link ITerminalTextData#scroll(int, int, int)}.
+        */
+       int getScrollWindowStartLine();
+
+       /**
+        * If {@link #updateSnapshot(boolean)} was called with <code>true</code>, then this method
+        * returns the size of the scroll region.
+        * @return The number of lines scrolled  in this snapshot compared
+        * to the previous snapshot. See also {@link ITerminalTextData#scroll(int, int, int)}
+        * If nothing has changed, 0 is returned.
+        */
+       int getScrollWindowSize();
+
+       /**
+        * If {@link #updateSnapshot(boolean)} was called with <code>true</code>, then this method
+        * returns number of lines moved by the scroll region.
+        * @return The the scroll shift of this snapshot compared
+        * to the previous snapshot. See also {@link ITerminalTextData#scroll(int, int, int)}
+        */
+       int getScrollWindowShift();
+
+       /**
+        * @return The {@link ITerminalTextData} on that this instance is observing.
+        */
+       ITerminalTextData getTerminalTextData();
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/LineSegment.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/LineSegment.java
new file mode 100644 (file)
index 0000000..3f153dd
--- /dev/null
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.model;
+
+
+public class LineSegment {
+       private final String fText;
+       private final int fCol;
+       private final Style fStyle;
+       public LineSegment(int col, String text, Style style) {
+               fCol = col;
+               fText = text;
+               fStyle = style;
+       }
+       public Style getStyle() {
+               return fStyle;
+       }
+       public String getText() {
+               return fText;
+       }
+       public int getColumn() {
+               return fCol;
+       }
+       public String toString() {
+               return "LineSegment("+fCol+", \""+fText+"\","+fStyle+")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+       }
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/Style.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/Style.java
new file mode 100644 (file)
index 0000000..001ad68
--- /dev/null
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.model;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author scharf
+ * Flyweight
+ * Threadsafe.
+ * 
+ */
+// TODO add an Object for user data, use weak map to keep track of styles with associated
+// user data
+public class Style {
+       private final StyleColor fForground;
+       private final StyleColor fBackground;
+       private final boolean fBold;
+       private final boolean fBlink;
+       private final boolean fUnderline;
+       private final boolean fReverse;
+       private final static Map<Style, Style> fgStyles=new HashMap<Style, Style>();
+       private Style(StyleColor forground, StyleColor background, boolean bold, boolean blink, boolean underline, boolean reverse) {
+               fForground = forground;
+               fBackground = background;
+               fBold = bold;
+               fBlink = blink;
+               fUnderline = underline;
+               fReverse = reverse;
+       }
+       public static Style getStyle(StyleColor forground, StyleColor background, boolean bold, boolean blink, boolean underline, boolean reverse) {
+               Style style = new Style(forground,background, bold, blink,underline,reverse);
+               Style cached;
+               synchronized (fgStyles) {
+                       cached=fgStyles.get(style);
+                       if(cached==null) {
+                               cached=style;
+                               fgStyles.put(cached, cached);
+                       }
+               }
+               return cached;
+       }
+       public static Style getStyle(String forground, String background) {
+               return getStyle(StyleColor.getStyleColor(forground), StyleColor.getStyleColor(background),false,false,false,false);
+       }
+       public static Style getStyle(StyleColor forground, StyleColor background) {
+               return getStyle(forground, background,false,false,false,false);
+       }
+       public Style setForground(StyleColor forground) {
+               return getStyle(forground,fBackground,fBold,fBlink,fUnderline,fReverse);
+       }
+       public Style setBackground(StyleColor background) {
+               return getStyle(fForground,background,fBold,fBlink,fUnderline,fReverse);
+       }
+       public Style setForground(String colorName) {
+               return getStyle(StyleColor.getStyleColor(colorName),fBackground,fBold,fBlink,fUnderline,fReverse);
+       }
+       public Style setBackground(String colorName) {
+               return getStyle(fForground,StyleColor.getStyleColor(colorName),fBold,fBlink,fUnderline,fReverse);
+       }
+       public Style setBold(boolean bold) {
+               return getStyle(fForground,fBackground,bold,fBlink,fUnderline,fReverse);
+       }
+       public Style setBlink(boolean blink) {
+               return getStyle(fForground,fBackground,fBold,blink,fUnderline,fReverse);
+       }
+       public Style setUnderline(boolean underline) {
+               return getStyle(fForground,fBackground,fBold,fBlink,underline,fReverse);
+       }
+       public Style setReverse(boolean reverse) {
+               return getStyle(fForground,fBackground,fBold,fBlink,fUnderline,reverse);
+       }
+       public StyleColor getBackground() {
+               return fBackground;
+       }
+       public boolean isBlink() {
+               return fBlink;
+       }
+       public boolean isBold() {
+               return fBold;
+       }
+       public StyleColor getForground() {
+               return fForground;
+       }
+       public boolean isReverse() {
+               return fReverse;
+       }
+       public boolean isUnderline() {
+               return fUnderline;
+       }
+       public int hashCode() {
+               final int prime = 31;
+               int result = 1;
+               result = prime * result + ((fBackground == null) ? 0 : fBackground.hashCode());
+               result = prime * result + (fBlink ? 1231 : 1237);
+               result = prime * result + (fBold ? 1231 : 1237);
+               result = prime * result + ((fForground == null) ? 0 : fForground.hashCode());
+               result = prime * result + (fReverse ? 1231 : 1237);
+               result = prime * result + (fUnderline ? 1231 : 1237);
+               return result;
+       }
+       public boolean equals(Object obj) {
+               if (this == obj)
+                       return true;
+               if (obj == null)
+                       return false;
+               if (getClass() != obj.getClass())
+                       return false;
+               final Style other = (Style) obj;
+               // background == is the same as equals
+               if (fBackground != other.fBackground)
+                       return false;
+               if (fBlink != other.fBlink)
+                       return false;
+               if (fBold != other.fBold)
+                       return false;
+               if (fForground != other.fForground)
+                       return false;
+               if (fReverse != other.fReverse)
+                       return false;
+               if (fUnderline != other.fUnderline)
+                       return false;
+               return true;
+       }
+       public String toString() {
+               StringBuffer result=new StringBuffer();
+               result.append("Style(foreground="); //$NON-NLS-1$
+               result.append(fForground);
+               result.append(", background="); //$NON-NLS-1$
+               result.append(fBackground);
+               if(fBlink)
+                       result.append(", blink"); //$NON-NLS-1$
+               if(fBold)
+                       result.append(", bold"); //$NON-NLS-1$
+               if(fBlink)
+                       result.append(", blink"); //$NON-NLS-1$
+               if(fReverse)
+                       result.append(", reverse"); //$NON-NLS-1$
+               if(fUnderline)
+                       result.append(", underline"); //$NON-NLS-1$
+               result.append(")"); //$NON-NLS-1$
+               return result.toString();
+       }
+       
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/StyleColor.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/StyleColor.java
new file mode 100644 (file)
index 0000000..98b19ad
--- /dev/null
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.model;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/** 
+ * 
+ * Flyweight
+ * Threadsafe.
+ */
+public class StyleColor {
+       private final static Map<String, StyleColor> fgStyleColors=new HashMap<String, StyleColor>();
+       final String fName;
+       
+       /**
+        * @param name the name of the color. It is up to the UI to associate a
+        * named color with a visual representation
+        * @return a StyleColor
+        */
+       public static StyleColor getStyleColor(String name) {
+               StyleColor result;
+               synchronized (fgStyleColors) {
+                       result=fgStyleColors.get(name);
+                       if(result==null) {
+                               result=new StyleColor(name);
+                               fgStyleColors.put(name, result);
+                       }
+               }
+               return result;
+       }
+       // nobody except the factory method is allowed to instantiate this class!
+       private StyleColor(String name) {
+               fName = name;
+       }
+
+       public String getName() {
+               return fName;
+       }
+
+       public String toString() {
+               return fName;
+       }
+       // no need to override equals and hashCode, because Object uses object identity
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/TerminalTextDataFactory.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/terminal/model/TerminalTextDataFactory.java
new file mode 100644 (file)
index 0000000..364f810
--- /dev/null
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.model;
+
+import org.eclipse.tm.internal.terminal.model.SynchronizedTerminalTextData;
+import org.eclipse.tm.internal.terminal.model.TerminalTextData;
+
+public class TerminalTextDataFactory {
+       static public ITerminalTextData makeTerminalTextData() {
+               return new SynchronizedTerminalTextData(new TerminalTextData());
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/tm32.png b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/tm32.png
new file mode 100644 (file)
index 0000000..668b05b
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control/tm32.png differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.classpath b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.classpath
new file mode 100644 (file)
index 0000000..9c8ffa9
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+               <accessrules>
+                       <accessrule kind="accessible" pattern="org/eclipse/tm/internal/terminal/**"/>
+               </accessrules>
+       </classpathentry>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.cvsignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.cvsignore
new file mode 100644 (file)
index 0000000..ba077a4
--- /dev/null
@@ -0,0 +1 @@
+bin
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.gitignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.project b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.project
new file mode 100644 (file)
index 0000000..492f603
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.test</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.settings/org.eclipse.jdt.core.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..ac97a9d
--- /dev/null
@@ -0,0 +1,69 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/META-INF/MANIFEST.MF b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..4395479
--- /dev/null
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.tm.terminal.test;singleton:=true
+Bundle-Version: 4.0.100.qualifier
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.junit,
+ org.eclipse.tm.terminal.control;bundle-version="4.0.0",
+ org.eclipse.core.runtime,
+ org.eclipse.ui
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: org.eclipse.tm.internal.terminal.connector;x-internal:=true,
+ org.eclipse.tm.internal.terminal.emulator;x-internal:=true,
+ org.eclipse.tm.internal.terminal.model;x-internal:=true,
+ org.eclipse.tm.internal.terminal.speedtest;x-internal:=true,
+ org.eclipse.tm.internal.terminal.test.terminalcanvas;x-internal:=true,
+ org.eclipse.tm.internal.terminal.test.ui;x-internal:=true,
+ org.eclipse.tm.internal.terminal.textcanvas;x-internal:=true,
+ org.eclipse.tm.terminal.model,
+ org.eclipse.tm.terminal.test
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/about.html b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/about.html
new file mode 100644 (file)
index 0000000..a603d19
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+<p>June 5, 2007</p>    
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/about.ini b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/about.ini
new file mode 100644 (file)
index 0000000..3adc27a
--- /dev/null
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=tm32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+# optional
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/about.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/about.properties
new file mode 100644 (file)
index 0000000..4883958
--- /dev/null
@@ -0,0 +1,24 @@
+###############################################################################
+# Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+#
+# Do not translate any values surrounded by {}
+
+blurb=TM Terminal Unit Tests\n\
+\n\
+Version: {featureVersion}\n\
+\n\
+(c) Copyright Wind River Systems, Inc. and others 2007, 2015.  All rights reserved.\n\
+Visit http://www.eclipse.org/tm
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/build.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/build.properties
new file mode 100644 (file)
index 0000000..c59c495
--- /dev/null
@@ -0,0 +1,23 @@
+###############################################################################
+# Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Michael Scharf (Wind River) - initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties,\
+               plugin.xml,\
+               about.properties,\
+               about.ini,\
+               tm32.png,\
+               test.xml,\
+               about.html
+src.includes = teamConfig/,\
+               about.html
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/plugin.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/plugin.properties
new file mode 100644 (file)
index 0000000..d08f52e
--- /dev/null
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Initial Contributors:
+# The following Wind River employees contributed to the Terminal component
+# that contains this file: Chris Thew, Fran Litterio, Stephen Lamb,
+# Helmut Haigermoser and Ted Williams.
+#
+# Contributors:
+# Michael Scharf (Wind River) - initial API and implementation
+###############################################################################
+pluginName = Target Management Terminal Tests
+providerName = Eclipse.org - Target Management
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/plugin.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/plugin.xml
new file mode 100644 (file)
index 0000000..6af3140
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<!--
+# Copyright (c) 2006- 2015 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Michael Scharf (Wind River) - initial API and implementation 
+# Martin Oberhuber (Wind River) - fixed copyright headers and beautified
+# Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
+-->
+<plugin>
+   <extension point="org.eclipse.tm.terminal.control.connectors">
+      <connector
+            class="org.eclipse.tm.internal.terminal.speedtest.SpeedTestConnector"
+            id="org.eclipse.tm.internal.terminal.speedtest.SpeedTestConnector"
+            name="Speed Test"/>
+   </extension>
+</plugin>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/pom.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/pom.xml
new file mode 100644 (file)
index 0000000..299a599
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.0.100-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.test</artifactId>
+  <packaging>eclipse-test-plugin</packaging>
+
+  <build>
+    <plugins>  
+      <plugin>
+          <groupId>org.eclipse.tycho</groupId>
+          <artifactId>tycho-surefire-plugin</artifactId>
+          <version>${tycho-version}</version>
+          <configuration>
+              <testSuite>org.eclipse.tm.terminal.test</testSuite>
+              <testClass>org.eclipse.tm.terminal.test.AutomatedPluginTests</testClass>
+              <useUIHarness>false</useUIHarness>
+              <useUIThread>false</useUIThread>
+              <testFailureIgnore>true</testFailureIgnore>                
+              <product>org.eclipse.sdk.ide</product>
+          </configuration>
+      </plugin>
+    </plugins>
+  </build>                 
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/connector/TerminalConnectorFactoryTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/connector/TerminalConnectorFactoryTest.java
new file mode 100644 (file)
index 0000000..3a1a9ea
--- /dev/null
@@ -0,0 +1,273 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl
+ * Martin Oberhuber (Wind River) - [204796] Terminal should allow setting the encoding to use
+ * Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
+ * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.connector;
+
+import java.io.OutputStream;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
+
+public class TerminalConnectorFactoryTest extends TestCase {
+       public class SettingsMock implements ISettingsStore {
+
+               public String get(String key) {
+                       return null;
+               }
+
+               public String get(String key, String defaultValue) {
+                       return null;
+               }
+
+               public void put(String key, String value) {
+               }
+
+       }
+       public static class TerminalControlMock implements ITerminalControl {
+
+               public void setEncoding(String encoding) {
+               }
+
+               public String getEncoding() {
+                       return "ISO-8859-1"; //$NON-NLS-1$
+               }
+
+               public void displayTextInTerminal(String text) {
+               }
+
+               public OutputStream getRemoteToTerminalOutputStream() {
+                       return null;
+               }
+
+               public Shell getShell() {
+                       return null;
+               }
+
+               public TerminalState getState() {
+                       return null;
+               }
+
+               public void setMsg(String msg) {
+               }
+
+               public void setState(TerminalState state) {
+               }
+
+               public void setTerminalTitle(String title) {
+               }
+
+               public void setupTerminal(Composite parent) {
+               }
+               
+               public boolean isConnectOnEnterIfClosed() {
+                       return false;
+               }
+               
+               public void setConnectOnEnterIfClosed(boolean on) {
+               }
+
+               public void setVT100LineWrapping(boolean enable) {
+               }
+
+               public boolean isVT100LineWrapping() {
+                       return false;
+               }
+       }
+       static class ConnectorMock extends TerminalConnectorImpl {
+
+               public boolean fEcho;
+               public int fWidth;
+               public int fHeight;
+               public ITerminalControl fTerminalControl;
+               public ISettingsStore fSaveStore;
+               public ISettingsStore fLoadStore;
+               public boolean fDisconnect;
+
+               public boolean isLocalEcho() {
+                       return fEcho;
+               }
+               public void setTerminalSize(int newWidth, int newHeight) {
+                       fWidth=newWidth;
+                       fHeight=newHeight;
+               }
+               public void connect(ITerminalControl control) {
+                       super.connect(control);
+                       fTerminalControl = control;
+               }
+               public void doDisconnect() {
+                       fDisconnect=true;
+               }
+
+               public OutputStream getTerminalToRemoteStream() {
+                       return null;
+               }
+
+               public String getSettingsSummary() {
+                       return "Summary";
+               }
+
+               public void load(ISettingsStore store) {
+                       fLoadStore=store;
+               }
+
+               public void save(ISettingsStore store) {
+                       fSaveStore=store;
+               }
+       }
+       protected TerminalConnector makeTerminalConnector() {
+               return makeTerminalConnector(new ConnectorMock());
+       }
+
+       protected TerminalConnector makeTerminalConnector(final TerminalConnectorImpl mock) {
+               TerminalConnector c=new TerminalConnector(new TerminalConnector.Factory(){
+                       public TerminalConnectorImpl makeConnector() throws Exception {
+                               return mock;
+                       }
+               },"xID","xName", false);
+               return c;
+       }
+
+       public void testGetInitializationErrorMessage() {
+               TerminalConnector c=makeTerminalConnector();
+               c.connect(new TerminalControlMock());
+               assertNull(c.getInitializationErrorMessage());
+
+               c=makeTerminalConnector(new ConnectorMock(){
+                       public void initialize() throws Exception {
+                               throw new Exception("FAILED");
+                       }});
+               c.connect(new TerminalControlMock());
+               assertEquals("FAILED",c.getInitializationErrorMessage());
+
+       }
+
+       public void testGetIdAndName() {
+               TerminalConnector c=makeTerminalConnector();
+               assertEquals("xID", c.getId());
+               assertEquals("xName", c.getName());
+       }
+
+       public void testIsInitialized() {
+               TerminalConnector c=makeTerminalConnector();
+               assertFalse(c.isInitialized());
+               c.getId();
+               assertFalse(c.isInitialized());
+               c.getName();
+               assertFalse(c.isInitialized());
+               c.getSettingsSummary();
+               assertFalse(c.isInitialized());
+               c.setTerminalSize(10,10);
+               assertFalse(c.isInitialized());
+               c.load(null);
+               assertFalse(c.isInitialized());
+               c.save(null);
+               assertFalse(c.isInitialized());
+               if (!Platform.isRunning()) return;
+               c.getAdapter(ConnectorMock.class);
+               assertFalse(c.isInitialized());
+       }
+
+       public void testConnect() {
+               TerminalConnector c=makeTerminalConnector();
+               assertFalse(c.isInitialized());
+               c.connect(new TerminalControlMock());
+               assertTrue(c.isInitialized());
+
+       }
+
+       public void testDisconnect() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c = makeTerminalConnector(mock);
+               TerminalControlMock control=new TerminalControlMock();
+               c.connect(control);
+               c.disconnect();
+               assertTrue(mock.fDisconnect);
+       }
+
+       public void testGetTerminalToRemoteStream() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c = makeTerminalConnector(mock);
+               TerminalControlMock control=new TerminalControlMock();
+               c.connect(control);
+               assertSame(mock.fTerminalControl,control);
+       }
+       public void testGetSettingsSummary() {
+               TerminalConnector c=makeTerminalConnector();
+               assertEquals("Not Initialized", c.getSettingsSummary());
+               c.connect(new TerminalControlMock());
+               assertEquals("Summary", c.getSettingsSummary());
+       }
+
+       public void testIsLocalEcho() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c = makeTerminalConnector(mock);
+               assertFalse(c.isLocalEcho());
+               mock.fEcho=true;
+               assertTrue(c.isLocalEcho());
+       }
+
+       public void testLoad() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c = makeTerminalConnector(mock);
+               ISettingsStore s=new SettingsMock();
+               c.load(s);
+               // the load is called after the connect...
+               assertNull(mock.fLoadStore);
+               c.connect(new TerminalControlMock());
+               assertSame(s,mock.fLoadStore);
+       }
+
+       public void testSave() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c = makeTerminalConnector(mock);
+               ISettingsStore s=new SettingsMock();
+               c.save(s);
+               assertNull(mock.fSaveStore);
+               c.connect(new TerminalControlMock());
+               c.save(s);
+               assertSame(s,mock.fSaveStore);
+       }
+
+       public void testSetDefaultSettings() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c = makeTerminalConnector(mock);
+               c.setDefaultSettings();
+       }
+
+       public void testSetTerminalSize() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c = makeTerminalConnector(mock);
+               c.setTerminalSize(100, 200);
+
+       }
+
+       public void testGetAdapter() {
+               if (!Platform.isRunning()) return;
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c = makeTerminalConnector(mock);
+               assertNull(c.getAdapter(ConnectorMock.class));
+               // the load is called after the connect...
+               c.connect(new TerminalControlMock());
+
+               assertSame(mock, c.getAdapter(ConnectorMock.class));
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/connector/TerminalConnectorPluginTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/connector/TerminalConnectorPluginTest.java
new file mode 100644 (file)
index 0000000..f6abd23
--- /dev/null
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Martin Oberhuber (Wind River) - initial API and implementation
+ * Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
+ *******************************************************************************/
+
+package org.eclipse.tm.internal.terminal.connector;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.tm.internal.terminal.connector.TerminalConnectorTest.ConnectorMock;
+import org.eclipse.tm.internal.terminal.connector.TerminalConnectorTest.SimpleFactory;
+import org.eclipse.tm.internal.terminal.connector.TerminalConnectorTest.TerminalControlMock;
+
+/**
+ * Testcase for TerminalConnector that must run as a JUnit plug-in test.
+ */
+public class TerminalConnectorPluginTest extends TestCase {
+
+       public void testIsInitialized() {
+               if (!Platform.isRunning())
+                       return;
+               TerminalConnector c = new TerminalConnector(new SimpleFactory(new ConnectorMock()), "xID", "xName", false);
+               assertFalse(c.isInitialized());
+               c.getId();
+               assertFalse(c.isInitialized());
+               c.getName();
+               assertFalse(c.isInitialized());
+               c.isHidden();
+               assertFalse(c.isInitialized());
+               c.getSettingsSummary();
+               assertFalse(c.isInitialized());
+               c.setTerminalSize(10, 10);
+               assertFalse(c.isInitialized());
+               c.load(null);
+               assertFalse(c.isInitialized());
+               c.save(null);
+               assertFalse(c.isInitialized());
+               c.getAdapter(ConnectorMock.class);
+               assertFalse(c.isInitialized());
+       }
+
+       public void testGetAdapter() {
+               if (!Platform.isRunning())
+                       return;
+               ConnectorMock mock = new ConnectorMock();
+               TerminalConnector c = new TerminalConnector(new SimpleFactory(mock), "xID", "xName", false);
+               assertNull(c.getAdapter(ConnectorMock.class));
+               // the load is called after the connect...
+               c.connect(new TerminalControlMock());
+
+               assertSame(mock, c.getAdapter(ConnectorMock.class));
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/connector/TerminalConnectorTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/connector/TerminalConnectorTest.java
new file mode 100644 (file)
index 0000000..72f0eec
--- /dev/null
@@ -0,0 +1,240 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl
+ * Martin Oberhuber (Wind River) - [204796] Terminal should allow setting the encoding to use
+ * Uwe Stieber (Wind River) - [282996] [terminal][api] Add "hidden" attribute to terminal connector extension point
+ * Anton Leherbauer (Wind River) - [433751] Add option to enable VT100 line wrapping mode
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.connector;
+
+import java.io.OutputStream;
+
+import junit.framework.TestCase;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.tm.internal.terminal.connector.TerminalConnector.Factory;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
+
+public class TerminalConnectorTest extends TestCase {
+       public class SettingsMock implements ISettingsStore {
+
+               public String get(String key) {
+                       return null;
+               }
+
+               public String get(String key, String defaultValue) {
+                       return null;
+               }
+
+               public void put(String key, String value) {
+               }
+
+       }
+       public static class TerminalControlMock implements ITerminalControl {
+
+               public void setEncoding(String encoding) {
+               }
+
+               public String getEncoding() {
+                       return "ISO-8859-1"; //$NON-NLS-1$
+               }
+
+               public void displayTextInTerminal(String text) {
+               }
+
+               public OutputStream getRemoteToTerminalOutputStream() {
+                       return null;
+               }
+
+               public Shell getShell() {
+                       return null;
+               }
+
+               public TerminalState getState() {
+                       return null;
+               }
+
+               public void setMsg(String msg) {
+               }
+
+               public void setState(TerminalState state) {
+               }
+
+               public void setTerminalTitle(String title) {
+               }
+
+               public void setupTerminal(Composite parent) {
+               }
+               
+               public boolean isConnectOnEnterIfClosed() {
+                       return false;
+               }
+               
+               public void setConnectOnEnterIfClosed(boolean on) {
+               }
+
+               public void setVT100LineWrapping(boolean enable) {
+               }
+
+               public boolean isVT100LineWrapping() {
+                       return false;
+               }
+       }
+       static class ConnectorMock extends TerminalConnectorImpl {
+
+               public boolean fEcho;
+               public int fWidth;
+               public int fHeight;
+               public ITerminalControl fTerminalControl;
+               public ISettingsStore fSaveStore;
+               public ISettingsStore fLoadStore;
+               public boolean fDisconnect;
+
+               public boolean isLocalEcho() {
+                       return fEcho;
+               }
+               public void setTerminalSize(int newWidth, int newHeight) {
+                       fWidth=newWidth;
+                       fHeight=newHeight;
+               }
+               public void connect(ITerminalControl control) {
+                       super.connect(control);
+                       fTerminalControl = control;
+               }
+               public void doDisconnect() {
+                       fDisconnect=true;
+               }
+
+               public OutputStream getTerminalToRemoteStream() {
+                       return null;
+               }
+
+               public String getSettingsSummary() {
+                       return "Summary";
+               }
+
+               public void load(ISettingsStore store) {
+                       fLoadStore=store;
+               }
+
+               public void save(ISettingsStore store) {
+                       fSaveStore=store;
+               }
+       }
+       static class SimpleFactory implements Factory {
+               final TerminalConnectorImpl fConnector;
+               public SimpleFactory(TerminalConnectorImpl connector) {
+                       fConnector = connector;
+               }
+               public TerminalConnectorImpl makeConnector() throws Exception {
+                       // TODO Auto-generated method stub
+                       return fConnector;
+               }
+       }
+       public void testGetInitializationErrorMessage() {
+               TerminalConnector c=new TerminalConnector(new SimpleFactory(new ConnectorMock()),"xID","xName", false);
+               c.connect(new TerminalControlMock());
+               assertNull(c.getInitializationErrorMessage());
+
+               c=new TerminalConnector(new SimpleFactory(new ConnectorMock(){
+                       public void initialize() throws Exception {
+                               throw new Exception("FAILED");
+                       }}),"xID","xName", false);
+               c.connect(new TerminalControlMock());
+               assertEquals("FAILED",c.getInitializationErrorMessage());
+
+       }
+
+       public void testGetIdAndName() {
+               TerminalConnector c=new TerminalConnector(new SimpleFactory(new ConnectorMock()),"xID","xName", false);
+               assertEquals("xID", c.getId());
+               assertEquals("xName", c.getName());
+       }
+
+       public void testConnect() {
+               TerminalConnector c=new TerminalConnector(new SimpleFactory(new ConnectorMock()),"xID","xName", false);
+               assertFalse(c.isInitialized());
+               c.connect(new TerminalControlMock());
+               assertTrue(c.isInitialized());
+
+       }
+
+       public void testDisconnect() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName", false);
+               TerminalControlMock control=new TerminalControlMock();
+               c.connect(control);
+               c.disconnect();
+               assertTrue(mock.fDisconnect);
+       }
+
+       public void testGetTerminalToRemoteStream() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName", false);
+               TerminalControlMock control=new TerminalControlMock();
+               c.connect(control);
+               assertSame(mock.fTerminalControl,control);
+       }
+
+       public void testGetSettingsSummary() {
+               TerminalConnector c=new TerminalConnector(new SimpleFactory(new ConnectorMock()),"xID","xName", false);
+               assertEquals("Not Initialized", c.getSettingsSummary());
+               c.connect(new TerminalControlMock());
+               assertEquals("Summary", c.getSettingsSummary());
+       }
+
+       public void testIsLocalEcho() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName", false);
+               assertFalse(c.isLocalEcho());
+               mock.fEcho=true;
+               assertTrue(c.isLocalEcho());
+       }
+
+       public void testLoad() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName", false);
+               ISettingsStore s=new SettingsMock();
+               c.load(s);
+               // the load is called after the connect...
+               assertNull(mock.fLoadStore);
+               c.connect(new TerminalControlMock());
+               assertSame(s,mock.fLoadStore);
+       }
+
+       public void testSave() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName", false);
+               ISettingsStore s=new SettingsMock();
+               c.save(s);
+               assertNull(mock.fSaveStore);
+               c.connect(new TerminalControlMock());
+               c.save(s);
+               assertSame(s,mock.fSaveStore);
+       }
+
+       public void testSetDefaultSettings() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName", false);
+               c.setDefaultSettings();
+       }
+
+       public void testSetTerminalSize() {
+               ConnectorMock mock=new ConnectorMock();
+               TerminalConnector c=new TerminalConnector(new SimpleFactory(mock),"xID","xName", false);
+               c.setTerminalSize(100, 200);
+
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/connector/TerminalToRemoteInjectionOutputStreamTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/connector/TerminalToRemoteInjectionOutputStreamTest.java
new file mode 100644 (file)
index 0000000..f6d1a07
--- /dev/null
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.connector;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+
+import junit.framework.TestCase;
+
+public class TerminalToRemoteInjectionOutputStreamTest extends TestCase {
+       final static String ENCODING="UTF-8";
+       /**
+        * This class escapes strings coming on the original
+        * terminal..
+        *
+        */
+       class CleverInterceptor extends TerminalToRemoteInjectionOutputStream.Interceptor {
+
+               public void close() throws IOException {
+               }
+               public void write(int b) throws IOException {
+                       fOriginal.write('[');
+                       fOriginal.write(b);
+                       fOriginal.write(']');
+               }
+               public void write(byte[] b, int off, int len) throws IOException {
+                       fOriginal.write('[');
+                       fOriginal.write(b,off,len);
+                       fOriginal.write(']');
+               }
+
+       }
+       class NullInterceptor extends TerminalToRemoteInjectionOutputStream.Interceptor {
+       }
+       public void testClose() throws UnsupportedEncodingException, IOException {
+               ByteArrayOutputStream bs=new ByteArrayOutputStream();
+               TerminalToRemoteInjectionOutputStream s= new TerminalToRemoteInjectionOutputStream(bs);
+               s.write("begin:".getBytes(ENCODING));
+               assertEquals("begin:", new String(bs.toByteArray(),ENCODING));
+               OutputStream os1=s.grabOutput();
+               os1.write('x');
+               s.write('A');
+               os1.write('y');
+               s.write('B');
+               os1.close();
+
+               s.write('-');
+               OutputStream os=s.grabOutput();
+               // make sure the closed output does not inject anything
+               try {
+                       os1.write('k');
+                       fail("...");
+               } catch (Exception e) {
+               }
+               os.write('X');
+               s.write('a');
+               os.write('Y');
+               // make sure the closed output does not inject anything
+               try {
+                       os1.write('l');
+                       fail("...");
+               } catch (Exception e) {
+               }
+               s.write('b');
+               os.close();
+               assertEquals("begin:xyAB-XYab", new String(bs.toByteArray(),ENCODING));
+       }
+
+       public void testFlush() {
+       }
+
+       public void testWriteInt() throws UnsupportedEncodingException, IOException {
+               ByteArrayOutputStream bs=new ByteArrayOutputStream();
+               TerminalToRemoteInjectionOutputStream s= new TerminalToRemoteInjectionOutputStream(bs);
+               s.write("begin:".getBytes(ENCODING));
+               assertEquals("begin:", new String(bs.toByteArray(),ENCODING));
+               OutputStream os=s.grabOutput();
+               os.write('x');
+               s.write('A');
+               os.write('y');
+               s.write('B');
+               s.close();
+               assertEquals("begin:xyAB", new String(bs.toByteArray(),ENCODING));
+
+       }
+
+       public void testWriteByteArray() {
+       }
+
+       public void testWriteByteArrayIntInt() {
+       }
+       public void testGrabOutput() throws UnsupportedEncodingException, IOException {
+               ByteArrayOutputStream bs=new ByteArrayOutputStream();
+               TerminalToRemoteInjectionOutputStream s= new TerminalToRemoteInjectionOutputStream(bs);
+               s.write("begin:".getBytes(ENCODING));
+               assertEquals("begin:", new String(bs.toByteArray(),ENCODING));
+               OutputStream os1=s.grabOutput();
+               OutputStream os2;
+               try {
+                       os2=s.grabOutput();
+                       fail("should fail until the foirst output is closed");
+               } catch (IOException e) {
+               }
+               os1.close();
+               os2=s.grabOutput();
+               assertEquals("begin:", new String(bs.toByteArray(),ENCODING));
+               os2.write("Test".getBytes(ENCODING));
+               assertEquals("begin:Test", new String(bs.toByteArray(),ENCODING));
+               s.write(" west".getBytes(ENCODING));
+               assertEquals("begin:Test", new String(bs.toByteArray(),ENCODING));
+               os2.write(" the".getBytes(ENCODING));
+               assertEquals("begin:Test the", new String(bs.toByteArray(),ENCODING));
+               os2.close();
+               assertEquals("begin:Test the west", new String(bs.toByteArray(),ENCODING));
+               s.write('!');
+               assertEquals("begin:Test the west!", new String(bs.toByteArray(),ENCODING));
+
+       }
+       public void testGrabOutputWithCleverInterceptor() throws UnsupportedEncodingException, IOException {
+               ByteArrayOutputStream bs=new ByteArrayOutputStream();
+               TerminalToRemoteInjectionOutputStream s= new TerminalToRemoteInjectionOutputStream(bs);
+               s.write("begin:".getBytes(ENCODING));
+               assertEquals("begin:", new String(bs.toByteArray(),ENCODING));
+               // the injector escapes the output coming from the main stream
+               OutputStream os=s.grabOutput(new CleverInterceptor());
+               assertEquals("begin:", new String(bs.toByteArray(),ENCODING));
+               os.write("Test".getBytes(ENCODING));
+               assertEquals("begin:Test", new String(bs.toByteArray(),ENCODING));
+               s.write(" west".getBytes(ENCODING));
+               assertEquals("begin:Test[ west]", new String(bs.toByteArray(),ENCODING));
+               os.write(" the".getBytes(ENCODING));
+               assertEquals("begin:Test[ west] the", new String(bs.toByteArray(),ENCODING));
+               s.write('x');
+               assertEquals("begin:Test[ west] the[x]", new String(bs.toByteArray(),ENCODING));
+               os.close();
+               assertEquals("begin:Test[ west] the[x]", new String(bs.toByteArray(),ENCODING));
+               s.write('!');
+               assertEquals("begin:Test[ west] the[x]!", new String(bs.toByteArray(),ENCODING));
+
+       }
+       public void testGrabOutputWithNullInterceptor() throws UnsupportedEncodingException, IOException {
+               ByteArrayOutputStream bs=new ByteArrayOutputStream();
+               TerminalToRemoteInjectionOutputStream s= new TerminalToRemoteInjectionOutputStream(bs);
+               s.write("begin:".getBytes(ENCODING));
+               assertEquals("begin:", new String(bs.toByteArray(),ENCODING));
+               // bytes written to the main stream are ignored while the injector
+               // is active
+               OutputStream os=s.grabOutput(new NullInterceptor());
+               assertEquals("begin:", new String(bs.toByteArray(),ENCODING));
+               os.write("Test".getBytes(ENCODING));
+               assertEquals("begin:Test", new String(bs.toByteArray(),ENCODING));
+               s.write(" west".getBytes(ENCODING));
+               assertEquals("begin:Test", new String(bs.toByteArray(),ENCODING));
+               os.write(" the".getBytes(ENCODING));
+               assertEquals("begin:Test the", new String(bs.toByteArray(),ENCODING));
+               s.write('x');
+               assertEquals("begin:Test the", new String(bs.toByteArray(),ENCODING));
+               os.close();
+               assertEquals("begin:Test the", new String(bs.toByteArray(),ENCODING));
+               s.write('!');
+               assertEquals("begin:Test the!", new String(bs.toByteArray(),ENCODING));
+
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/emulator/AllTests.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/emulator/AllTests.java
new file mode 100644 (file)
index 0000000..fd5087d
--- /dev/null
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Martin Oberhuber (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.emulator;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Terminal emulator test cases. 
+ * Runs in emulator package to allow access to default visible items.
+ */
+public class AllTests extends TestCase {
+       public AllTests() {
+               super(null);
+       }
+
+       public AllTests(String name) {
+               super(name);
+       }
+
+       public static Test suite() {
+               TestSuite suite = new TestSuite(AllTests.class.getName());
+               suite.addTestSuite(VT100EmulatorBackendTest.class);
+               return suite;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackendTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackendTest.java
new file mode 100644 (file)
index 0000000..0a65fd7
--- /dev/null
@@ -0,0 +1,1381 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [168197] Fix Terminal for CDC-1.1/Foundation-1.1
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ * Anton Leherbauer (Wind River) - [458218] Add support for ANSI insert mode
+ * Anton Leherbauer (Wind River) - [458402] Add support for scroll up/down and scroll region
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.emulator;
+
+import junit.framework.TestCase;
+
+import org.eclipse.tm.internal.terminal.model.TerminalTextDataStore;
+import org.eclipse.tm.internal.terminal.model.TerminalTextTestHelper;
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
+import org.eclipse.tm.terminal.model.Style;
+
+public class VT100EmulatorBackendTest extends TestCase {
+
+       protected IVT100EmulatorBackend makeBakend(ITerminalTextData term) {
+               return new VT100EmulatorBackend(term);
+       }
+
+       protected ITerminalTextData makeITerminalTextData() {
+               return new TerminalTextDataStore();
+       }
+
+       protected String toSimple(ITerminalTextData term) {
+               return TerminalTextTestHelper.toSimple(term);
+       }
+       protected String toMultiLineText(ITerminalTextDataReadOnly term) {
+               return TerminalTextTestHelper.toMultiLineText(term);
+       }
+
+       protected void fill(ITerminalTextData term, String s) {
+               TerminalTextTestHelper.fill(term,s);
+       }
+
+       protected void fillSimple(ITerminalTextData term, String s) {
+               TerminalTextTestHelper.fillSimple(term, s);
+       }
+
+
+       /**
+        * Used for multi line text
+        * @param expected
+        * @param actual
+        */
+       protected void assertEqualsTerm(String expected,String actual) {
+               assertEquals(expected.replace(' ', '.'), actual.replace('\000', '.'));
+       }
+       /**
+        * Used for simple text
+        * @param expected
+        * @param actual
+        */
+       protected void assertEqualsSimple(String expected,String actual) {
+               assertEquals(-1,actual.indexOf('\n'));
+               assertEquals(expected, actual);
+       }
+       public void testClearAll() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               vt100.setDimensions(3, 4);
+               fill(term, "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "4444\n" +
+                               "5555");
+               vt100.clearAll();
+               assertEqualsTerm(
+                               "    \n" +
+                               "    \n" +
+                               "    ",toMultiLineText(term));
+       }
+       public void testSetDimensions() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               String s = "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "4444\n" +
+                               "5555";
+               fill(term, s);
+               vt100.setDimensions(3, 4);
+               assertEquals(3,vt100.getLines());
+               assertEquals(4,vt100.getColumns());
+               assertEqualsTerm(s,toMultiLineText(term));
+
+               vt100.setCursor(0, 2);
+               vt100.setDimensions(2, 4);
+               assertEquals(0, vt100.getCursorLine());
+               assertEquals(2, vt100.getCursorColumn());
+
+               vt100.setCursor(0, 2);
+               vt100.setDimensions(5, 4);
+               assertEquals(3, vt100.getCursorLine());
+               assertEquals(2, vt100.getCursorColumn());
+
+               assertEqualsTerm(s,toMultiLineText(term));
+
+               vt100.setCursor(0, 3);
+               vt100.setDimensions(5, 2);
+               assertEquals(0, vt100.getCursorLine());
+               assertEquals(1, vt100.getCursorColumn());
+       }
+
+       public void testToAbsoluteLine() {
+               ITerminalTextData term=makeITerminalTextData();
+               VT100EmulatorBackend vt100=new VT100EmulatorBackend(term);
+               vt100.setDimensions(2, 3);
+               assertEquals(vt100.toAbsoluteLine(0),0);
+               // TODO
+               term=makeITerminalTextData();
+               vt100=new VT100EmulatorBackend(term);
+               vt100.setDimensions(1, 10);
+               assertEquals(vt100.toAbsoluteLine(0),0);
+       }
+
+       public void testInsertCharacters() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               vt100.setDimensions(3, 4);
+               String s =
+                               "aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "1234\n" +
+                               "4567\n" +
+                               "9012";
+               fill(term, s);
+               vt100.setCursor(0, 0);
+               vt100.insertCharacters(1);
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               " 123\n" +
+                               "4567\n" +
+                               "9012",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 1);
+               vt100.insertCharacters(1);
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "1234\n" +
+                               "4 56\n" +
+                               "9012",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 1);
+               vt100.insertCharacters(2);
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "1234\n" +
+                               "4  5\n" +
+                               "9012",toMultiLineText(term));
+
+               vt100.setDimensions(1, 10);
+               fill(term, "0123456789");
+               vt100.setCursor(0, 0);
+               vt100.insertCharacters(10);
+               assertEqualsTerm("          ",toMultiLineText(term));
+
+               vt100.setDimensions(1, 10);
+               fill(term, "0123456789");
+               vt100.setCursor(0, 0);
+               vt100.insertCharacters(14);
+               assertEqualsTerm("          ",toMultiLineText(term));
+
+               vt100.setDimensions(1, 10);
+               fill(term, "0123456789");
+               vt100.setCursor(0, 3);
+               vt100.insertCharacters(14);
+               assertEqualsTerm("012       ",toMultiLineText(term));
+
+               vt100.setDimensions(1, 10);
+               fill(term, "0123456789");
+               vt100.setCursor(0, 3);
+               vt100.insertCharacters(0);
+               assertEqualsTerm("0123456789",toMultiLineText(term));
+
+               vt100.setDimensions(1, 10);
+               fill(term, "0123456789");
+               vt100.setCursor(0, 3);
+               vt100.insertCharacters(2);
+               assertEqualsTerm("012  34567",toMultiLineText(term));
+       }
+
+       public void testEraseToEndOfScreen() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               vt100.setDimensions(3, 4);
+               String s =
+                               "aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "0123\n" +
+                               "4567\n" +
+                               "8901";
+               fill(term, s);
+               vt100.setCursor(0, 0);
+               vt100.eraseToEndOfScreen();
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "    \n" +
+                               "    \n" +
+                               "    ",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 0);
+               vt100.eraseToEndOfScreen();
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "0123\n" +
+                               "    \n" +
+                               "    ",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 1);
+               vt100.eraseToEndOfScreen();
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(1,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "0123\n" +
+                               "4   \n" +
+                               "    ",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 4);
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               vt100.eraseToEndOfScreen();
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "0123\n" +
+                               "456.\n" +
+                               "    ",toMultiLineText(term));
+
+
+               fill(term, s);
+               vt100.setCursor(1, 5);
+               vt100.eraseToEndOfScreen();
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "0123\n" +
+                               "456.\n" +
+                               "    ",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(2, 3);
+               vt100.eraseToEndOfScreen();
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "0123\n" +
+                               "4567\n" +
+                               "890 ",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(2, 5);
+               vt100.eraseToEndOfScreen();
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "0123\n" +
+                               "4567\n" +
+                               "890.",toMultiLineText(term));
+       }
+
+       public void testEraseToCursor() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               vt100.setDimensions(3, 4);
+               String s =
+                               "aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "0123\n" +
+                               "4567\n" +
+                               "8901";
+               fill(term, s);
+               vt100.setCursor(0, 0);
+               vt100.eraseToCursor();
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               " 123\n" +
+                               "4567\n" +
+                               "8901",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 0);
+               vt100.eraseToCursor();
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "    \n" +
+                               " 567\n" +
+                               "8901",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 1);
+               vt100.eraseToCursor();
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(1,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "    \n" +
+                               "  67\n" +
+                               "8901",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 4);
+               vt100.eraseToCursor();
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "    \n" +
+                               "    \n" +
+                               "8901",toMultiLineText(term));
+
+
+               fill(term, s);
+               vt100.setCursor(1, 5);
+               vt100.eraseToCursor();
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "    \n" +
+                               "    \n" +
+                               "8901",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(2, 3);
+               vt100.eraseToCursor();
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "    \n" +
+                               "    \n" +
+                               "    ",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(2, 5);
+               vt100.eraseToCursor();
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "    \n" +
+                               "    \n" +
+                               "    ",toMultiLineText(term));
+       }
+
+       public void testEraseAll() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               vt100.setDimensions(3, 4);
+               fill(term, "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "4444\n" +
+                               "5555");
+               vt100.eraseAll();
+               assertEqualsTerm("0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "    \n" +
+                               "    \n" +
+                               "    ",toMultiLineText(term));
+       }
+
+       public void testEraseLine() {
+               String s =
+                       "abcde\n" +
+                       "fghij\n" +
+                       "klmno\n" +
+                       "pqrst\n" +
+                       "uvwxy\n" +
+                       "zABCD\n" +
+                       "EFGHI";
+
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+
+               vt100.setDimensions(3, 5);
+               fill(term, s);
+               vt100.setCursor(0, 3);
+               vt100.eraseLine();
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("abcde\n" +
+                               "fghij\n" +
+                               "klmno\n" +
+                               "pqrst\n" +
+                               "     \n" +
+                               "zABCD\n" +
+                               "EFGHI", toMultiLineText(term));
+
+
+               vt100.setDimensions(3, 5);
+               fill(term, s);
+               vt100.setCursor(2, 3);
+               vt100.eraseLine();
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("abcde\n" +
+                               "fghij\n" +
+                               "klmno\n" +
+                               "pqrst\n" +
+                               "uvwxy\n" +
+                               "zABCD\n" +
+                               "     ", toMultiLineText(term));
+       }
+
+       public void testEraseLineToEnd() {
+               String s =
+                       "abcde\n" +
+                       "fghij\n" +
+                       "klmno\n" +
+                       "pqrst\n" +
+                       "uvwxy\n" +
+                       "zABCD\n" +
+                       "EFGHI";
+
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+
+               vt100.setDimensions(3, 5);
+               fill(term, s);
+               vt100.setCursor(0, 3);
+               vt100.eraseLineToEnd();
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("abcde\n" +
+                               "fghij\n" +
+                               "klmno\n" +
+                               "pqrst\n" +
+                               "uvw  \n" +
+                               "zABCD\n" +
+                               "EFGHI", toMultiLineText(term));
+
+               vt100.setDimensions(3, 5);
+               fill(term, s);
+               vt100.setCursor(0, 0);
+               vt100.eraseLineToEnd();
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               assertEqualsTerm("abcde\n" +
+                               "fghij\n" +
+                               "klmno\n" +
+                               "pqrst\n" +
+                               "     \n" +
+                               "zABCD\n" +
+                               "EFGHI", toMultiLineText(term));
+
+
+               vt100.setDimensions(3, 5);
+               fill(term, s);
+               vt100.setCursor(2, 3);
+               vt100.eraseLineToEnd();
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("abcde\n" +
+                               "fghij\n" +
+                               "klmno\n" +
+                               "pqrst\n" +
+                               "uvwxy\n" +
+                               "zABCD\n" +
+                               "EFG  ", toMultiLineText(term));
+               vt100.setDimensions(3, 5);
+               fill(term, s);
+
+               vt100.setCursor(2, 4);
+               vt100.eraseLineToEnd();
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(4,vt100.getCursorColumn());
+               assertEqualsTerm("abcde\n" +
+                               "fghij\n" +
+                               "klmno\n" +
+                               "pqrst\n" +
+                               "uvwxy\n" +
+                               "zABCD\n" +
+                               "EFGH ", toMultiLineText(term));
+
+               vt100.setCursor(2, 5);
+               vt100.eraseLineToEnd();
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(4,vt100.getCursorColumn());
+               assertEqualsTerm("abcde\n" +
+                               "fghij\n" +
+                               "klmno\n" +
+                               "pqrst\n" +
+                               "uvwxy\n" +
+                               "zABCD\n" +
+                               "EFGH ", toMultiLineText(term));
+
+       }
+
+       public void testEraseLineToCursor() {
+               String s =
+                       "abcde\n" +
+                       "fghij\n" +
+                       "klmno\n" +
+                       "pqrst\n" +
+                       "uvwxy\n" +
+                       "zABCD\n" +
+                       "EFGHI";
+
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+
+               vt100.setDimensions(3, 5);
+               fill(term, s);
+               vt100.setCursor(0, 3);
+               vt100.eraseLineToCursor();
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("abcde\n" +
+                               "fghij\n" +
+                               "klmno\n" +
+                               "pqrst\n" +
+                               "    y\n" +
+                               "zABCD\n" +
+                               "EFGHI", toMultiLineText(term));
+
+               vt100.setDimensions(3, 5);
+               fill(term, s);
+               vt100.setCursor(0, 0);
+               vt100.eraseLineToCursor();
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               assertEqualsTerm("abcde\n" +
+                               "fghij\n" +
+                               "klmno\n" +
+                               "pqrst\n" +
+                               " vwxy\n" +
+                               "zABCD\n" +
+                               "EFGHI", toMultiLineText(term));
+
+
+               vt100.setDimensions(3, 5);
+               fill(term, s);
+               vt100.setCursor(2, 3);
+               vt100.eraseLineToCursor();
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               assertEqualsTerm("abcde\n" +
+                               "fghij\n" +
+                               "klmno\n" +
+                               "pqrst\n" +
+                               "uvwxy\n" +
+                               "zABCD\n" +
+                               "    I", toMultiLineText(term));
+               vt100.setDimensions(3, 5);
+               fill(term, s);
+
+               vt100.setCursor(2, 4);
+               vt100.eraseLineToCursor();
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(4,vt100.getCursorColumn());
+               assertEqualsTerm("abcde\n" +
+                               "fghij\n" +
+                               "klmno\n" +
+                               "pqrst\n" +
+                               "uvwxy\n" +
+                               "zABCD\n" +
+                               "     ", toMultiLineText(term));
+
+               vt100.setCursor(2, 5);
+               vt100.eraseLineToCursor();
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(4,vt100.getCursorColumn());
+               assertEqualsTerm("abcde\n" +
+                               "fghij\n" +
+                               "klmno\n" +
+                               "pqrst\n" +
+                               "uvwxy\n" +
+                               "zABCD\n" +
+                               "     ", toMultiLineText(term));
+
+       }
+
+       public void testInsertLines() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               String s = "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "4444\n" +
+                               "5555";
+               vt100.setDimensions(3, 4);
+               fill(term, s);
+               vt100.setCursor(0, 0);
+               vt100.insertLines(1);
+               assertEqualsTerm(
+                               "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "    \n" +
+                               "3333\n" +
+                               "4444", toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 0);
+               vt100.insertLines(1);
+               assertEqualsTerm(
+                               "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "    \n" +
+                               "4444", toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 0);
+               vt100.insertLines(2);
+               assertEqualsTerm(
+                               "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 3);
+               vt100.insertLines(2);
+               assertEqualsTerm(
+                               "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+
+
+               vt100.setDimensions(6, 4);
+               fill(term, s);
+               vt100.setCursor(1, 3);
+               vt100.insertLines(2);
+               assertEqualsTerm(
+                               "0000\n" +
+                               "    \n" +
+                               "    \n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333", toMultiLineText(term));
+
+
+               vt100.setDimensions(6, 4);
+               fill(term, s);
+               vt100.setCursor(1, 3);
+               vt100.insertLines(7);
+               assertEqualsTerm(
+                               "0000\n" +
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+
+               vt100.setDimensions(6, 4);
+               fill(term, s);
+               vt100.setCursor(0, 0);
+               vt100.insertLines(7);
+               assertEqualsTerm(
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+
+               vt100.setDimensions(6, 4);
+               fill(term, s);
+               vt100.setCursor(0, 0);
+               vt100.insertLines(5);
+               assertEqualsTerm(
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "0000", toMultiLineText(term));
+       }
+
+       public void testDeleteCharacters() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               vt100.setDimensions(3, 4);
+               String s =
+                               "aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "1234\n" +
+                               "4567\n" +
+                               "9012";
+               fill(term, s);
+               vt100.setCursor(0, 0);
+               vt100.deleteCharacters(1);
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "234 \n" +
+                               "4567\n" +
+                               "9012",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 1);
+               vt100.deleteCharacters(1);
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "1234\n" +
+                               "467 \n" +
+                               "9012",toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 1);
+               vt100.deleteCharacters(2);
+               assertEqualsTerm("aaaa\n" +
+                               "bbbb\n" +
+                               "cccc\n" +
+                               "dddd\n" +
+                               "eeee\n" +
+                               "ffff\n" +
+                               "1234\n" +
+                               "47  \n" +
+                               "9012",toMultiLineText(term));
+
+               vt100.setDimensions(1, 10);
+               fill(term, "0123456789");
+               vt100.setCursor(0, 0);
+               vt100.deleteCharacters(10);
+               assertEqualsTerm("          ",toMultiLineText(term));
+
+               vt100.setDimensions(1, 10);
+               fill(term, "0123456789");
+               vt100.setCursor(0, 0);
+               vt100.deleteCharacters(14);
+               assertEqualsTerm("          ",toMultiLineText(term));
+
+               vt100.setDimensions(1, 10);
+               fill(term, "0123456789");
+               vt100.setCursor(0, 3);
+               vt100.deleteCharacters(0);
+               assertEqualsTerm("0123456789",toMultiLineText(term));
+
+               vt100.setDimensions(1, 10);
+               fill(term, "0123456789");
+               vt100.setCursor(0, 3);
+               vt100.deleteCharacters(2);
+               assertEqualsTerm("01256789  ",toMultiLineText(term));
+
+               vt100.setDimensions(1, 10);
+               fill(term, "0123456789");
+               vt100.setCursor(0, 3);
+               vt100.deleteCharacters(14);
+               assertEqualsTerm("012       ",toMultiLineText(term));
+
+       }
+
+       public void testDeleteLines() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               String s = "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "4444\n" +
+                               "5555";
+               vt100.setDimensions(3, 4);
+               fill(term, s);
+               vt100.setCursor(0, 0);
+               vt100.deleteLines(1);
+               assertEqualsTerm(
+                               "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "4444\n" +
+                               "5555\n" +
+                               "    ", toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 0);
+               vt100.deleteLines(1);
+               assertEqualsTerm(
+                               "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "5555\n" +
+                               "    ", toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 0);
+               vt100.deleteLines(2);
+               assertEqualsTerm(
+                               "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+
+               fill(term, s);
+               vt100.setCursor(1, 3);
+               vt100.deleteLines(2);
+               assertEqualsTerm(
+                               "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+
+
+               vt100.setDimensions(6, 4);
+               fill(term, s);
+               vt100.setCursor(1, 3);
+               vt100.deleteLines(2);
+               assertEqualsTerm(
+                               "0000\n" +
+                               "3333\n" +
+                               "4444\n" +
+                               "5555\n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+
+
+               vt100.setDimensions(6, 4);
+               fill(term, s);
+               vt100.setCursor(1, 3);
+               vt100.deleteLines(7);
+               assertEqualsTerm(
+                               "0000\n" +
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+
+               vt100.setDimensions(6, 4);
+               fill(term, s);
+               vt100.setCursor(0, 0);
+               vt100.deleteLines(7);
+               assertEqualsTerm(
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+
+               vt100.setDimensions(6, 4);
+               fill(term, s);
+               vt100.setCursor(0, 0);
+               vt100.deleteLines(5);
+               assertEqualsTerm(
+                               "5555\n" +
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+       }
+
+       public void testGetDefaultStyle() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               Style style=Style.getStyle("white", "black");
+               vt100.setDefaultStyle(style);
+               assertSame(style, vt100.getDefaultStyle());
+               Style style2=style.setBold(true);
+               vt100.setDefaultStyle(style2);
+               assertSame(style2, vt100.getDefaultStyle());
+       }
+
+       public void testGetStyle() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               Style style=Style.getStyle("white", "black");
+               vt100.setStyle(style);
+               assertSame(style, vt100.getStyle());
+               Style style2=style.setBold(true);
+               vt100.setStyle(style2);
+               assertSame(style2, vt100.getStyle());
+       }
+
+       public void testAppendString() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               term.setMaxHeight(6);
+               vt100.setDimensions(3, 4);
+               vt100.setCursor(0, 0);
+               assertEqualsTerm(
+                               "    \n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+               vt100.appendString("012");
+               assertEqualsTerm(
+                               "012 \n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+               vt100.appendString("3");
+               assertEqualsTerm(
+                               "0123\n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+
+               vt100.appendString("567890");
+               assertEqualsTerm(
+                               "0123\n" +
+                               "5678\n" +
+                               "90  ", toMultiLineText(term));
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(2,vt100.getCursorColumn());
+
+
+               vt100.appendString("a");
+               assertEqualsTerm(
+                               "0123\n" +
+                               "5678\n" +
+                               "90a ", toMultiLineText(term));
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+
+               vt100.appendString("b");
+               assertEqualsTerm(
+                               "0123\n" +
+                               "5678\n" +
+                               "90ab\n" +
+                               "    ", toMultiLineText(term));
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+
+               vt100.appendString("cd");
+               assertEqualsTerm(
+                               "0123\n" +
+                               "5678\n" +
+                               "90ab\n" +
+                               "cd  ", toMultiLineText(term));
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(2,vt100.getCursorColumn());
+
+               vt100.appendString("efgh");
+               assertEqualsTerm(
+                               "0123\n" +
+                               "5678\n" +
+                               "90ab\n" +
+                               "cdef\n" +
+                               "gh  ", toMultiLineText(term));
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(2,vt100.getCursorColumn());
+
+               vt100.appendString("ijklmnopqrstuvwx");
+               assertEqualsTerm(
+                               "cdef\n" +
+                               "ghij\n" +
+                               "klmn\n" +
+                               "opqr\n" +
+                               "stuv\n" +
+                               "wx  ", toMultiLineText(term));
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(2,vt100.getCursorColumn());
+
+               vt100.setCursor(1, 1);
+               vt100.appendString("123");
+               assertEqualsTerm(
+                               "cdef\n" +
+                               "ghij\n" +
+                               "klmn\n" +
+                               "opqr\n" +
+                               "s123\n" +
+                               "wx  ", toMultiLineText(term));
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+
+               vt100.setCursor(1, 1);
+               vt100.appendString("ABCDEFGHIJKL");
+               assertEqualsTerm(
+                               "klmn\n" +
+                               "opqr\n" +
+                               "sABC\n" +
+                               "DEFG\n" +
+                               "HIJK\n" +
+                               "L   ", toMultiLineText(term));
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(1,vt100.getCursorColumn());
+
+       }
+
+       public void testProcessNewline() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               String s = "0000\n" +
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "4444\n" +
+                               "5555";
+               term.setMaxHeight(6);
+               vt100.setDimensions(3, 4);
+               vt100.setCursor(0, 0);
+               fill(term,s);
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               vt100.processNewline();
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               vt100.setCursorColumn(3);
+               vt100.processNewline();
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+
+               vt100.processNewline();
+               assertEqualsTerm(
+                               "1111\n" +
+                               "2222\n" +
+                               "3333\n" +
+                               "4444\n" +
+                               "5555\n" +
+                               "    ", toMultiLineText(term));
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+
+
+               vt100.processNewline();
+               assertEqualsTerm(
+                               "2222\n" +
+                               "3333\n" +
+                               "4444\n" +
+                               "5555\n" +
+                               "    \n" +
+                               "    ", toMultiLineText(term));
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+       }
+
+       public void testSetCursorLine() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               term.setMaxHeight(6);
+               vt100.setDimensions(3, 4);
+               // the cursor still at the beginning....
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               vt100.setCursor(0, 2);
+               vt100.setCursorLine(1);
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(2,vt100.getCursorColumn());
+               vt100.setCursor(0, -2);
+               vt100.setCursorLine(-1);
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               vt100.setCursor(0, 10);
+               vt100.setCursorLine(10);
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+       }
+       public void testSetCursorAndSetDimensions() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               term.setMaxHeight(10);
+               vt100.setDimensions(3, 4);
+               // the cursor still at the beginning....
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               vt100.setDimensions(6, 4);
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               vt100.setCursor(2, 3);
+               vt100.setDimensions(8, 4);
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+       }
+
+       public void testSetCursorColumn() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               term.setMaxHeight(6);
+               vt100.setDimensions(3, 4);
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               vt100.setCursor(1, 0);
+               vt100.setCursorColumn(2);
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(2,vt100.getCursorColumn());
+               vt100.setCursor(-1, -2);
+               vt100.setCursorColumn(-2);
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               vt100.setCursor(10, 0);
+               vt100.setCursorColumn(10);
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+       }
+
+       public void testSetCursor() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               term.setMaxHeight(6);
+               vt100.setDimensions(3, 4);
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               vt100.setCursor(0, 0);
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               vt100.setCursor(1, 2);
+               assertEquals(1,vt100.getCursorLine());
+               assertEquals(2,vt100.getCursorColumn());
+               vt100.setCursor(-1, -2);
+               assertEquals(0,vt100.getCursorLine());
+               assertEquals(0,vt100.getCursorColumn());
+               vt100.setCursor(10, 10);
+               assertEquals(2,vt100.getCursorLine());
+               assertEquals(3,vt100.getCursorColumn());
+       }
+
+       public void testVT100LineWrappingOn() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               term.setMaxHeight(10);
+               vt100.setDimensions(6, 4);
+               vt100.setVT100LineWrapping(true);
+               vt100.appendString("abcd");
+               vt100.setCursorColumn(0);
+               vt100.processNewline();
+               vt100.appendString("1234");
+               vt100.setCursorColumn(0);
+               vt100.processNewline();
+               assertEquals(2, vt100.getCursorLine());
+       }
+
+       public void testVT100LineWrappingOff() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               term.setMaxHeight(10);
+               vt100.setDimensions(6, 4);
+               vt100.setVT100LineWrapping(false);
+               vt100.appendString("abcd");
+               vt100.setCursorColumn(0);
+               vt100.processNewline();
+               vt100.appendString("1234");
+               vt100.setCursorColumn(0);
+               vt100.processNewline();
+               assertEquals(4, vt100.getCursorLine());
+       }
+
+       public void testWrappedLines() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               term.setMaxHeight(10);
+               vt100.setDimensions(6, 4);
+               vt100.setVT100LineWrapping(true);
+               vt100.appendString("abcd123");
+               vt100.setCursorColumn(0);
+               vt100.processNewline();
+               vt100.appendString("abc");
+               vt100.setCursorColumn(0);
+               vt100.processNewline();
+               vt100.appendString("1234abcd");
+               assertEquals(4, vt100.getCursorLine());
+               assertTrue(term.isWrappedLine(0));
+               assertFalse(term.isWrappedLine(1));
+               assertFalse(term.isWrappedLine(2));
+               assertTrue(term.isWrappedLine(3));
+       }
+
+       public void testInsertMode() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               term.setMaxHeight(10);
+               vt100.setDimensions(4, 6);
+               // replace mode
+               vt100.appendString("123");
+               vt100.setCursorColumn(0);
+               vt100.appendString("abc");
+               assertEquals("abc", new String(term.getChars(0)));
+               vt100.clearAll();
+               // insert mode
+               vt100.setCursorColumn(0);
+               vt100.appendString("123");
+               vt100.setCursorColumn(0);
+               vt100.setInsertMode(true);
+               vt100.appendString("abc");
+               vt100.setInsertMode(false);
+               assertEquals("abc123", new String(term.getChars(0)));
+       }
+
+       public void testScrollRegion() {
+               ITerminalTextData term=makeITerminalTextData();
+               IVT100EmulatorBackend vt100=makeBakend(term);
+               term.setMaxHeight(10);
+               vt100.setDimensions(8, 6);
+               vt100.appendString("123");
+               vt100.setCursorColumn(0);
+               vt100.processNewline();
+               vt100.appendString("456");
+               vt100.setCursorColumn(0);
+               vt100.processNewline();
+               vt100.appendString("789");
+               vt100.setCursorColumn(0);
+               vt100.processNewline();
+               vt100.appendString("abc");
+               vt100.setCursorColumn(0);
+               vt100.processNewline();
+               vt100.appendString("def");
+               vt100.setCursorColumn(0);
+               vt100.processNewline();
+               vt100.appendString("ghi");
+               
+               // test scroll within region
+               vt100.setCursorLine(1);
+               vt100.setScrollRegion(1, 4);
+               vt100.scrollUp(1);
+               assertEquals("123", new String(term.getChars(0)));
+               assertEquals("789", new String(term.getChars(1)));
+               assertEquals("abc", new String(term.getChars(2)));
+               assertEquals("def", new String(term.getChars(3)));
+               assertNull(term.getChars(4));
+               assertEquals("ghi", new String(term.getChars(5)));
+               vt100.scrollDown(1);
+               assertEquals("123", new String(term.getChars(0)));
+               assertNull(term.getChars(1));
+               assertEquals("789", new String(term.getChars(2)));
+               assertEquals("abc", new String(term.getChars(3)));
+               assertEquals("def", new String(term.getChars(4)));
+               assertEquals("ghi", new String(term.getChars(5)));
+
+               // test scroll without region
+               vt100.setScrollRegion(-1, -1);
+               vt100.scrollDown(1);
+               assertNull(term.getChars(0));
+               assertEquals("123", new String(term.getChars(1)));
+               assertNull(term.getChars(2));
+               assertEquals("789", new String(term.getChars(3)));
+               assertEquals("abc", new String(term.getChars(4)));
+               assertEquals("def", new String(term.getChars(5)));
+               assertEquals("ghi", new String(term.getChars(6)));
+               vt100.scrollUp(1);
+               assertEquals("123", new String(term.getChars(0)));
+               assertNull(term.getChars(1));
+               assertEquals("789", new String(term.getChars(2)));
+               assertEquals("abc", new String(term.getChars(3)));
+               assertEquals("def", new String(term.getChars(4)));
+               assertEquals("ghi", new String(term.getChars(5)));
+               
+               // test scroll by newline
+               vt100.setScrollRegion(1, 4);
+               vt100.setCursorLine(4);
+               vt100.processNewline();
+               assertEquals("123", new String(term.getChars(0)));
+               assertEquals("789", new String(term.getChars(1)));
+               assertEquals("abc", new String(term.getChars(2)));
+               assertEquals("def", new String(term.getChars(3)));
+               assertNull(term.getChars(4));
+               assertEquals("ghi", new String(term.getChars(5)));
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/AbstractITerminalTextDataTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/AbstractITerminalTextDataTest.java
new file mode 100644 (file)
index 0000000..9eff106
--- /dev/null
@@ -0,0 +1,832 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2014 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Anton Leherbauer (Wind River) - [453393] Add support for copying wrapped lines without line break
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+import junit.framework.TestCase;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
+import org.eclipse.tm.terminal.model.LineSegment;
+import org.eclipse.tm.terminal.model.Style;
+import org.eclipse.tm.terminal.model.StyleColor;
+
+abstract public class AbstractITerminalTextDataTest extends TestCase {
+       abstract protected ITerminalTextData makeITerminalTextData();
+
+       protected void setUp() throws Exception {
+               try {
+                       assert false;
+                       throw new Error("No Assertions! Run this code with assertions enabled! (vmargs: -ea)");
+               } catch(AssertionError e) {
+                       // OK, assertions are enabled!
+               }
+               super.setUp();
+       }
+       protected String toSimple(ITerminalTextData term) {
+               return TerminalTextTestHelper.toSimple(term);
+       }
+       protected String toMultiLineText(ITerminalTextDataReadOnly term) {
+               return TerminalTextTestHelper.toMultiLineText(term);
+       }
+       
+       protected void fill(ITerminalTextData term, String s) {
+               TerminalTextTestHelper.fill(term,s);
+       }
+
+       protected void fill(ITerminalTextData term, int i, int j, String s) {
+               TerminalTextTestHelper.fill(term,i,j,s);
+       }
+
+       protected void fillSimple(ITerminalTextData term, String s) {
+               TerminalTextTestHelper.fillSimple(term, s);
+       }
+
+
+       /**
+        * Used for multi line text
+        * @param expected
+        * @param actual
+        */
+       protected void assertEqualsTerm(String expected,String actual) {
+               assertEquals(expected, actual);
+       }
+       /**
+        * Used for simple text
+        * @param expected
+        * @param actual
+        */
+       protected void assertEqualsSimple(String expected,String actual) {
+               assertEquals(-1,actual.indexOf('\n'));
+               assertEquals(expected, actual);
+       }
+       public void testGetWidth() {
+               ITerminalTextData term=makeITerminalTextData();
+               assertEquals(0, term.getWidth());
+               term.setDimensions(term.getHeight(), 10);
+               assertEquals(10, term.getWidth());
+               term.setDimensions(term.getHeight(), 0);
+               assertEquals(0, term.getWidth());
+       }
+
+       public void testAddLine() {
+               String s=
+                       "111\n" +
+                       "222\n" +
+                       "333\n" +
+                       "444\n" +
+                       "555";
+               ITerminalTextData term=makeITerminalTextData();
+               fill(term, s);
+               term.setMaxHeight(5);
+               term.addLine();
+               assertEqualsTerm(
+                               "222\n" +
+                               "333\n" +
+                               "444\n" +
+                               "555\n" +
+                               "\000\000\000", toMultiLineText(term));
+       }
+       public void testCleanLine() {
+               String s=
+                       "111\n" +
+                       "222\n" +
+                       "333\n" +
+                       "444\n" +
+                       "555";
+               ITerminalTextData term=makeITerminalTextData();
+               fill(term, s);
+               term.cleanLine(0);
+               assertEqualsTerm(
+                               "\000\000\000\n" +
+                               "222\n" +
+                               "333\n" +
+                               "444\n" +
+                               "555", toMultiLineText(term));
+               
+               fill(term, s);
+               term.cleanLine(4);
+               assertEqualsTerm(
+                               "111\n" +
+                               "222\n" +
+                               "333\n" +
+                               "444\n" +
+                               "\000\000\000", toMultiLineText(term));
+       }
+
+       public void testMaxSize() {
+               String s=
+                       "111\n" +
+                       "222\n" +
+                       "333\n" +
+                       "444\n" +
+                       "555";
+               ITerminalTextData term=makeITerminalTextData();
+               term.setMaxHeight(8);
+               fill(term, s);
+               assertEquals(5, term.getHeight());
+               assertEquals(8, term.getMaxHeight());
+               term.addLine();
+               assertEquals(6, term.getHeight());
+               assertEqualsTerm(
+                               "111\n" +
+                               "222\n" +
+                               "333\n" +
+                               "444\n" +
+                               "555\n" +
+                               "\000\000\000", toMultiLineText(term));
+               term.addLine();
+               assertEquals(7, term.getHeight());
+               assertEqualsTerm(
+                               "111\n" +
+                               "222\n" +
+                               "333\n" +
+                               "444\n" +
+                               "555\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000", toMultiLineText(term));
+               term.addLine();
+               assertEquals(8, term.getHeight());
+               assertEqualsTerm(
+                               "111\n" +
+                               "222\n" +
+                               "333\n" +
+                               "444\n" +
+                               "555\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000", toMultiLineText(term));
+               term.addLine();
+               assertEquals(8, term.getHeight());
+               assertEqualsTerm(
+                               "222\n" +
+                               "333\n" +
+                               "444\n" +
+                               "555\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000", toMultiLineText(term));
+               term.addLine();
+               assertEquals(8, term.getHeight());
+               assertEqualsTerm(
+                               "333\n" +
+                               "444\n" +
+                               "555\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000", toMultiLineText(term));
+       }
+       public void testGetHeight() {
+               ITerminalTextData term=makeITerminalTextData();
+               assertEquals(0, term.getHeight());
+               term.setDimensions(10, term.getWidth());
+               assertEquals(10, term.getHeight());
+               term.setDimensions(0, term.getWidth());
+               assertEquals(0, term.getHeight());
+       }
+
+       public void testSetDimensions() {
+               ITerminalTextData term=makeITerminalTextData();
+               assertEquals(0, term.getHeight());
+               term.setDimensions(10, 5);
+               assertEquals(5, term.getWidth());
+               assertEquals(10, term.getHeight());
+               term.setDimensions(5, 10);
+               assertEquals(10, term.getWidth());
+               assertEquals(5, term.getHeight());
+               term.setDimensions(15, 0);
+               assertEquals(0, term.getWidth());
+               assertEquals(15, term.getHeight());
+               term.setDimensions(0, 12);
+               assertEquals(12, term.getWidth());
+               assertEquals(0, term.getHeight());
+               term.setDimensions(0, 0);
+               assertEquals(0, term.getWidth());
+               assertEquals(0, term.getHeight());
+       }
+       public void testResize() {
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(3, 5);
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE";
+               fill(term,0,0,s);
+               assertEqualsTerm(s, toMultiLineText(term));
+               term.setDimensions(3, 4);
+               assertEqualsTerm(
+                                "1234\n" +
+                                "abcd\n" +
+                                "ABCD", toMultiLineText(term));
+               // the columns should be restored
+               term.setDimensions(3, 5);
+               assertEqualsTerm(
+                                "12345\n" +
+                                "abcde\n" +
+                                "ABCDE", toMultiLineText(term));
+               term.setDimensions(3, 6);
+               assertEqualsTerm(
+                                "12345\000\n" +
+                                "abcde\000\n" +
+                                "ABCDE\000", toMultiLineText(term));
+               term.setChar(0, 5, 'x', null);
+               term.setChar(1, 5, 'y', null);
+               term.setChar(2, 5, 'z', null);
+               assertEqualsTerm(
+                                "12345x\n" +
+                                "abcdey\n" +
+                                "ABCDEz", toMultiLineText(term));
+               term.setDimensions(2, 4);
+               assertEqualsTerm(
+                                "1234\n" +
+                                "abcd", toMultiLineText(term));
+       }
+
+       public void testResizeFailure() {
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(3, 5);
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE";
+               fill(term,0,0,s);
+               assertEqualsTerm(s, toMultiLineText(term));
+               try {
+                       term.setDimensions(-3, 4);
+                       fail();
+               } catch (RuntimeException e) {
+                       // OK
+               }
+//             assertEquals(5, term.getWidth());
+//             assertEquals(3, term.getHeight());
+//             assertEquals(s, toSimpleText(term));
+       }
+       
+       public void testGetLineSegments() {
+               Style s1=getDefaultStyle();
+               Style s2=s1.setBold(true);
+               Style s3=s1.setUnderline(true);
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(8, 8);
+               LineSegment[] segments;
+               
+               term.setChars(0, 0,"0123".toCharArray(), s1);
+               term.setChars(0, 4,"abcd".toCharArray(), null);
+               segments=term.getLineSegments(0, 0, term.getWidth());
+               assertEquals(2, segments.length);
+               assertSegment(0, "0123", s1, segments[0]);
+               assertSegment(4, "abcd", null, segments[1]);
+               
+               
+               segments=term.getLineSegments(0, 4, term.getWidth()-4);
+               assertEquals(1, segments.length);
+               assertSegment(4, "abcd", null, segments[0]);
+               
+               segments=term.getLineSegments(0, 3, 2);
+               assertEquals(2, segments.length);
+               assertSegment(3, "3", s1, segments[0]);
+               assertSegment(4, "a", null, segments[1]);
+               
+               segments=term.getLineSegments(0, 7, 1);
+               assertEquals(1, segments.length);
+               assertSegment(7, "d", null, segments[0]);
+               
+               segments=term.getLineSegments(0, 0, 1);
+               assertEquals(1, segments.length);
+               assertSegment(0, "0", s1, segments[0]);
+               
+               // line 1
+               term.setChars(1, 0,"x".toCharArray(), s1);
+               term.setChars(1, 1,"y".toCharArray(), s2);
+               term.setChars(1, 2,"z".toCharArray(), s3);
+               
+               segments=term.getLineSegments(1, 0, term.getWidth());
+               assertEquals(4, segments.length);
+               assertSegment(0, "x", s1, segments[0]);
+               assertSegment(1, "y", s2, segments[1]);
+               assertSegment(2, "z", s3, segments[2]);
+               assertSegment(3, "\000\000\000\000\000", null, segments[3]);
+               
+               // line 2
+               term.setChars(2, 4,"klm".toCharArray(), s1);            
+               segments=term.getLineSegments(2, 0, term.getWidth());
+               assertEquals(3, segments.length);
+               assertSegment(0, "\000\000\000\000", null, segments[0]);
+               assertSegment(4, "klm", s1, segments[1]);
+               assertSegment(7, "\000", null, segments[2]);
+               
+               // line 3
+               segments=term.getLineSegments(3, 0, term.getWidth());
+               assertEquals(1, segments.length);
+               assertSegment(0, "\000\000\000\000\000\000\000\000", null, segments[0]);
+               
+       }
+       public void testGetLineSegmentsNull() {
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(8, 8);
+               LineSegment[] segments=term.getLineSegments(0, 0, term.getWidth());
+               assertEquals(1, segments.length);
+       }
+       public void testGetLineSegmentsOutOfBounds() {
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(1, 8);
+               term.setChars(0,0,"xx".toCharArray(),null);
+               LineSegment[] segments=term.getLineSegments(0, 5, 2);
+               assertEquals(1, segments.length);
+               
+               
+       }
+       void assertSegment(int col,String text, Style style,LineSegment segment) {
+               assertEquals(col, segment.getColumn());
+               assertEqualsTerm(text, segment.getText());
+               assertEquals(style, segment.getStyle());
+               
+       }
+       public void testGetChar() {
+               String s="12345\n" +
+                "abcde\n" +
+                "ABCDE";
+               ITerminalTextData term=makeITerminalTextData();
+               fill(term, s);
+               assertEquals('1', term.getChar(0,0));
+               assertEquals('2', term.getChar(0,1));
+               assertEquals('3', term.getChar(0,2));
+               assertEquals('4', term.getChar(0,3));
+               assertEquals('5', term.getChar(0,4));
+               assertEquals('a', term.getChar(1,0));
+               assertEquals('b', term.getChar(1,1));
+               assertEquals('c', term.getChar(1,2));
+               assertEquals('d', term.getChar(1,3));
+               assertEquals('e', term.getChar(1,4));
+               assertEquals('A', term.getChar(2,0));
+               assertEquals('B', term.getChar(2,1));
+               assertEquals('C', term.getChar(2,2));
+               assertEquals('D', term.getChar(2,3));
+               assertEquals('E', term.getChar(2,4));
+               try {
+                       term.getChar(0,-1);
+                       fail();
+               } catch (RuntimeException e) {
+               }
+               try {
+                       term.getChar(-1,-1);
+                       fail();
+               } catch (RuntimeException e) {
+               }
+               try {
+                       term.getChar(-1,0);
+                       fail();
+               } catch (RuntimeException e) {
+               }
+               try {
+                       term.getChar(0,5);
+                       fail();
+               } catch (RuntimeException e) {
+               }
+               try {
+                       term.getChar(3,5);
+                       fail();
+               } catch (RuntimeException e) {
+               }
+               try {
+                       term.getChar(3,0);
+                       fail();
+               } catch (RuntimeException e) {
+               }
+       }
+
+       public void testGetStyle() {
+               ITerminalTextData term=makeITerminalTextData();
+               Style style=getDefaultStyle();
+               term.setDimensions(6, 3);
+               for (int line = 0; line < term.getHeight(); line++) {
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               char c=(char)('a'+column+line);
+                               term.setChar(line, column, c, style.setForground(StyleColor.getStyleColor(""+c)));
+                       }
+               }
+               for (int line = 0; line < term.getHeight(); line++) {
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               char c=(char)('a'+column+line);
+                               assertSame(style.setForground(StyleColor.getStyleColor(""+c)), term.getStyle(line, column));
+                       }
+               }
+               
+       }
+
+       protected Style getDefaultStyle() {
+               return Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false, false, false);
+       }
+
+       public void testSetChar() {
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(6, 3);
+               for (int line = 0; line < term.getHeight(); line++) {
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               term.setChar(line, column, (char)('a'+column+line), null);
+                       }
+               }
+               for (int line = 0; line < term.getHeight(); line++) {
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               char c=(char)('a'+column+line);
+                               assertEquals(c, term.getChar(line,column));
+                       }
+               }
+               assertEqualsTerm(
+                                 "abc\n"
+                               + "bcd\n"
+                               + "cde\n"
+                               + "def\n"
+                               + "efg\n"
+                               + "fgh", toMultiLineText(term));
+       }
+       public void testSetChars() {
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(6, 3);
+               for (int line = 0; line < term.getHeight(); line++) {
+                       char[] chars=new char[term.getWidth()];
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               chars[column]=(char)('a'+column+line);
+                       }
+                       term.setChars(line, 0, chars, null);
+               }
+               for (int line = 0; line < term.getHeight(); line++) {
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               char c=(char)('a'+column+line);
+                               assertEquals(c, term.getChar(line,column));
+                       }
+               }
+               assertEqualsTerm(
+                                 "abc\n"
+                               + "bcd\n"
+                               + "cde\n"
+                               + "def\n"
+                               + "efg\n"
+                               + "fgh", toMultiLineText(term));
+       
+               term.setChars(3, 1, new char[]{'1','2'}, null);
+               assertEqualsTerm(
+                                 "abc\n"
+                               + "bcd\n"
+                               + "cde\n"
+                               + "d12\n"
+                               + "efg\n"
+                               + "fgh", toMultiLineText(term));
+               try {
+                       // check if we cannot exceed the range
+                       term.setChars(4, 1, new char[]{'1','2','3','4','5'}, null);
+                       fail();
+               } catch (RuntimeException e) {}
+       
+       }
+       public void testSetCharsLen() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s= "ZYXWVU\n"
+                               + "abcdef\n"
+                               + "ABCDEF";
+               fill(term, s);
+               char[] chars=new char[]{'1','2','3','4','5','6','7','8'};
+               term.setChars(1, 0, chars, 0, 6,null);
+               assertEqualsTerm(
+                                 "ZYXWVU\n"
+                               + "123456\n"
+                               + "ABCDEF", toMultiLineText(term));
+
+               fill(term, s);
+               term.setChars(1, 0, chars, 0, 5, null);
+               assertEqualsTerm("ZYXWVU\n"
+                               + "12345f\n"
+                               + "ABCDEF", toMultiLineText(term));
+
+               fill(term, s);
+               term.setChars(1, 0, chars, 1, 5, null);
+               assertEqualsTerm("ZYXWVU\n"
+                               + "23456f\n"
+                               + "ABCDEF", toMultiLineText(term));
+
+               fill(term, s);
+               term.setChars(1, 1, chars, 1, 4, null);
+               assertEqualsTerm("ZYXWVU\n"
+                               + "a2345f\n"
+                               + "ABCDEF", toMultiLineText(term));
+
+
+               
+               fill(term, s);
+               term.setChars(1, 2, chars, 3, 4, null);
+               assertEqualsTerm("ZYXWVU\n"
+                               + "ab4567\n"
+                               + "ABCDEF", toMultiLineText(term));
+
+               fill(term, s);
+               try {
+                       term.setChars(1, 0, chars, 7, 10, null);
+                       fail();
+               } catch (RuntimeException e) {}
+               fill(term, s);
+               try {
+                       term.setChars(1, -1, chars, 0, 2, null);
+                       fail();
+               } catch (RuntimeException e) {}
+               try {
+                       term.setChars(-1, 1, chars, 0, 2, null);
+                       fail();
+               } catch (RuntimeException e) {}
+               try {
+                       term.setChars(1, 10, chars, 0, 2, null);
+                       fail();
+               } catch (RuntimeException e) {}
+               try {
+                       term.setChars(10, 1, chars, 0, 2, null);
+                       fail();
+               } catch (RuntimeException e) {}
+//             assertEquals(s, toSimpleText(term));
+       }
+       public void testSetCopyInto() {
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(3, 5);
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE";
+               fill(term,0,0,s);
+               ITerminalTextData termCopy=makeITerminalTextData();
+               termCopy.copy(term);
+               assertEqualsTerm(s, toMultiLineText(termCopy));
+               assertEqualsTerm(s, toMultiLineText(term));
+               
+               termCopy.setChar(1, 1, 'X', null);
+               assertEqualsTerm(s, toMultiLineText(term));
+               term.setDimensions(2, 4);
+               assertEquals(5, termCopy.getWidth());
+               assertEquals(3, termCopy.getHeight());
+               
+               assertEqualsTerm("12345\n" +
+                                "aXcde\n" +
+                                "ABCDE", toMultiLineText(termCopy));
+
+               assertEquals(4, term.getWidth());
+               assertEquals(2, term.getHeight());
+       }
+       public void testSetCopyLines() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="012345";
+               fillSimple(term, s);
+               ITerminalTextData termCopy=makeITerminalTextData();
+               String sCopy="abcde";
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,0,0,0);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple(sCopy, toSimple(termCopy));
+
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,0,0,5);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple("01234", toSimple(termCopy));
+       
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,0,0,2);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple("01cde", toSimple(termCopy));
+
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,0,1,2);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple("a01de", toSimple(termCopy));
+
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,1,1,2);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple("a12de", toSimple(termCopy));
+
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,1,1,4);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple("a1234", toSimple(termCopy));
+
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,2,1,4);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple("a2345", toSimple(termCopy));
+
+               try {
+                       fillSimple(termCopy, sCopy);
+                       termCopy.copyRange(term,1,1,5);
+                       fail();
+               } catch (RuntimeException e) {}
+               try {
+                       fillSimple(termCopy, sCopy);
+                       termCopy.copyRange(term,0,0,6);
+                       fail();
+               } catch (RuntimeException e) {}
+               try {
+                       fillSimple(termCopy, sCopy);
+                       termCopy.copyRange(term,7,0,1);
+                       fail();
+               } catch (RuntimeException e) {}
+               try {
+                       fillSimple(termCopy, sCopy);
+                       termCopy.copyRange(term,0,7,1);
+                       fail();
+               } catch (RuntimeException e) {}
+       }
+       public void testCopyLine() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s=
+                       "111\n" +
+                       "222\n" +
+                       "333\n" +
+                       "444\n" +
+                       "555";
+               fill(term, s);
+               ITerminalTextData dest=makeITerminalTextData();
+               String sCopy=
+                       "aaa\n" +
+                       "bbb\n" +
+                       "ccc\n" +
+                       "ddd\n" +
+                       "eee";
+               fill(dest, sCopy);
+               copySelective(dest,term,0,0,new boolean []{true,true,false,false,true});
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEqualsTerm(                       
+                               "111\n" +
+                               "222\n" +
+                               "ccc\n" +
+                               "ddd\n" +
+                               "555", toMultiLineText(dest));
+
+               fill(dest, sCopy);
+               copySelective(dest,term,0,0,new boolean []{true,true,true,true,true});
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEqualsTerm(s, toMultiLineText(dest));
+       
+               fill(dest, sCopy);
+               copySelective(dest,term,0,0,new boolean []{false,false,false,false,false});
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEqualsTerm(sCopy, toMultiLineText(dest));
+       }
+       protected void copySelective(ITerminalTextData dest, ITerminalTextData source, int sourceStartLine, int destStartLine, boolean[] linesToCopy) {
+               for (int i = 0; i < linesToCopy.length; i++) {
+                       if(linesToCopy[i]) {
+                               dest.copyLine(source, i+sourceStartLine, i+destStartLine);
+                       }
+               }
+       }
+
+       public void testCopyLineWithOffset() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s=
+                       "111\n" +
+                       "222\n" +
+                       "333\n" +
+                       "444\n" +
+                       "555";
+               fill(term, s);
+               ITerminalTextData dest=makeITerminalTextData();
+               String sCopy=
+                       "aaa\n" +
+                       "bbb\n" +
+                       "ccc\n" +
+                       "ddd\n" +
+                       "eee";
+               fill(dest, sCopy);
+               copySelective(dest,term,1,0,new boolean []{true,false,false,true});
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEqualsTerm(                       
+                               "222\n" +
+                               "bbb\n" +
+                               "ccc\n" +
+                               "555\n" +
+                               "eee", toMultiLineText(dest));
+
+               fill(dest, sCopy);
+               copySelective(dest,term,2,0,new boolean []{true,true});
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEqualsTerm(                       
+                               "333\n" +
+                               "444\n" +
+                               "ccc\n" +
+                               "ddd\n" +
+                               "eee", toMultiLineText(dest));
+
+               fill(dest, sCopy);
+               copySelective(dest,term,0,0,new boolean []{true,true,true,true,true});
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEqualsTerm(s, toMultiLineText(dest));
+       
+               fill(dest, sCopy);
+               copySelective(dest,term,0,0,new boolean []{false,false,false,false,false});
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEqualsTerm(sCopy, toMultiLineText(dest));
+       }
+       public void testScrollNoop() {
+               scrollTest(0,0,0, "012345","012345");
+               scrollTest(0,1,0, "012345","012345");
+               scrollTest(0,6,0, "012345","012345");
+       }
+       public void testScrollAll() {
+               scrollTest(0,6,1,  "012345"," 01234");
+               scrollTest(0,6,-1, "012345","12345 ");
+               scrollTest(0,6,2,  "012345","  0123");
+               scrollTest(0,6,-2, "012345","2345  ");
+       }
+       public void testScrollNegative() {
+               scrollTest(0,2,-1,"012345","1 2345");
+               scrollTest(0,1,-1,"012345"," 12345");
+               scrollTest(0,6,-1,"012345","12345 ");
+               scrollTest(0,6,-6,"012345","      ");
+               scrollTest(0,6,-7,"012345","      ");
+               scrollTest(0,6,-8,"012345","      ");
+               scrollTest(0,6,-2,"012345","2345  ");
+               scrollTest(1,1,-1,"012345","0 2345");
+               scrollTest(1,1,-1,"012345","0 2345");
+               scrollTest(1,2,-1,"012345","02 345");
+               scrollTest(5,1,-1,"012345","01234 ");
+               scrollTest(5,1,-1,"012345","01234 ");
+       }
+       public void testScrollNegative2() {
+               scrollTest(0,2,-1,"  23  ","  23  ");
+               scrollTest(0,1,-1,"  23  ","  23  ");
+               scrollTest(0,6,-1,"  23  "," 23   ");
+               scrollTest(0,6,-6,"  23  ","      ");
+               scrollTest(0,6,-7,"  23  ","      ");
+               scrollTest(0,6,-8,"  23  ","      ");
+               scrollTest(0,6,-2,"  23  ","23    ");
+               scrollTest(1,1,-1,"  23  ","  23  ");
+               scrollTest(1,2,-1,"  23  "," 2 3  ");
+               scrollTest(5,1,-1,"  23  ","  23  ");
+               scrollTest(5,1,-1,"  23  ","  23  ");
+       }
+       public void testScrollNegative3() {
+               scrollTest(1,5,-7,"012345","0     ");
+       }
+       public void testScrollPositive2() {
+               scrollTest(2,8,20, "0123456789", "01        ");
+       }
+       public void testScrollPositive() {
+               scrollTest(0,2,1, "012345",     " 02345");
+               scrollTest(0,2,2, "012345",     "  2345");
+               scrollTest(2,4,2, "012345",     "01  23");
+               scrollTest(2,4,2, "0123456",    "01  236");
+               scrollTest(0,7,6, "0123456",    "      0");
+               scrollTest(0,7,8, "0123456",    "       ");
+               scrollTest(0,7,9, "0123456",    "       ");
+               scrollTest(2,4,2, "0123456",    "01  236");
+               scrollTest(2,5,3, "0123456789", "01   23789");
+               scrollTest(2,7,3, "0123456789", "01   23459");
+               scrollTest(2,8,3, "0123456789", "01   23456");
+               scrollTest(2,8,5, "0123456789", "01     234");
+               scrollTest(2,8,9, "0123456789", "01        ");
+               scrollTest(0,10,9,"0123456789", "         0");
+               scrollTest(0,6,6, "012345",     "      ");
+       }
+       public void testScrollFail() {
+               try {
+                       scrollTest(5,2,-1,"012345","012345");
+                       fail();
+               } catch (RuntimeException e) {
+               }
+               try {
+                       scrollTest(0,7,1,"012345","      ");
+                       fail();
+               } catch (RuntimeException e) {
+               }
+       }
+       /**
+        * Makes a simple shift test
+        * @param line scroll start
+        * @param n number of lines to be scrolled
+        * @param shift amount of lines to be shifted
+        * @param start the original data
+        * @param result the expected result
+        */
+       void scrollTest(int line,int n, int shift, String start,String result) {
+               ITerminalTextData term=makeITerminalTextData();
+               fillSimple(term,start);
+               term.scroll(line, n, shift);
+               assertEqualsSimple(result, toSimple(term));
+       }
+       
+       public void testWrappedLines() {
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(4, 4);
+               for (int i=0; i<term.getHeight(); ++i)
+                       assertFalse(term.isWrappedLine(i));
+               term.setWrappedLine(0);
+               term.setWrappedLine(3);
+               assertTrue(term.isWrappedLine(0));
+               assertFalse(term.isWrappedLine(1));
+               assertFalse(term.isWrappedLine(2));
+               assertTrue(term.isWrappedLine(3));
+               term.cleanLine(0);
+               assertFalse(term.isWrappedLine(0));
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/AllTests.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/AllTests.java
new file mode 100644 (file)
index 0000000..9cd89b0
--- /dev/null
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Martin Oberhuber (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Internal Terminal Model test cases. 
+ * Runs in internal model package to allow access to default visible items.
+ */
+public class AllTests extends TestCase {
+       public AllTests() {
+               super(null);
+       }
+
+       public AllTests(String name) {
+               super(name);
+       }
+
+       public static Test suite() {
+               TestSuite suite = new TestSuite(AllTests.class.getName());
+               suite.addTestSuite(SnapshotChangesTest.class);
+               suite.addTestSuite(SynchronizedTerminalTextDataTest.class);
+               suite.addTestSuite(TerminalTextDataFastScrollTest.class);
+               suite.addTestSuite(TerminalTextDataFastScrollTestMaxHeigth.class);
+               suite.addTestSuite(TerminalTextDataPerformanceTest.class);
+               suite.addTestSuite(TerminalTextDataSnapshotTest.class);
+               suite.addTestSuite(TerminalTextDataSnapshotWindowTest.class);
+               suite.addTestSuite(TerminalTextDataStoreTest.class);
+               suite.addTestSuite(TerminalTextDataTest.class);
+               suite.addTestSuite(TerminalTextDataWindowTest.class);
+               return suite;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/SnapshotChangesTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/SnapshotChangesTest.java
new file mode 100644 (file)
index 0000000..c8c3d93
--- /dev/null
@@ -0,0 +1,679 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import junit.framework.TestCase;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+
+public class SnapshotChangesTest extends TestCase {
+       /**
+        * @param change
+        * @param expected a string of 0 and 1 (1 means changed)
+        */
+       void assertChangedLines(ISnapshotChanges change, String expected) {
+               StringBuffer buffer=new StringBuffer();
+               for (int line = 0; line < expected.length(); line++) {
+                       if(change.hasLineChanged(line))
+                               buffer.append('1');
+                       else
+                               buffer.append('0');
+               }
+               assertEquals(expected, buffer.toString());
+       }
+
+       public void testSnapshotChanges() {
+               SnapshotChanges changes=new SnapshotChanges(1);
+               assertEquals(0, changes.getInterestWindowStartLine());
+               assertEquals(0, changes.getInterestWindowSize());
+       }
+       public void testSnapshotChangesWithWindow() {
+               SnapshotChanges changes=new SnapshotChanges(2,5);
+               assertEquals(2, changes.getInterestWindowStartLine());
+               assertEquals(5, changes.getInterestWindowSize());
+       }
+
+       public void testIsInInterestWindowIntInt() {
+               SnapshotChanges changes=new SnapshotChanges(2,5);
+               assertFalse(changes.isInInterestWindow(0, 1));
+               assertFalse(changes.isInInterestWindow(0, 2));
+               assertTrue(changes.isInInterestWindow(0, 3));
+               assertTrue(changes.isInInterestWindow(0, 4));
+               assertTrue(changes.isInInterestWindow(0, 5));
+               assertTrue(changes.isInInterestWindow(0, 6));
+               assertTrue(changes.isInInterestWindow(0, 10));
+               assertTrue(changes.isInInterestWindow(2, 5));
+               assertTrue(changes.isInInterestWindow(6, 0));
+               assertTrue(changes.isInInterestWindow(6, 1));
+               assertTrue(changes.isInInterestWindow(6, 10));
+               assertFalse(changes.isInInterestWindow(7, 0));
+               assertFalse(changes.isInInterestWindow(7, 1));
+               assertFalse(changes.isInInterestWindow(8, 10));
+       }
+       public void testIsInInterestWindowIntIntNoWindow() {
+               SnapshotChanges changes=new SnapshotChanges(3);
+               for (int i = 0; i < 5; i++) {
+                       for (int j = 0; j < 5; j++) {
+                               assertTrue(changes.isInInterestWindow(i,j));                            
+                       }                       
+               }
+       }
+
+       public void testIsInInterestWindowInt() {
+               SnapshotChanges changes=new SnapshotChanges(3,1);
+               assertFalse(changes.isInInterestWindow(0));
+               assertFalse(changes.isInInterestWindow(1));
+               assertFalse(changes.isInInterestWindow(2));
+               assertTrue(changes.isInInterestWindow(3));
+               assertFalse(changes.isInInterestWindow(4));
+               assertFalse(changes.isInInterestWindow(5));
+       }
+
+       public void testIsInInterestWindowIntNoWindow() {
+               SnapshotChanges changes=new SnapshotChanges(3);
+               for (int i = 0; i < 10; i++) {
+                       assertTrue(changes.isInInterestWindow(i));
+               }
+       }
+
+       public void testFitLineToWindow() {
+               SnapshotChanges changes=new SnapshotChanges(2,5);
+               assertEquals(2, changes.fitLineToWindow(0));
+               assertEquals(2, changes.fitLineToWindow(1));
+               assertEquals(2, changes.fitLineToWindow(2));
+               assertEquals(3, changes.fitLineToWindow(3));
+               
+               assertTrue(changes.isInInterestWindow(4));
+               assertEquals(4, changes.fitLineToWindow(4));
+
+               assertTrue(changes.isInInterestWindow(5));
+               assertEquals(5, changes.fitLineToWindow(5));
+
+               assertTrue(changes.isInInterestWindow(6));
+               assertEquals(6, changes.fitLineToWindow(6));
+               
+               assertFalse(changes.isInInterestWindow(7));
+               // value undefined!
+               assertEquals(7, changes.fitLineToWindow(7));
+
+               assertFalse(changes.isInInterestWindow(8));
+               // value undefined!
+               assertEquals(8, changes.fitLineToWindow(8));
+       }
+
+       public void testFitLineToWindowNoWindow() {
+               SnapshotChanges changes=new SnapshotChanges(5);
+               assertEquals(0, changes.fitLineToWindow(0));
+               assertEquals(1, changes.fitLineToWindow(1));
+               assertEquals(2, changes.fitLineToWindow(2));
+               assertEquals(3, changes.fitLineToWindow(3));
+               assertEquals(4, changes.fitLineToWindow(4));
+               assertEquals(5, changes.fitLineToWindow(5));
+               assertEquals(6, changes.fitLineToWindow(6));
+               assertEquals(7, changes.fitLineToWindow(7));
+       }
+       public void testFitSizeToWindow() {
+               SnapshotChanges changes=new SnapshotChanges(2,3);
+               assertFalse(changes.isInInterestWindow(0, 1));
+               assertFalse(changes.isInInterestWindow(0, 2));
+               assertTrue(changes.isInInterestWindow(0, 3));
+               assertEquals(1, changes.fitSizeToWindow(0,3));
+               assertEquals(2, changes.fitSizeToWindow(0,4));
+               assertEquals(3, changes.fitSizeToWindow(0,5));
+               assertEquals(3, changes.fitSizeToWindow(0,6));
+               assertEquals(3, changes.fitSizeToWindow(0,7));
+               assertEquals(3, changes.fitSizeToWindow(0,8));
+               assertEquals(3, changes.fitSizeToWindow(0,9));
+               assertEquals(3, changes.fitSizeToWindow(1,9));
+               assertEquals(3, changes.fitSizeToWindow(2,9));
+               assertEquals(3, changes.fitSizeToWindow(2,3));
+               assertEquals(2, changes.fitSizeToWindow(2,2));
+               assertEquals(1, changes.fitSizeToWindow(2,1));
+               assertEquals(2, changes.fitSizeToWindow(3,9));
+               assertEquals(2, changes.fitSizeToWindow(3,2));
+               assertEquals(1, changes.fitSizeToWindow(3,1));
+               assertEquals(2, changes.fitSizeToWindow(3,2));
+               assertEquals(2, changes.fitSizeToWindow(3,3));
+               assertEquals(1, changes.fitSizeToWindow(4,1));
+               assertEquals(1, changes.fitSizeToWindow(4,2));
+               assertFalse(changes.isInInterestWindow(5, 1));
+
+       }
+       public void testFitSizeToWindowNoWindow() {
+               SnapshotChanges changes=new SnapshotChanges(3);
+               assertEquals(1, changes.fitSizeToWindow(0,1));
+               assertEquals(2, changes.fitSizeToWindow(0,2));
+               assertEquals(3, changes.fitSizeToWindow(0,3));
+               assertEquals(4, changes.fitSizeToWindow(0,4));
+               assertEquals(5, changes.fitSizeToWindow(0,5));
+
+               assertEquals(5, changes.fitSizeToWindow(1,5));
+               assertEquals(3, changes.fitSizeToWindow(2,3));
+               assertEquals(2, changes.fitSizeToWindow(1,2));
+               assertEquals(10, changes.fitSizeToWindow(5,10));
+       }
+
+       public void testMarkLineChanged() {
+               SnapshotChanges changes=new SnapshotChanges(2,3);
+               assertFalse(changes.hasChanged());
+               changes.markLineChanged(0);
+               assertFalse(changes.hasChanged());
+               changes.markLineChanged(1);
+               assertFalse(changes.hasChanged());
+               changes.markLineChanged(2);
+               assertTrue(changes.hasChanged());
+               
+               changes=new SnapshotChanges(2,3);
+               assertFalse(changes.hasChanged());
+               changes.markLineChanged(3);
+               assertTrue(changes.hasChanged());
+
+               assertLineChange(false,2,3,0);
+               assertLineChange(false,2,3,1);
+               assertLineChange(true,2,3,2);
+               assertLineChange(true,2,3,3);
+               assertLineChange(true,2,3,4);
+               assertLineChange(false,2,3,5);
+               assertLineChange(false,2,3,6);
+
+               assertLineChange(true,2,4,5);
+       }
+       void assertLineChange(boolean expected, int windowStart, int windowSize, int changedLine) {
+               SnapshotChanges changes=new SnapshotChanges(windowStart,windowSize);
+               assertFalse(changes.hasChanged());
+               changes.markLineChanged(changedLine);
+               if(expected) {
+                       assertEquals(changedLine, changes.getFirstChangedLine());
+                       assertEquals(changedLine, changes.getLastChangedLine());
+               } else {
+                       assertEquals(Integer.MAX_VALUE, changes.getFirstChangedLine());
+                       assertEquals(-1, changes.getLastChangedLine());
+                       
+               }
+               assertEquals(expected,changes.hasChanged());
+               for (int i = 0; i < windowStart+windowSize+5; i++) {
+                       boolean e= i==changedLine && i>=windowStart && i<windowStart+windowSize;
+                       assertEquals(e, changes.hasLineChanged(i));
+               }
+               
+       }
+       public void testMarkLinesChanged() {
+               SnapshotChanges changes=new SnapshotChanges(2,3);
+               assertFalse(changes.hasChanged());
+               assertEquals(Integer.MAX_VALUE, changes.getFirstChangedLine());
+               assertEquals(-1, changes.getLastChangedLine());
+               changes.markLinesChanged(0, 1);
+               assertChangedLines(changes, "00000000000");
+               assertFalse(changes.hasChanged());
+               assertEquals(Integer.MAX_VALUE, changes.getFirstChangedLine());
+               assertEquals(-1, changes.getLastChangedLine());
+               changes.markLinesChanged(0, 2);
+               assertChangedLines(changes, "00000000000");
+               assertFalse(changes.hasChanged());
+               assertEquals(Integer.MAX_VALUE, changes.getFirstChangedLine());
+               assertEquals(-1, changes.getLastChangedLine());
+               changes.markLinesChanged(0, 3);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(2, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "00100000000");
+               
+               changes=new SnapshotChanges(2,3);
+               changes.markLinesChanged(1, 3);
+               assertTrue(changes.hasChanged());
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(3, changes.getLastChangedLine());
+               assertChangedLines(changes, "00110000000");
+
+               changes=new SnapshotChanges(2,3);
+               changes.markLinesChanged(1, 4);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "00111000000");
+
+               changes=new SnapshotChanges(2,3);
+               changes.markLinesChanged(1, 4);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "00111000000");
+
+               changes=new SnapshotChanges(2,3);
+               changes.markLinesChanged(2, 4);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "00111000000");
+
+       
+               changes=new SnapshotChanges(2,3);
+               changes.markLinesChanged(3, 4);
+               assertEquals(3, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "00011000000");
+
+               changes=new SnapshotChanges(2,3);
+               changes.markLinesChanged(3, 1);
+               assertEquals(3, changes.getFirstChangedLine());
+               assertEquals(3, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "00010000000");
+
+               changes=new SnapshotChanges(2,3);
+               changes.markLinesChanged(4, 1);
+               assertEquals(4, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "00001000000");
+               
+               changes=new SnapshotChanges(2,3);
+               changes.markLinesChanged(5, 1);
+               assertEquals(Integer.MAX_VALUE, changes.getFirstChangedLine());
+               assertEquals(-1, changes.getLastChangedLine());
+               assertFalse(changes.hasChanged());
+               assertChangedLines(changes, "00000000000");
+       }
+       public void testMarkLinesChangedNoWindow() {
+               SnapshotChanges changes=new SnapshotChanges(10);
+               assertFalse(changes.hasChanged());
+               assertEquals(Integer.MAX_VALUE, changes.getFirstChangedLine());
+               assertEquals(-1, changes.getLastChangedLine());
+               
+               changes.markLinesChanged(0, 1);
+               assertTrue(changes.hasChanged());
+               assertEquals(0, changes.getFirstChangedLine());
+               assertEquals(0, changes.getLastChangedLine());
+               assertChangedLines(changes, "1000000000");
+               
+               changes=new SnapshotChanges(10);
+               changes.markLinesChanged(0, 5);
+               assertTrue(changes.hasChanged());
+               assertEquals(0, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertChangedLines(changes, "1111100000");
+
+               changes=new SnapshotChanges(3);
+               changes.markLinesChanged(1, 6);
+               assertTrue(changes.hasChanged());
+               assertEquals(1, changes.getFirstChangedLine());
+               assertEquals(6, changes.getLastChangedLine());
+               assertChangedLines(changes, "011");
+
+               
+               changes=new SnapshotChanges(10);
+               changes.markLinesChanged(5, 6);
+               assertTrue(changes.hasChanged());
+               assertEquals(5, changes.getFirstChangedLine());
+               assertEquals(10, changes.getLastChangedLine());
+               assertChangedLines(changes, "0000011111");
+
+       }
+
+       public void testHasChanged() {
+               SnapshotChanges changes=new SnapshotChanges(0);
+               assertFalse(changes.hasChanged());
+               changes=new SnapshotChanges(1);
+               assertFalse(changes.hasChanged());
+               changes=new SnapshotChanges(1,9);
+               assertFalse(changes.hasChanged());
+       }
+
+       public void testSetAllChanged() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(2,3);
+               changes.setAllChanged(10);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "00111000000");
+
+               changes=new SnapshotChanges(2,3);
+               changes.setAllChanged(3);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(2, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "00111000000");
+
+               changes=new SnapshotChanges(2,3);
+               changes.setAllChanged(4);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(3, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "00111000000");
+
+               changes=new SnapshotChanges(2,3);
+               changes.setAllChanged(5);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "00111000000");
+
+               changes=new SnapshotChanges(2,3);
+               changes.setAllChanged(6);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "00111000000");
+       }
+       public void testSetAllChangedNoWindow() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(5);
+               changes.setAllChanged(10);
+               assertEquals(0, changes.getFirstChangedLine());
+               assertEquals(9, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "1111111111");
+
+               changes=new SnapshotChanges(5);
+               changes.setAllChanged(3);
+               assertEquals(0, changes.getFirstChangedLine());
+               assertEquals(2, changes.getLastChangedLine());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "1111111111");
+
+       }
+
+       public void testConvertScrollingIntoChanges() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(2,3);
+               changes.scroll(0, 4, -1);
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "000100");
+               changes.convertScrollingIntoChanges();
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(3, changes.getLastChangedLine());
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(0, changes.getScrollWindowSize());
+               assertEquals(0, changes.getScrollWindowShift());
+               assertChangedLines(changes, "001100");
+       }
+
+       public void testConvertScrollingIntoChangesNoWindow() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(7);
+               changes.scroll(0, 4, -1);
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "000100");
+               changes.convertScrollingIntoChanges();
+               assertEquals(0, changes.getFirstChangedLine());
+               assertEquals(3, changes.getLastChangedLine());
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(0, changes.getScrollWindowSize());
+               assertEquals(0, changes.getScrollWindowShift());
+               assertChangedLines(changes, "111100");
+       }
+       public void testScrollNoWindow() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(7);
+               changes.scroll(0, 3, -2);
+               assertEquals(1, changes.getFirstChangedLine());
+               assertEquals(2, changes.getLastChangedLine());
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(3, changes.getScrollWindowSize());
+               assertEquals(-2, changes.getScrollWindowShift());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "0110000");
+
+               changes=new SnapshotChanges(7);
+               changes.scroll(0, 3, -1);
+               changes.scroll(0, 3, -1);
+               assertEquals(1, changes.getFirstChangedLine());
+               assertEquals(2, changes.getLastChangedLine());
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(3, changes.getScrollWindowSize());
+               assertEquals(-2, changes.getScrollWindowShift());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "0110000");
+               
+               changes=new SnapshotChanges(7);
+               changes.scroll(0, 7, -1);
+               changes.scroll(0, 7, -1);
+               assertEquals(5, changes.getFirstChangedLine());
+               assertEquals(6, changes.getLastChangedLine());
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(7, changes.getScrollWindowSize());
+               assertEquals(-2, changes.getScrollWindowShift());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "0000011");
+               
+               // positive scrolls cannot be optimized at the moment
+               changes=new SnapshotChanges(7);
+               changes.scroll(0, 7, 1);
+               changes.scroll(0, 7, 1);
+               assertEquals(0, changes.getFirstChangedLine());
+               assertEquals(6, changes.getLastChangedLine());
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(0, changes.getScrollWindowSize());
+               assertEquals(0, changes.getScrollWindowShift());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "1111111");
+
+       }
+       public void testScroll() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(2,3);
+               changes.scroll(0, 7, -1);
+               assertEquals(4, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertEquals(2, changes.getScrollWindowStartLine());
+               assertEquals(3, changes.getScrollWindowSize());
+               assertEquals(-1, changes.getScrollWindowShift());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "0000100000");
+
+               changes=new SnapshotChanges(2,3);
+               changes.scroll(0, 7, -2);
+               assertEquals(3, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertEquals(2, changes.getScrollWindowStartLine());
+               assertEquals(3, changes.getScrollWindowSize());
+               assertEquals(-2, changes.getScrollWindowShift());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "0001100000");
+       }
+       public void testScrollNergative() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(2,3);
+               changes.scroll(0, 7, -1);
+               changes.scroll(0, 7, -1);
+               assertEquals(3, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertEquals(2, changes.getScrollWindowStartLine());
+               assertEquals(3, changes.getScrollWindowSize());
+               assertEquals(-2, changes.getScrollWindowShift());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "0001100000");
+       
+       }
+       public void testScrollPositive() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(2,3);
+               changes.scroll(0, 7, 1);
+               changes.scroll(0, 7, 1);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(0, changes.getScrollWindowSize());
+               assertEquals(0, changes.getScrollWindowShift());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "0011100000");
+       
+               changes=new SnapshotChanges(2,3);
+               changes.scroll(0, 3, 1);
+               changes.scroll(0, 3, 1);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(2, changes.getLastChangedLine());
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(0, changes.getScrollWindowSize());
+               assertEquals(0, changes.getScrollWindowShift());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "0010000000");
+               
+               changes=new SnapshotChanges(2,3);
+               changes.scroll(0, 4, 1);
+               changes.scroll(0, 4, 1);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(3, changes.getLastChangedLine());
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(0, changes.getScrollWindowSize());
+               assertEquals(0, changes.getScrollWindowShift());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "0011000000");
+               
+               changes=new SnapshotChanges(2,3);
+               changes.scroll(0, 5, 1);
+               changes.scroll(0, 5, 1);
+               assertEquals(2, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(0, changes.getScrollWindowSize());
+               assertEquals(0, changes.getScrollWindowShift());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "0011100000");
+               
+               changes=new SnapshotChanges(2,3);
+               changes.scroll(3, 5, 1);
+               changes.scroll(3, 5, 1);
+               assertEquals(3, changes.getFirstChangedLine());
+               assertEquals(4, changes.getLastChangedLine());
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(0, changes.getScrollWindowSize());
+               assertEquals(0, changes.getScrollWindowShift());
+               assertTrue(changes.hasChanged());
+               assertChangedLines(changes, "0001100000");
+       }
+
+       public void testCopyChangedLines() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(2,3);
+               changes.markLineChanged(3);
+               ITerminalTextData source=new TerminalTextDataStore();
+               TerminalTextTestHelper.fillSimple(source, "01234567890");
+               ITerminalTextData dest=new TerminalTextDataStore();
+               TerminalTextTestHelper.fillSimple(dest, "abcdefghijk");
+               
+               changes.copyChangedLines(dest, source);
+               assertEquals("abc3efghijk",TerminalTextTestHelper.toSimple(dest));
+               
+               changes=new SnapshotChanges(2,3);
+               changes.setAllChanged(7);
+               source=new TerminalTextDataStore();
+               TerminalTextTestHelper.fillSimple(source, "01234567890");
+               dest=new TerminalTextDataStore();
+               TerminalTextTestHelper.fillSimple(dest, "abcdefghijk");
+               
+               changes.copyChangedLines(dest, source);
+               assertEquals("ab234fghijk",TerminalTextTestHelper.toSimple(dest));
+
+               changes=new SnapshotChanges(2,3);
+               changes.scroll(0,7,-1);
+               source=new TerminalTextDataStore();
+               TerminalTextTestHelper.fillSimple(source, "01234567890");
+               dest=new TerminalTextDataStore();
+               TerminalTextTestHelper.fillSimple(dest, "abcdefghijk");
+               // only one line has changed! The other lines are scrolled!
+               assertChangedLines(changes,"00001000");
+               changes.copyChangedLines(dest, source);
+               assertEquals("abcd4fghijk",TerminalTextTestHelper.toSimple(dest));
+       }
+       public void testCopyChangedLinesWithSmallSource() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(2,3);
+               changes.markLineChanged(3);
+               ITerminalTextData source=new TerminalTextDataStore();
+               source.setDimensions(2, 2);
+               TerminalTextDataWindow dest=new TerminalTextDataWindow();
+               dest.setWindow(2, 2);
+               changes.copyChangedLines(dest, source);
+       }
+       public void testCopyChangedLinesWithSmallSource1() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(2,3);
+               changes.markLineChanged(3);
+               ITerminalTextData source=new TerminalTextDataStore();
+               TerminalTextTestHelper.fillSimple(source, "01");
+               ITerminalTextData dest=new TerminalTextDataStore();
+               changes.copyChangedLines(dest, source);
+       }
+
+       public void testSetInterestWindowSize() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(2,3);
+               // move the window
+               changes.setInterestWindow(3, 3);
+               // only one line has changed! The other lines are scrolled!
+               assertEquals(3, changes.getScrollWindowStartLine());
+               assertEquals(3, changes.getScrollWindowSize());
+               assertEquals(-1, changes.getScrollWindowShift());
+               
+               assertChangedLines(changes,"0000010");
+               changes.convertScrollingIntoChanges();
+               assertChangedLines(changes,"0001110");
+
+               changes=new SnapshotChanges(2,3);
+               // move the window
+               changes.setInterestWindow(3, 4);
+               // only one line has changed! The other lines are scrolled!
+               assertEquals(3, changes.getScrollWindowStartLine());
+               assertEquals(3, changes.getScrollWindowSize());
+               assertEquals(-1, changes.getScrollWindowShift());
+               
+               assertChangedLines(changes,"0000011");
+               changes.convertScrollingIntoChanges();
+               assertChangedLines(changes,"0001111");
+
+       
+               changes=new SnapshotChanges(2,3);
+               // move the window
+               changes.setInterestWindow(6, 3);
+               // cannot scroll
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(0, changes.getScrollWindowSize());
+               assertEquals(0, changes.getScrollWindowShift());
+               assertChangedLines(changes,"000000111000");
+
+               changes=new SnapshotChanges(2,3);
+               // expand the window
+               changes.setInterestWindow(2, 5);
+               // cannot scroll
+               assertEquals(0, changes.getScrollWindowStartLine());
+               assertEquals(0, changes.getScrollWindowSize());
+               assertEquals(0, changes.getScrollWindowShift());
+               
+               assertChangedLines(changes,"0000011000");
+       }
+       public void testSetInterestWindowSize2() {
+               SnapshotChanges changes;
+               changes=new SnapshotChanges(2,3);
+               // move the window
+               changes.setInterestWindow(1, 3);
+               assertChangedLines(changes,"0111000");
+
+               changes=new SnapshotChanges(2,3);
+               // move the window
+               changes.setInterestWindow(1, 4);
+               assertChangedLines(changes,"01111000");
+
+       
+               changes=new SnapshotChanges(2,3);
+               // expand the window
+               changes.setInterestWindow(6, 3);
+               assertChangedLines(changes,"000000111000");
+
+               changes=new SnapshotChanges(2,3);
+               // expand the window
+               changes.setInterestWindow(1, 2);
+               assertChangedLines(changes,"0110000");
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/SynchronizedTerminalTextDataTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/SynchronizedTerminalTextDataTest.java
new file mode 100644 (file)
index 0000000..41d3eac
--- /dev/null
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+
+public class SynchronizedTerminalTextDataTest extends AbstractITerminalTextDataTest {
+       protected ITerminalTextData makeITerminalTextData() {
+               return new SynchronizedTerminalTextData(new TerminalTextData());
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataFastScrollTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataFastScrollTest.java
new file mode 100644 (file)
index 0000000..9cd58ad
--- /dev/null
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+
+public class TerminalTextDataFastScrollTest extends AbstractITerminalTextDataTest {
+       protected ITerminalTextData makeITerminalTextData() {
+               return new TerminalTextDataFastScroll(3);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataFastScrollTestMaxHeigth.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataFastScrollTestMaxHeigth.java
new file mode 100644 (file)
index 0000000..1471499
--- /dev/null
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+
+public class TerminalTextDataFastScrollTestMaxHeigth extends AbstractITerminalTextDataTest {
+       protected ITerminalTextData makeITerminalTextData() {
+               return new TerminalTextDataFastScroll(1);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataPerformanceTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataPerformanceTest.java
new file mode 100644 (file)
index 0000000..02e4589
--- /dev/null
@@ -0,0 +1,224 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import junit.framework.TestCase;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+import org.eclipse.tm.terminal.model.Style;
+import org.eclipse.tm.terminal.model.StyleColor;
+
+public class TerminalTextDataPerformanceTest extends TestCase {
+       long TIME=100;
+       private void initPerformance(ITerminalTextData term) {
+               term.setDimensions(300,200);
+       }
+       public void testPerformance0() {
+               ITerminalTextData term=new TerminalTextData();
+               method0(term,"0 ");
+       }
+       public void testPerformance0a() {
+               ITerminalTextData term=new TerminalTextData();
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               method0(term,"0a");
+               snapshot.updateSnapshot(true);
+       }
+       public void testPerformance0b() {
+               ITerminalTextData term=new TerminalTextData();
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               N=0;
+               snapshot.addListener(new ITerminalTextDataSnapshot.SnapshotOutOfDateListener(){
+                       public void snapshotOutOfDate(ITerminalTextDataSnapshot snapshot) {
+                               N++;
+                       }});
+               method0(term,"0b");
+               snapshot.updateSnapshot(true);
+       }
+       private void method0(ITerminalTextData term, String label) {
+               Style style=Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false, false, false);
+               initPerformance(term);
+               String s="This is a test string";
+               long n=0;
+               long t0=System.currentTimeMillis();
+               for (int i = 0; i < 10000000; i++) {
+                       char c=s.charAt(i%s.length());
+                       for (int line = 0; line < term.getHeight(); line++) {
+                               for (int column = 0; column < term.getWidth(); column++) {
+                                       term.setChar(line, column, c, style);
+                                       n++;
+                               }
+                       }
+                       if(System.currentTimeMillis()-t0>TIME) {
+                               System.out.println(label+" "+(n*1000)/(System.currentTimeMillis()-t0)+" setChar()/sec "+ N);
+                               break;
+                       }
+               }
+       }
+       public void testPerformance1() {
+               ITerminalTextData term=new TerminalTextData();
+               method1(term, "1 ");
+       }
+       public void testPerformance1a() {
+               ITerminalTextData term=new TerminalTextData();
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               method1(term, "1a");
+               snapshot.updateSnapshot(true);
+       }
+       public void testPerformance1b() {
+               ITerminalTextData term=new TerminalTextData();
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               N=0;
+               snapshot.addListener(new ITerminalTextDataSnapshot.SnapshotOutOfDateListener(){
+                       public void snapshotOutOfDate(ITerminalTextDataSnapshot snapshot) {
+                               N++;
+                       }});
+               method1(term, "1b");
+               snapshot.updateSnapshot(true);
+       }
+       private void method1(ITerminalTextData term, String label) {
+               Style style=Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false, false, false);
+               initPerformance(term);
+               String s="This is a test string";
+               long n=0;
+               long t0=System.currentTimeMillis();
+               char[] chars=new char[term.getWidth()];
+               for (int i = 0; i < 10000000; i++) {
+                       for (int j = 0; j < chars.length; j++) {
+                               chars[j]=s.charAt((i+j)%s.length());
+                       }
+                       for (int line = 0; line < term.getHeight(); line++) {
+                               term.setChars(line, 0, chars, style);
+                               n+=chars.length;
+                       }
+                       if(System.currentTimeMillis()-t0>TIME) {
+                               System.out.println(label+" "+(n*1000)/(System.currentTimeMillis()-t0)+" setChars()/sec "+ N);
+                               break;
+                       }
+               }
+       }
+       public void testPerformance2() {
+               TerminalTextData term=new TerminalTextData();
+               Style style=Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false, false, false);
+               initPerformance(term);
+               TerminalTextData copy=new TerminalTextData();
+               copy.copy(term);
+               
+               String s="This is a test string";
+               long n=0;
+               long t0=System.currentTimeMillis();
+               char[] chars=new char[term.getWidth()];
+               for (int i = 0; i < 10000000; i++) {
+                       for (int j = 0; j < chars.length; j++) {
+                               chars[j]=s.charAt((i+j)%s.length());
+                       }
+                       for (int line = 0; line < term.getHeight(); line++) {
+                               term.setChars(line, 0, chars, 0,1,style);
+                               copy.copy(term);
+                               n+=1;
+                               if(System.currentTimeMillis()-t0>TIME) {
+                                       System.out.println((n*1000)/(System.currentTimeMillis()-t0)+" copy()/sec");
+                                       return;
+                               }
+                       }
+               }
+       }
+       public void testPerformance2a() {
+               TerminalTextData term=new TerminalTextData();
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               Style style=Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false, false, false);
+               initPerformance(term);
+               TerminalTextData copy=new TerminalTextData();
+               copy.copy(term);
+               
+               String s="This is a test string";
+               long n=0;
+               long t0=System.currentTimeMillis();
+               char[] chars=new char[term.getWidth()];
+               for (int i = 0; i < 10000000; i++) {
+                       for (int j = 0; j < chars.length; j++) {
+                               chars[j]=s.charAt((i+j)%s.length());
+                       }
+                       for (int line = 0; line < term.getHeight(); line++) {
+                               term.setChars(line, 0, chars, 0,1,style);
+                               copy.copy(term);
+                               n+=1;
+                               if(System.currentTimeMillis()-t0>TIME) {
+                                       System.out.println((n*1000)/(System.currentTimeMillis()-t0)+" copy()/sec");
+                                       return;
+                               }
+                       }
+               }
+               snapshot.updateSnapshot(true);
+       }
+       int N=0;
+       public void testPerformance2b() {
+               TerminalTextData term=new TerminalTextData();
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               N=0;
+               snapshot.addListener(new ITerminalTextDataSnapshot.SnapshotOutOfDateListener(){
+                       public void snapshotOutOfDate(ITerminalTextDataSnapshot snapshot) {
+                               N++;
+                       }});
+               Style style=Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false, false, false);
+               initPerformance(term);
+               TerminalTextData copy=new TerminalTextData();
+               copy.copy(term);
+               
+               String s="This is a test string";
+               long n=0;
+               long t0=System.currentTimeMillis();
+               char[] chars=new char[term.getWidth()];
+               for (int i = 0; i < 10000000; i++) {
+                       for (int j = 0; j < chars.length; j++) {
+                               chars[j]=s.charAt((i+j)%s.length());
+                       }
+                       for (int line = 0; line < term.getHeight(); line++) {
+                               term.setChars(line, 0, chars, 0,1,style);
+                               copy.copy(term);
+                               n+=1;
+                               if(System.currentTimeMillis()-t0>TIME) {
+                                       System.out.println((n*1000)/(System.currentTimeMillis()-t0)+" copy()/sec "+n);
+                                       return;
+                               }
+                       }
+               }
+               snapshot.updateSnapshot(true);
+       }
+       public void testPerformance3() {
+               TerminalTextData term=new TerminalTextData();
+               Style style=Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false, false, false);
+               initPerformance(term);
+               TerminalTextData copy=new TerminalTextData();
+               copy.copy(term);
+               String s="This is a test string";
+               long n=0;
+               long t0=System.currentTimeMillis();
+               char[] chars=new char[term.getWidth()];
+               for (int i = 0; i < 10000000; i++) {
+                       boolean[] linesToCopy=new boolean[term.getHeight()];
+                       for (int j = 0; j < chars.length; j++) {
+                               chars[j]=s.charAt((i+j)%s.length());
+                       }
+                       for (int line = 0; line < term.getHeight(); line++) {
+                               term.setChars(line, 0, chars, 0,1,style);
+                               linesToCopy[line]=true;
+                               copy.copyLine(term,0,0);
+                               linesToCopy[line]=false;
+                               n+=1;
+                               if(System.currentTimeMillis()-t0>TIME) {
+                                       System.out.println((n*1000)/(System.currentTimeMillis()-t0)+" copy()/sec");
+                                       return;
+                               }
+                       }
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataSnapshotTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataSnapshotTest.java
new file mode 100644 (file)
index 0000000..7714e97
--- /dev/null
@@ -0,0 +1,1344 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import junit.framework.TestCase;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+import org.eclipse.tm.terminal.model.Style;
+import org.eclipse.tm.terminal.model.StyleColor;
+
+public class TerminalTextDataSnapshotTest extends TestCase {
+       String toMultiLineText(ITerminalTextDataReadOnly term) {
+               return TerminalTextTestHelper.toMultiLineText(term);
+       }
+
+       protected ITerminalTextData makeITerminalTextData() {
+               return new TerminalTextData();
+       }
+
+
+       public void testTerminalTextDataSnapshot() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE\n" +
+                                "vwxzy\n" +
+                                "VWXYZ";
+               TerminalTextTestHelper.fill(term,s);
+               
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+
+               assertEquals(toMultiLineText(term), toMultiLineText(snapshot));
+               
+               // new snapshots are fully changed
+               assertEquals(0,snapshot.getFirstChangedLine());
+               assertEquals(term.getHeight()-1,snapshot.getLastChangedLine());
+               for (int line = 0; line <= snapshot.getLastChangedLine(); line++) {
+                       assertTrue(snapshot.hasLineChanged(line));
+               }
+               // nothing has scrolled
+               assertEquals(0, snapshot.getScrollWindowSize());
+       }
+
+       public void testDetach() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE\n" +
+                                "vwxzy\n" +
+                                "VWXYZ";
+               TerminalTextTestHelper.fill(term,s);
+               
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+
+               assertEquals(toMultiLineText(term),toMultiLineText(snapshot));
+               snapshot.detach();
+               // after detach changes to the term has no effect
+               term.setChar(0, 0, '?', null);
+               assertEquals(s, toMultiLineText(snapshot));
+               term.setDimensions(2, 2);
+               assertEquals(s, toMultiLineText(snapshot));
+       }
+       public void testIsOutOfDate() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE\n" +
+                                "vwxzy\n" +
+                                "VWXYZ";
+               TerminalTextTestHelper.fill(term,s);
+               
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+
+               assertFalse(snapshot.isOutOfDate());
+               
+               // make a change and expect it to be changed
+               term.setChar(0, 0, '?', null);
+               assertTrue(snapshot.isOutOfDate());
+               
+               snapshot.updateSnapshot(false);
+               assertFalse(snapshot.isOutOfDate());
+               
+               // make a change and expect it to be changed
+               term.setChars(1, 1, new char[]{'?','!','.'},null);
+               assertTrue(snapshot.isOutOfDate());
+               
+               snapshot.updateSnapshot(false);
+               assertFalse(snapshot.isOutOfDate());
+               
+               // scroll
+               term.scroll(1, 2, -1);
+               assertTrue(snapshot.isOutOfDate());
+
+               snapshot.updateSnapshot(false);
+               assertFalse(snapshot.isOutOfDate());
+               
+               // scroll
+               term.scroll(1, 2, 1);
+               assertTrue(snapshot.isOutOfDate());
+
+               snapshot.updateSnapshot(false);
+               assertFalse(snapshot.isOutOfDate());
+
+               // scroll
+               term.scroll(1, 2, -1);
+               assertTrue(snapshot.isOutOfDate());
+
+               snapshot.updateSnapshot(true);
+               assertFalse(snapshot.isOutOfDate());
+               
+               // scroll
+               term.scroll(1, 2, 1);
+               assertTrue(snapshot.isOutOfDate());
+
+               snapshot.updateSnapshot(true);
+               assertFalse(snapshot.isOutOfDate());
+               
+               // setDimensions
+               term.setDimensions(2, 2);
+               assertTrue(snapshot.isOutOfDate());
+
+               snapshot.updateSnapshot(false);
+               assertFalse(snapshot.isOutOfDate());
+               
+               // setDimensions
+               term.setDimensions(20, 20);
+               assertTrue(snapshot.isOutOfDate());
+
+               snapshot.updateSnapshot(false);
+               assertFalse(snapshot.isOutOfDate());
+               
+       }
+       ITerminalTextDataSnapshot snapshot(String text, ITerminalTextData term) {
+               TerminalTextTestHelper.fill(term,text);
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+
+               return snapshot;
+               
+       }
+       public void testUpdateSnapshot() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE\n" +
+                                "vwxzy\n" +
+                                "VWXYZ";
+               TerminalTextTestHelper.fill(term,s);
+               String termString=toMultiLineText(term);
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+
+               assertEquals(termString,toMultiLineText(snapshot));
+               
+               // make changes and assert that the snapshot has not changed
+               // then update the snapshot and expect it to be the
+               // same as the changed terminal
+               
+               // make a change 
+               term.setChar(0, 0, '?', null);
+               assertEquals(termString,toMultiLineText(snapshot));
+               
+               snapshot.updateSnapshot(false);
+               termString=toMultiLineText(term);
+               assertEquals(termString,toMultiLineText(snapshot));
+               
+               // make a change 
+               term.setChars(1, 1, new char[]{'?','!','.'},null);
+               assertEquals(termString,toMultiLineText(snapshot));
+               
+               snapshot.updateSnapshot(false);
+               termString=toMultiLineText(term);
+               assertEquals(termString,toMultiLineText(snapshot));
+               
+               // scroll
+               term.scroll(1, 2, -1);
+               assertEquals(termString,toMultiLineText(snapshot));
+
+               snapshot.updateSnapshot(false);
+               termString=toMultiLineText(term);
+               assertEquals(termString,toMultiLineText(snapshot));
+               
+               // scroll
+               term.scroll(1, 2, 1);
+               assertEquals(termString,toMultiLineText(snapshot));
+
+               snapshot.updateSnapshot(false);
+               termString=toMultiLineText(term);
+               assertEquals(termString,toMultiLineText(snapshot));
+               
+               // scroll
+               term.scroll(1, 2, -1);
+               assertEquals(termString,toMultiLineText(snapshot));
+
+               snapshot.updateSnapshot(true);
+               termString=toMultiLineText(term);
+               assertEquals(termString,toMultiLineText(snapshot));
+               
+               // scroll
+               term.scroll(1, 2, 1);
+               assertEquals(termString,toMultiLineText(snapshot));
+
+               snapshot.updateSnapshot(true);
+               termString=toMultiLineText(term);
+               assertEquals(termString,toMultiLineText(snapshot));
+               
+               // set dimensions
+               term.setDimensions(2, 2);
+               assertEquals(termString,toMultiLineText(snapshot));
+
+               snapshot.updateSnapshot(false);
+               termString=toMultiLineText(term);
+               assertEquals(termString,toMultiLineText(snapshot));
+
+               // set dimensions
+               term.setDimensions(20, 20);
+               assertEquals(termString,toMultiLineText(snapshot));
+
+               snapshot.updateSnapshot(false);
+               termString=toMultiLineText(term);
+               assertEquals(termString,toMultiLineText(snapshot));
+       }
+
+       public void testMaxSize() {
+               String s=
+                       "111\n" +
+                       "222\n" +
+                       "333\n" +
+                       "444\n" +
+                       "555";
+               ITerminalTextData term=makeITerminalTextData();
+               term.setMaxHeight(8);
+               TerminalTextTestHelper.fill(term, s);
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+
+               term.addLine();
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertEquals(toMultiLineText(term), toMultiLineText(snapshot));
+
+               term.addLine();
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertEquals(toMultiLineText(term), toMultiLineText(snapshot));
+
+               term.addLine();
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertEquals(toMultiLineText(term), toMultiLineText(snapshot));
+
+               term.addLine();
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertEquals(toMultiLineText(term), toMultiLineText(snapshot));
+
+               term.addLine();
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertEquals(toMultiLineText(term), toMultiLineText(snapshot));
+
+       }
+
+       
+       public void testGetChar() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE\n" +
+                                "vwxzy\n" +
+                                "VWXYZ";
+               TerminalTextTestHelper.fill(term,s);
+               ITerminalTextData termUnchanged=makeITerminalTextData();
+               TerminalTextTestHelper.fill(termUnchanged,s);
+               
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+
+               for (int line = 0; line < snapshot.getHeight(); line++) {
+                       for (int column = 0; column < snapshot.getWidth(); column++) {
+                               assertEquals(term.getChar(line, column),snapshot.getChar(line, column));
+                       }
+               }
+               // make a change 
+               term.setChar(0, 0, '?', null);
+               // check against unchanged data
+               for (int line = 0; line < snapshot.getHeight(); line++) {
+                       for (int column = 0; column < snapshot.getWidth(); column++) {
+                               assertEquals(termUnchanged.getChar(line, column),snapshot.getChar(line, column));
+                       }
+               }
+               // update and compare against the terminal
+               snapshot.updateSnapshot(true);
+               for (int line = 0; line < snapshot.getHeight(); line++) {
+                       for (int column = 0; column < snapshot.getWidth(); column++) {
+                               assertEquals(term.getChar(line, column),snapshot.getChar(line, column));
+                       }
+               }
+               
+       }
+
+       public void testGetHeight() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE\n" +
+                                "vwxzy\n" +
+                                "VWXYZ";
+               TerminalTextTestHelper.fill(term,s);
+               
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+
+               int expectedHeight=term.getHeight();
+               assertEquals(expectedHeight, snapshot.getHeight());
+               term.setDimensions(term.getHeight()-1, term.getWidth());
+               assertEquals(expectedHeight, snapshot.getHeight());
+               
+               //
+               snapshot.updateSnapshot(false);
+               expectedHeight=term.getHeight();
+               assertEquals(expectedHeight, snapshot.getHeight());
+               term.setDimensions(term.getHeight()-1, term.getWidth());
+               assertEquals(expectedHeight, snapshot.getHeight());
+       }
+//
+//     public void testGetLineSegments() {
+//             fail("Not yet implemented");
+//     }
+//
+       public void testGetStyle() {
+               ITerminalTextData term=makeITerminalTextData();
+               Style style=Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false, false, false);
+               term.setDimensions(6, 3);
+               for (int line = 0; line < term.getHeight(); line++) {
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               char c=(char)('a'+column+line);
+                               term.setChar(line, column, c, style.setForground(StyleColor.getStyleColor(""+c)));
+                       }
+               }
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+
+               
+               for (int line = 0; line < term.getHeight(); line++) {
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               char c=(char)('a'+column+line);
+                               assertSame(style.setForground(StyleColor.getStyleColor(""+c)), snapshot.getStyle(line, column));
+                       }
+               }
+               
+       }
+
+       public void testGetWidth() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE\n" +
+                                "vwxzy\n" +
+                                "VWXYZ";
+               TerminalTextTestHelper.fill(term,s);
+               
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+
+               int expectedWidth=term.getWidth();
+               assertEquals(expectedWidth, snapshot.getWidth());
+               term.setDimensions(term.getHeight(), term.getWidth()-1);
+               assertEquals(expectedWidth, snapshot.getWidth());
+               
+               //
+               snapshot.updateSnapshot(false);
+               expectedWidth=term.getWidth();
+               assertEquals(expectedWidth, snapshot.getWidth());
+               term.setDimensions(term.getHeight(), term.getWidth()-1);
+               assertEquals(expectedWidth, snapshot.getWidth());
+       }
+
+       public void testGetFirstChangedLine() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE\n" +
+                                "vwxzy\n" +
+                                "VWXYZ";
+               ITerminalTextDataSnapshot snapshot=snapshot(s,term);
+
+               
+               assertEquals(0, snapshot.getFirstChangedLine());
+               
+               // if nothing has changed the first changed line i height
+               snapshot.updateSnapshot(false);
+               assertEquals(Integer.MAX_VALUE, snapshot.getFirstChangedLine());
+               
+               snapshot=snapshot(s,term);
+               term.setChar(0, 0, 'x', null);
+               snapshot.updateSnapshot(false);
+               assertEquals(0, snapshot.getFirstChangedLine());
+               
+               snapshot=snapshot(s,term);              
+               term.setChar(3, 0, 'x', null);
+               term.setChar(4, 0, 'x', null);
+               snapshot.updateSnapshot(false);
+               assertEquals(3, snapshot.getFirstChangedLine());
+               
+               snapshot=snapshot(s,term);
+               term.scroll(0, 1, -1);
+               snapshot.updateSnapshot(false);
+               assertEquals(0, snapshot.getFirstChangedLine());
+               
+               snapshot=snapshot(s,term);
+               term.scroll(2, 2, -1);
+               snapshot.updateSnapshot(false);
+               assertEquals(2, snapshot.getFirstChangedLine());
+               
+               // when scrolling the end of the region 'has changed'
+               snapshot=snapshot(s,term);
+               term.scroll(2, 2, -1);
+               snapshot.updateSnapshot(true);
+               assertEquals(3, snapshot.getFirstChangedLine());
+               
+               // when scrolling the end of the region 'has changed'
+               snapshot=snapshot(s,term);
+               term.scroll(2, 2, -1);
+               term.setChar(1, 0, 'x', null);
+               snapshot.updateSnapshot(true);
+               assertEquals(1, snapshot.getFirstChangedLine());
+               
+       }
+       public void testGetLastChangedLine() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE\n" +
+                                "vwxzy\n" +
+                                "VWXYZ";
+               ITerminalTextDataSnapshot snapshot=snapshot(s,term);
+
+               
+               assertEquals(4, snapshot.getLastChangedLine());
+               
+               // if nothing has changed the first changed line i height
+               snapshot.updateSnapshot(false);
+               assertEquals(-1, snapshot.getLastChangedLine());
+               
+               snapshot=snapshot(s,term);
+               term.setChar(0, 0, 'x', null);
+               snapshot.updateSnapshot(false);
+               assertEquals(0, snapshot.getLastChangedLine());
+               
+               snapshot=snapshot(s,term);
+               term.cleanLine(1);
+               snapshot.updateSnapshot(false);
+               assertEquals(1, snapshot.getLastChangedLine());
+
+               snapshot=snapshot(s,term);              
+               term.setChar(3, 0, 'x', null);
+               term.setChar(4, 0, 'x', null);
+               snapshot.updateSnapshot(false);
+               assertEquals(4, snapshot.getLastChangedLine());
+               
+               snapshot=snapshot(s,term);
+               term.scroll(0, 1, -1);
+               snapshot.updateSnapshot(false);
+               assertEquals(0, snapshot.getLastChangedLine());
+               
+               snapshot=snapshot(s,term);
+               term.scroll(2, 2, -1);
+               snapshot.updateSnapshot(false);
+               assertEquals(3, snapshot.getLastChangedLine());
+               
+               // when scrolling the end of the region 'has changed'
+               snapshot=snapshot(s,term);
+               term.scroll(2, 2, -1);
+               snapshot.updateSnapshot(true);
+               assertEquals(3, snapshot.getLastChangedLine());
+               
+               // when scrolling the end of the region 'has changed'
+               snapshot=snapshot(s,term);
+               term.scroll(2, 2, -1);
+               term.setChar(1, 0, 'x', null);
+               snapshot.updateSnapshot(true);
+               assertEquals(3, snapshot.getLastChangedLine());
+               
+       }
+       /**
+        * @param snapshot
+        * @param expected a string of 0 and 1 (1 means changed)
+        */
+       void assertChangedLines(ITerminalTextDataSnapshot snapshot, String expected) {
+               assertEquals(expected.length(),snapshot.getHeight());
+               StringBuffer buffer=new StringBuffer();
+               for (int line = 0; line < expected.length(); line++) {
+                       if(snapshot.hasLineChanged(line))
+                               buffer.append('1');
+                       else
+                               buffer.append('0');
+               }
+               assertEquals(expected, buffer.toString());
+       }
+       public void testHasLineChangedScroll() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="00\n" +
+                                "11\n" +
+                                "22\n" +
+                                "33\n" +
+                                "44\n" +
+                                "55\n" +
+                                "66\n" +
+                                "77\n" +
+                                "88\n" +
+                                "99";
+               ITerminalTextDataSnapshot snapshot=snapshot(s,term);
+               
+               term.scroll(2,3,-1);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "0000100000");
+               
+               snapshot=snapshot(s,term);
+               term.scroll(2,3,-2);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "0001100000");
+
+               snapshot=snapshot(s,term);
+               term.scroll(2,4,-1);
+               term.scroll(2,4,-1);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "0000110000");
+
+               term.scroll(2,3,1);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "0011100000");
+               
+               snapshot=snapshot(s,term);
+               term.scroll(2,3,2);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "0011100000");
+
+               snapshot=snapshot(s,term);
+               term.scroll(2,4,1);
+               term.scroll(2,4,1);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "0011110000");
+
+               
+               snapshot=snapshot(s,term);
+               term.scroll(2,3,-1);
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot, "0011100000");
+               
+               snapshot=snapshot(s,term);
+               term.scroll(2,3,-2);
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot, "0011100000");
+
+               snapshot=snapshot(s,term);
+               term.scroll(2,4,-1);
+               term.scroll(2,4,-1);
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot, "0011110000");
+       }
+       public void testMultiScrollWithDifferentSizes() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="00\n" +
+                                "11\n" +
+                                "22\n" +
+                                "33\n" +
+                                "44\n" +
+                                "55\n" +
+                                "66\n" +
+                                "77\n" +
+                                "88\n" +
+                                "99";
+               ITerminalTextDataSnapshot snapshot;
+
+               snapshot=snapshot(s,term);
+               term.scroll(2,6,-1);
+               term.scroll(2,5,-1);
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot, "0011111100");
+               assertEquals(2, snapshot.getFirstChangedLine());
+               assertEquals(7, snapshot.getLastChangedLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowShift());
+               
+               // scrolls with different ranges cause no scroll
+               // optimization
+               snapshot=snapshot(s,term);
+               term.scroll(2,6,-1);
+               term.scroll(2,5,-1);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "0011111100");
+               assertEquals(2, snapshot.getFirstChangedLine());
+               assertEquals(7, snapshot.getLastChangedLine());
+               assertEquals(0, snapshot.getScrollWindowShift());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+       }
+       public void testHasLineChanged() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="000000\n" +
+                               "111111\n" +
+                               "222222\n" +
+                               "333333\n" +
+                               "444444\n" +
+                               "555555\n" +
+                               "666666\n" +
+                               "777777\n" +
+                               "888888\n" +
+                               "999999";
+               ITerminalTextDataSnapshot snapshot;
+               
+               snapshot=snapshot(s,term);
+               term.scroll(2,3,-1);
+               term.setChar(7, 0, '.', null);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "0000100100");
+               
+               snapshot=snapshot(s,term);
+               term.scroll(2,3,-2);
+               term.setChar(9, 0, '.', null);
+               term.setChars(0, 0, new char[]{'.','!'}, null);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "1001100001");
+
+               snapshot=snapshot(s,term);
+               term.scroll(2,4,-1);
+               term.scroll(2,4,-1);
+               term.setChars(2, 2, new char[]{'.','!','*'},1,1, null);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "0010110000");
+
+               snapshot=snapshot(s,term);
+               term.scroll(2,7,-1);
+               term.setChar(5, 2, '.', null);
+               term.scroll(2,7,-2);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "0001001110");
+
+               
+               snapshot=snapshot(s,term);
+               term.scroll(2,7,-1);
+               term.setChar(5, 2, '.', null);
+               term.scroll(2,7,-2);
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot, "0011111110");
+
+       }
+
+       public void testScroll() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="00\n" +
+                                "11\n" +
+                                "22\n" +
+                                "33\n" +
+                                "44\n" +
+                                "55\n" +
+                                "66\n" +
+                                "77\n" +
+                                "88\n" +
+                                "99";
+               ITerminalTextDataSnapshot snapshot=snapshot(s,term);
+               
+               term.scroll(2,3,-1);
+               snapshot.updateSnapshot(true);
+               assertEquals(2, snapshot.getScrollWindowStartLine());
+               assertEquals(3, snapshot.getScrollWindowSize());
+               assertEquals(-1, snapshot.getScrollWindowShift());
+               assertEquals(4, snapshot.getFirstChangedLine());
+               assertEquals(4, snapshot.getLastChangedLine());
+               
+               term.scroll(2,3,-2);
+               snapshot.updateSnapshot(true);
+               assertEquals(2, snapshot.getScrollWindowStartLine());
+               assertEquals(3, snapshot.getScrollWindowSize());
+               assertEquals(-2, snapshot.getScrollWindowShift());
+               assertEquals(3, snapshot.getFirstChangedLine());
+               assertEquals(4, snapshot.getLastChangedLine());
+
+               term.scroll(2,4,-1);
+               term.scroll(2,4,-1);
+               snapshot.updateSnapshot(true);
+               assertEquals(2, snapshot.getScrollWindowStartLine());
+               assertEquals(4, snapshot.getScrollWindowSize());
+               assertEquals(-2, snapshot.getScrollWindowShift());
+               assertEquals(4, snapshot.getFirstChangedLine());
+               assertEquals(5, snapshot.getLastChangedLine());
+
+               
+               snapshot=snapshot(s,term);
+               term.scroll(2,3,-1);
+               snapshot.updateSnapshot(false);
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+               assertEquals(2, snapshot.getFirstChangedLine());
+               assertEquals(4, snapshot.getLastChangedLine());
+               
+       }
+       public void testDisjointScroll() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="000000\n" +
+                               "111111\n" +
+                               "222222\n" +
+                               "333333\n" +
+                               "444444\n" +
+                               "555555\n" +
+                               "666666\n" +
+                               "777777\n" +
+                               "888888\n" +
+                               "999999";
+               ITerminalTextDataSnapshot snapshot;
+               
+               snapshot=snapshot(s,term);
+               term.scroll(0,2,-1);
+               term.scroll(4,2,-1);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "1100110000");
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+
+               snapshot=snapshot(s,term);
+               term.scroll(0,3,-1);
+               term.scroll(2,2,-2);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "1111000000");
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+
+               snapshot=snapshot(s,term);
+               term.scroll(0,3,-1);
+               term.scroll(2,2,-2);
+               term.scroll(0,3,-1);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "1111000000");
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+
+               snapshot=snapshot(s,term);
+               term.scroll(0,3,-1);
+               term.scroll(2,2,-2);
+               term.scroll(0,3,-10);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "1111000000");
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+
+               snapshot=snapshot(s,term);
+               term.scroll(1,3,-1);
+               term.scroll(1,3,1);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "0111000000");
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+       }
+       public void testResize() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="000000\n" +
+                               "111111\n" +
+                               "222222\n" +
+                               "333333";
+               ITerminalTextDataSnapshot snapshot;
+               
+               snapshot=snapshot(s,term);
+               term.setDimensions(term.getHeight(), term.getWidth()+1);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "1111");
+               assertEquals(0, snapshot.getFirstChangedLine());
+               assertEquals(3, snapshot.getLastChangedLine());
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+
+               snapshot=snapshot(s,term);
+               term.setDimensions(term.getHeight()+1, term.getWidth());
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "11111");
+               assertEquals(0, snapshot.getFirstChangedLine());
+               assertEquals(4, snapshot.getLastChangedLine());
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+       
+               snapshot=snapshot(s,term);
+               term.setDimensions(term.getHeight()-1, term.getWidth());
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "111");
+               assertEquals(0, snapshot.getFirstChangedLine());
+               assertEquals(2, snapshot.getLastChangedLine());
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+       
+               snapshot=snapshot(s,term);
+               term.setDimensions(0, 0);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "");
+               assertEquals(0, snapshot.getFirstChangedLine());
+               assertEquals(-1, snapshot.getLastChangedLine());
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+       
+       }
+       public void testResizeAfterScroll() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="000000\n" +
+                               "111111\n" +
+                               "222222\n" +
+                               "333333\n" +
+                               "444444\n" +
+                               "555555\n" +
+                               "666666\n" +
+                               "777777\n" +
+                               "888888\n" +
+                               "999999";
+               ITerminalTextDataSnapshot snapshot;
+               
+               snapshot=snapshot(s,term);
+               term.scroll(1,2,-1);
+               term.setDimensions(5, 4);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "11111");
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+
+               snapshot=snapshot(s,term);
+               term.scroll(1,2,-1);
+               term.setDimensions(7, 2);
+               term.scroll(4,2,-1);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "1111111");
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+               snapshot=snapshot(s,term);
+
+               term.scroll(1,2,-1);
+               term.setDimensions(term.getHeight(),term.getWidth()+1);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "1111111111");
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+       }
+       public void testScrollAfterResize() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="000000\n" +
+                               "111111\n" +
+                               "222222\n" +
+                               "333333\n" +
+                               "444444\n" +
+                               "555555\n" +
+                               "666666\n" +
+                               "777777\n" +
+                               "888888\n" +
+                               "999999";
+               ITerminalTextDataSnapshot snapshot;
+               
+               snapshot=snapshot(s,term);
+               term.setDimensions(14, 6);
+               term.scroll(0,14,-1);
+               snapshot.updateSnapshot(true);
+               assertChangedLines(snapshot, "11111111111111");
+               assertEquals(0, snapshot.getScrollWindowStartLine());
+               assertEquals(0, snapshot.getScrollWindowSize());
+               assertEquals(0, snapshot.getScrollWindowShift());
+       }
+       private final class SnapshotListener implements ITerminalTextDataSnapshot.SnapshotOutOfDateListener {
+               int N;
+               public void snapshotOutOfDate(ITerminalTextDataSnapshot snapshot) {
+                       N++;
+               }
+               public void reset() {
+                       N=0;
+               }
+       }
+
+       public void testAddListener() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE\n" +
+                                "vwxzy\n" +
+                                "VWXYZ";
+               TerminalTextTestHelper.fill(term,s);
+               
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+
+               SnapshotListener listener=new SnapshotListener();
+               snapshot.addListener(listener);
+               assertEquals(0, listener.N);
+               
+               // make a change and expect it to be changed
+               term.setChar(0, 0, '?', null);
+               assertEquals(1, listener.N);
+               term.setChar(1, 1, '?', null);
+               assertEquals(1, listener.N);
+               
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener.N);
+               listener.reset();
+
+               // make a change and expect it to be changed
+               term.setChars(1, 1, new char[]{'?','!','.'},null);
+               assertEquals(1, listener.N);
+               term.setChars(2, 1, new char[]{'?','!','.'},null);
+               assertEquals(1, listener.N);
+               
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener.N);
+               listener.reset();
+               
+               // scroll
+               term.scroll(1, 2, -1);
+               assertEquals(1, listener.N);
+               term.scroll(1, 2, -1);
+               assertEquals(1, listener.N);
+
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener.N);
+               listener.reset();
+               
+               // scroll
+               term.scroll(1, 2, 1);
+               assertEquals(1, listener.N);
+               term.scroll(1, 2, 1);
+               assertEquals(1, listener.N);
+
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener.N);
+               listener.reset();
+
+               // scroll
+               term.scroll(1, 2, -1);
+               assertEquals(1, listener.N);
+               term.scroll(1, 2, -1);
+               assertEquals(1, listener.N);
+
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener.N);
+               listener.reset();
+               
+               // scroll
+               term.scroll(1, 2, 1);
+               assertEquals(1, listener.N);
+
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener.N);
+               listener.reset();
+               
+               // setDimensions
+               term.setDimensions(2, 2);
+               assertEquals(1, listener.N);
+
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener.N);
+               listener.reset();
+               
+               // setDimensions
+               term.setDimensions(20, 20);
+               assertEquals(1, listener.N);
+
+               snapshot.updateSnapshot(false);
+               assertFalse(snapshot.isOutOfDate());
+       }
+
+       public void testRemoveListener() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE\n" +
+                                "vwxzy\n" +
+                                "VWXYZ";
+               TerminalTextTestHelper.fill(term,s);
+               
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+
+               SnapshotListener listener1=new SnapshotListener();
+               SnapshotListener listener2=new SnapshotListener();
+               SnapshotListener listener3=new SnapshotListener();
+               snapshot.addListener(listener1);
+               snapshot.addListener(listener2);
+               snapshot.addListener(listener3);
+               assertEquals(0, listener1.N);
+               
+               // make a change and expect it to be changed
+               term.setChar(0, 0, '?', null);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(1, listener3.N);
+               term.setChar(1, 1, '?', null);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(1, listener3.N);
+               
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(1, listener3.N);
+               listener1.reset();
+               listener2.reset();
+               listener3.reset();
+
+               // make a change and expect it to be changed
+               term.setChars(1, 1, new char[]{'?','!','.'},null);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(1, listener3.N);
+               term.setChars(2, 1, new char[]{'?','!','.'},null);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(1, listener3.N);
+
+               
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(1, listener3.N);
+
+               listener1.reset();
+               listener2.reset();
+               listener3.reset();
+
+               snapshot.removeListener(listener2);
+
+               // scroll
+               term.scroll(1, 2, -1);
+               assertEquals(1, listener1.N);
+               assertEquals(0, listener2.N);
+               assertEquals(1, listener3.N);
+
+               term.scroll(1, 2, -1);
+               assertEquals(1, listener1.N);
+               assertEquals(0, listener2.N);
+               assertEquals(1, listener3.N);
+
+
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener1.N);
+               assertEquals(0, listener2.N);
+               assertEquals(1, listener3.N);
+
+               snapshot.addListener(listener2);
+               listener1.reset();
+               listener2.reset();
+               listener3.reset();
+
+               
+               snapshot.removeListener(listener3);
+               // scroll
+               term.scroll(1, 2, 1);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(0, listener3.N);
+
+               term.scroll(1, 2, 1);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(0, listener3.N);
+
+
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(0, listener3.N);
+
+               snapshot.addListener(listener3);
+               listener1.reset();
+               listener2.reset();
+               listener3.reset();
+
+               // add listener multiple times
+               snapshot.addListener(listener3);
+               
+               // scroll
+               term.scroll(1, 2, -1);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(2, listener3.N);
+
+               term.scroll(1, 2, -1);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(2, listener3.N);
+
+
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(2, listener3.N);
+
+               listener1.reset();
+               listener2.reset();
+               listener3.reset();
+               // remove the duplicate listener
+               snapshot.removeListener(listener3);
+
+               
+               // scroll
+               term.scroll(1, 2, 1);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(1, listener3.N);
+
+
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(1, listener3.N);
+
+               listener1.reset();
+               listener2.reset();
+               listener3.reset();
+
+               
+               // setDimensions
+               term.setDimensions(2, 2);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(1, listener3.N);
+
+
+               snapshot.updateSnapshot(false);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(1, listener3.N);
+
+               listener1.reset();
+               listener2.reset();
+               listener3.reset();
+
+               
+               // setDimensions
+               term.setDimensions(20, 20);
+               assertEquals(1, listener1.N);
+               assertEquals(1, listener2.N);
+               assertEquals(1, listener3.N);
+
+
+               snapshot.updateSnapshot(false);
+               assertFalse(snapshot.isOutOfDate());
+       }
+       public void testWindowOfInterest() {
+               ITerminalTextData term=makeITerminalTextData();
+               TerminalTextTestHelper.fillSimple(term,"0123456789");
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+               snapshot.setInterestWindow(7, 4);
+               snapshot.setInterestWindow(9, 4);
+               snapshot.updateSnapshot(false);
+       }
+       public void testWindowOfInterest2() {
+               ITerminalTextData term=makeITerminalTextData();
+               TerminalTextTestHelper.fillSimple(term,"0123456789");
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               snapshot.updateSnapshot(false);
+               term.scroll(7, 3,-1);
+               snapshot.setInterestWindow(9, 4);
+               snapshot.updateSnapshot(false);
+       }
+       public void testAddLine() {
+               ITerminalTextData term=makeITerminalTextData();
+               TerminalTextTestHelper.fillSimple(term,"0123456789");
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               term.setMaxHeight(20);
+               snapshot.updateSnapshot(false);
+               assertEquals(10,term.getHeight());
+               assertEquals(20,term.getMaxHeight());
+               assertFalse(snapshot.isOutOfDate());
+               term.addLine();
+               assertTrue(snapshot.isOutOfDate());
+               assertEquals(11,term.getHeight());
+               assertEquals(10,snapshot.getHeight());
+               snapshot.updateSnapshot(false);
+               assertEquals(11,term.getHeight());
+               assertEquals(11,snapshot.getHeight());
+               assertEquals(20,term.getMaxHeight());
+               
+               term.addLine();
+               term.addLine();
+               assertEquals(11,snapshot.getHeight());
+               assertEquals(13,term.getHeight());
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertEquals(13,snapshot.getHeight());
+               assertEquals(13,term.getHeight());
+               assertEquals(20,term.getMaxHeight());
+       }
+       public void testHasDimensionsChanged() {
+               ITerminalTextData term=makeITerminalTextData();
+               TerminalTextTestHelper.fillSimple(term,"0123456789");
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               term.setMaxHeight(20);
+               snapshot.setInterestWindow(3, 4);
+               snapshot.updateSnapshot(false);
+               assertEquals(10,term.getHeight());
+               assertEquals(20,term.getMaxHeight());
+               assertFalse(snapshot.isOutOfDate());
+               term.addLine();
+               assertTrue(snapshot.isOutOfDate());
+               assertEquals(11,term.getHeight());
+               assertEquals(10,snapshot.getHeight());
+               snapshot.updateSnapshot(false);
+               assertTrue(snapshot.hasDimensionsChanged());
+               assertEquals(11,term.getHeight());
+               assertEquals(11,snapshot.getHeight());
+               assertEquals(20,term.getMaxHeight());
+               
+               term.addLine();
+               term.addLine();
+               assertEquals(11,snapshot.getHeight());
+               assertEquals(13,term.getHeight());
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertTrue(snapshot.hasDimensionsChanged());
+               assertEquals(13,snapshot.getHeight());
+               assertEquals(13,term.getHeight());
+               assertEquals(20,term.getMaxHeight());
+       }
+       public void testCursor() {
+               ITerminalTextData term=makeITerminalTextData();
+               TerminalTextTestHelper.fillSimple(term,"0123456789");
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               term.setMaxHeight(20);
+               snapshot.setInterestWindow(3, 4);
+               snapshot.updateSnapshot(false);
+               term.setCursorLine(2);
+               term.setCursorColumn(1);
+               snapshot.updateSnapshot(false);
+               assertEquals(2, snapshot.getCursorLine());
+               assertEquals(1, snapshot.getCursorColumn());
+               term.setCursorLine(3);
+               term.setCursorColumn(2);
+               snapshot.updateSnapshot(false);
+               assertEquals(3, snapshot.getCursorLine());
+               assertEquals(2, snapshot.getCursorColumn());
+       }
+       public void testCursor2() {
+               ITerminalTextData term=makeITerminalTextData();
+               TerminalTextTestHelper.fillSimple(term,"0123456789");
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               term.setMaxHeight(20);
+               snapshot.setInterestWindow(3, 4);
+               snapshot.updateSnapshot(false);
+               term.setCursorLine(2);
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               term.setCursorColumn(1);
+               assertTrue(snapshot.isOutOfDate());
+       }
+       public void testHasTerminalChanged() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s="12345\n" +
+                                "abcde\n" +
+                                "ABCDE\n" +
+                                "vwxzy\n" +
+                                "VWXYZ";
+               TerminalTextTestHelper.fill(term,s);
+               
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               assertTrue(snapshot.hasTerminalChanged());
+               snapshot.updateSnapshot(false);
+
+               assertTrue(snapshot.hasTerminalChanged());
+               
+               // make a change and expect it to be changed
+               term.setChar(0, 0, '?', null);
+               snapshot.updateSnapshot(false);
+               assertTrue(snapshot.hasTerminalChanged());
+               
+               // make a change and expect it to be changed
+               term.setChars(1, 1, new char[]{'?','!','.'},null);
+               snapshot.updateSnapshot(false);
+               assertTrue(snapshot.hasTerminalChanged());
+               
+               // scroll
+               term.scroll(1, 2, -1);
+               snapshot.updateSnapshot(false);
+               assertTrue(snapshot.hasTerminalChanged());
+               
+               // scroll
+               term.scroll(1, 2, 1);
+               snapshot.updateSnapshot(false);
+               assertTrue(snapshot.hasTerminalChanged());
+
+               // scroll
+               term.scroll(1, 2, -1);
+               snapshot.updateSnapshot(true);
+               assertTrue(snapshot.hasTerminalChanged());
+               
+               // scroll
+               term.scroll(1, 2, 1);
+               snapshot.updateSnapshot(true);
+               assertTrue(snapshot.hasTerminalChanged());
+               
+               // setDimensions
+               term.setDimensions(2, 2);
+               snapshot.updateSnapshot(false);
+               assertTrue(snapshot.hasTerminalChanged());
+               
+               // setDimensions
+               term.setDimensions(20, 20);
+               snapshot.updateSnapshot(false);
+               assertTrue(snapshot.hasTerminalChanged());
+
+               snapshot.updateSnapshot(false);
+               assertFalse(snapshot.hasTerminalChanged());
+
+               // window of interest changes should NOT set hasTerminalChanged
+               snapshot.updateSnapshot(false);
+               snapshot.setInterestWindow(7, 4);
+
+               assertFalse(snapshot.hasTerminalChanged());
+       }
+       public void testGetTerminalTextData() {
+               ITerminalTextData term=makeITerminalTextData();
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               assertSame(term, snapshot.getTerminalTextData());
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataSnapshotWindowTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataSnapshotWindowTest.java
new file mode 100644 (file)
index 0000000..130c68d
--- /dev/null
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import junit.framework.TestCase;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+
+public class TerminalTextDataSnapshotWindowTest extends TestCase {
+       String toMultiLineText(ITerminalTextDataReadOnly term) {
+               return TerminalTextTestHelper.toMultiLineText(term);
+       }
+       String toSimpleText(ITerminalTextDataReadOnly term) {
+               return TerminalTextTestHelper.toSimple(term);
+       }
+
+       protected ITerminalTextData makeITerminalTextData() {
+               return new TerminalTextData();
+       }
+       ITerminalTextDataSnapshot snapshotSimple(String text, ITerminalTextData term) {
+               TerminalTextTestHelper.fillSimple(term,text);
+               ITerminalTextDataSnapshot snapshot=term.makeSnapshot();
+               return snapshot;
+               
+       }
+       /**
+        * @param snapshot
+        * @param expected a string of 0 and 1 (1 means changed)
+        */
+       void assertChangedLines(ITerminalTextDataSnapshot snapshot, String expected) {
+               assertEquals(expected.length(),snapshot.getHeight());
+               StringBuffer buffer=new StringBuffer();
+               for (int line = 0; line < expected.length(); line++) {
+                       if(snapshot.hasLineChanged(line))
+                               buffer.append('1');
+                       else
+                               buffer.append('0');
+               }
+               assertEquals(expected, buffer.toString());
+       }
+
+       public void testSetInterestWindow() {
+               ITerminalTextData term=makeITerminalTextData();
+               ITerminalTextDataSnapshot snapshot=snapshotSimple("0123456789",term);
+               assertEquals(0, snapshot.getInterestWindowStartLine());
+               assertEquals(-1, snapshot.getInterestWindowSize());
+               snapshot.setInterestWindow(2, 3);
+               assertEquals(2, snapshot.getInterestWindowStartLine());
+               assertEquals(3, snapshot.getInterestWindowSize());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0011100000");
+       }
+       public void testSetChar() {
+               ITerminalTextData term=makeITerminalTextData();
+               ITerminalTextDataSnapshot snapshot=snapshotSimple("0123456789",term);
+               snapshot.setInterestWindow(2, 3);
+               snapshot.updateSnapshot(false);
+               assertEquals("  234     ", toSimpleText(snapshot));
+               
+               term.setChar(0, 0, 'x', null);
+               assertFalse(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0000000000");
+               
+               term.setChar(1, 0, 'x', null);
+               assertFalse(snapshot.isOutOfDate());
+               
+               term.setChar(2, 0, 'x', null);
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0010000000");
+               
+               term.setChar(3, 0, 'x', null);
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0001000000");
+
+               term.setChar(4, 0, 'x', null);
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0000100000");
+
+               term.setChar(5, 0, 'x', null);
+               assertFalse(snapshot.isOutOfDate());
+               
+               term.setChar(6, 0, 'x', null);
+               assertFalse(snapshot.isOutOfDate());
+               
+               for (int i = 0; i < 9; i++) {
+                       term.setChar(i, 0, (char)('a'+i), null);
+               }
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0011100000");
+       }
+
+       public void testSetChars() {
+               ITerminalTextData term=makeITerminalTextData();
+               ITerminalTextDataSnapshot snapshot=snapshotSimple("0123456789",term);
+               snapshot.setInterestWindow(2, 3);
+               snapshot.updateSnapshot(false);
+               assertEquals("  234     ", toSimpleText(snapshot));
+               
+               term.setChars(0, 0, "x".toCharArray(), null);
+               assertFalse(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0000000000");
+               
+               term.setChars(1, 0, "x".toCharArray(), null);
+               assertFalse(snapshot.isOutOfDate());
+               
+               term.setChars(2, 0, "x".toCharArray(), null);
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0010000000");
+               
+               term.setChars(3, 0, "x".toCharArray(), null);
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0001000000");
+
+               term.setChars(4, 0, "x".toCharArray(), null);
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0000100000");
+
+               term.setChars(5, 0, "x".toCharArray(), null);
+               assertFalse(snapshot.isOutOfDate());
+               
+               term.setChars(6, 0, "x".toCharArray(), null);
+               assertFalse(snapshot.isOutOfDate());
+               for (int i = 0; i < 9; i++) {
+                       term.setChars(i, 0, (i+"").toCharArray(), null);
+               }
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0011100000");
+       }
+       public void testSetChars2() {
+               ITerminalTextData term=makeITerminalTextData();
+               ITerminalTextDataSnapshot snapshot=snapshotSimple("0123456789",term);
+               snapshot.setInterestWindow(2, 3);
+               snapshot.updateSnapshot(false);
+               assertEquals("  234     ", toSimpleText(snapshot));
+               
+               term.setChars(0, 0, "abcdef".toCharArray(),2,1, null);
+               assertFalse(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0000000000");
+               
+               term.setChars(1, 0, "abcdef".toCharArray(),2 ,1, null);
+               assertFalse(snapshot.isOutOfDate());
+               
+               term.setChars(2, 0, "abcdef".toCharArray(),2 ,1, null);
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0010000000");
+               
+               term.setChars(3, 0, "abcdef".toCharArray(),2 ,1, null);
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0001000000");
+
+               term.setChars(4, 0, "abcdef".toCharArray(),2 ,1, null);
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0000100000");
+
+               term.setChars(5, 0, "abcdef".toCharArray(),2 ,1, null);
+               assertFalse(snapshot.isOutOfDate());
+               
+               term.setChars(6, 0, "abcdef".toCharArray(),2 ,1, null);
+               assertFalse(snapshot.isOutOfDate());
+               for (int i = 0; i < 9; i++) {
+                       term.setChars(i, 0, ("ab"+i+"def").toCharArray(),2 ,1, null);
+               }
+               assertTrue(snapshot.isOutOfDate());
+               snapshot.updateSnapshot(false);
+               assertChangedLines(snapshot,"0011100000");
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataStoreTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataStoreTest.java
new file mode 100644 (file)
index 0000000..0e2955d
--- /dev/null
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+
+public class TerminalTextDataStoreTest extends AbstractITerminalTextDataTest {
+       protected ITerminalTextData makeITerminalTextData() {
+               return new TerminalTextDataStore();
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataTest.java
new file mode 100644 (file)
index 0000000..274d246
--- /dev/null
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+
+public class TerminalTextDataTest extends AbstractITerminalTextDataTest {
+       protected ITerminalTextData makeITerminalTextData() {
+               return new TerminalTextData();
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataWindowTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextDataWindowTest.java
new file mode 100644 (file)
index 0000000..8333aad
--- /dev/null
@@ -0,0 +1,494 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [168197] Fix Terminal for CDC-1.1/Foundation-1.1
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import java.util.ArrayList;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.LineSegment;
+import org.eclipse.tm.terminal.model.Style;
+import org.eclipse.tm.terminal.model.StyleColor;
+
+public class TerminalTextDataWindowTest extends AbstractITerminalTextDataTest {
+       int fOffset;
+       int fSize;
+       public TerminalTextDataWindowTest() {
+               fOffset=2;
+               fSize=2;
+       }
+       protected ITerminalTextData makeITerminalTextData() {
+               TerminalTextDataWindow term=new TerminalTextDataWindow();
+               term.setWindow(fOffset,fSize);
+               return term;
+       }
+       /**
+        * Used for multi line text
+        * @param expected
+        * @param actual
+        */
+       protected void assertEqualsTerm(String expected,String actual) {
+               assertEquals(stripMultiLine(expected), stripMultiLine(actual));
+       }
+       private String stripMultiLine(String s) {
+               StringBuffer b=new StringBuffer();
+               // String[] lines=s.split("\n");
+               // <J2ME CDC-1.1 Foundation-1.1 variant>
+               ArrayList<String> l = new ArrayList<String>();
+               int j = 0;
+               for (int k = 0; k < s.length(); k++) {
+                       if (s.charAt(k) == '\n') {
+                               l.add(s.substring(j, k));
+                               j = k;
+                       }
+               }
+               j = l.size() - 1;
+               while (j >= 0 && "".equals(l.get(j))) {
+                       j--;
+               }
+               String[] lines = new String[j + 1];
+               while (j >= 0) {
+                       lines[j] = l.get(j);
+                       j--;
+               }
+               // </J2ME CDC-1.1 Foundation-1.1 variant>
+               for (int i = 0; i < lines.length; i++) {
+                       if(i>0)
+                               b.append("\n"); //$NON-NLS-1$
+                       if(i>=fOffset && i<fOffset+fSize)
+                               b.append(lines[i]);
+                       else
+                               b.append(new String(new char[lines[i].length()]));
+               }
+               return b.toString();
+       }
+       /**
+        * Used for simple text
+        * @param expected
+        * @param actual
+        */
+       protected void assertEqualsSimple(String expected,String actual) {
+               assertEquals(stripSimple(expected), stripSimple(actual));
+       }
+       String stripSimple(String s) {
+               StringBuffer b=new StringBuffer();
+               for (int i = 0; i < s.length(); i++) {
+                       if(i>=fOffset && i<fOffset+fSize)
+                               b.append(s.charAt(i));
+                       else
+                               b.append(' ');
+               }
+               return b.toString();
+       }
+       public void testAddLine() {
+               String s=
+                       "111\n" +
+                       "222\n" +
+                       "333\n" +
+                       "444\n" +
+                       "555";
+               ITerminalTextData term=makeITerminalTextData();
+               fill(term, s);
+               term.addLine();
+               assertEqualsTerm(
+                               "222\n" +
+                               "333\n" +
+                               "444\n" +
+                               "\0\0\0\n" +
+                               "\000\000\000", toMultiLineText(term));
+       }
+
+       public void testMaxSize() {
+               String s=
+                       "111\n" +
+                       "222\n" +
+                       "333\n" +
+                       "444\n" +
+                       "555";
+               ITerminalTextData term=makeITerminalTextData();
+               term.setMaxHeight(8);
+               fill(term, s);
+               assertEquals(5, term.getHeight());
+               assertEquals(8, term.getMaxHeight());
+               term.addLine();
+               assertEquals(6, term.getHeight());
+               assertEqualsTerm(
+                               "111\n" +
+                               "222\n" +
+                               "333\n" +
+                               "444\n" +
+                               "555\n" +
+                               "\000\000\000", toMultiLineText(term));
+               term.addLine();
+               assertEquals(7, term.getHeight());
+               assertEqualsTerm(
+                               "111\n" +
+                               "222\n" +
+                               "333\n" +
+                               "444\n" +
+                               "555\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000", toMultiLineText(term));
+               term.addLine();
+               assertEquals(8, term.getHeight());
+               assertEqualsTerm(
+                               "111\n" +
+                               "222\n" +
+                               "333\n" +
+                               "444\n" +
+                               "555\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000", toMultiLineText(term));
+               term.addLine();
+               assertEquals(8, term.getHeight());
+               assertEqualsTerm(
+                               "222\n" +
+                               "333\n" +
+                               "444\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000\n" +
+                               "\000\000\000", toMultiLineText(term));
+       }
+
+       public void testGetLineSegments() {
+               Style s1=getDefaultStyle();
+               Style s2=s1.setBold(true);
+               Style s3=s1.setUnderline(true);
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(8, 8);
+               LineSegment[] segments;
+
+               term.setChars(2, 0,"0123".toCharArray(), s1);
+               term.setChars(2, 4,"abcd".toCharArray(), null);
+               segments=term.getLineSegments(2, 0, term.getWidth());
+               assertEquals(2, segments.length);
+               assertSegment(0, "0123", s1, segments[0]);
+               assertSegment(4, "abcd", null, segments[1]);
+
+
+               segments=term.getLineSegments(2, 4, term.getWidth()-4);
+               assertEquals(1, segments.length);
+               assertSegment(4, "abcd", null, segments[0]);
+
+               segments=term.getLineSegments(2, 3, 2);
+               assertEquals(2, segments.length);
+               assertSegment(3, "3", s1, segments[0]);
+               assertSegment(4, "a", null, segments[1]);
+
+               segments=term.getLineSegments(2, 7, 1);
+               assertEquals(1, segments.length);
+               assertSegment(7, "d", null, segments[0]);
+
+               segments=term.getLineSegments(2, 0, 1);
+               assertEquals(1, segments.length);
+               assertSegment(0, "0", s1, segments[0]);
+
+               // line 1
+               term.setChars(1, 0,"x".toCharArray(), s1);
+               term.setChars(1, 1,"y".toCharArray(), s2);
+               term.setChars(1, 2,"z".toCharArray(), s3);
+
+               segments=term.getLineSegments(1, 0, term.getWidth());
+               assertEquals(1, segments.length);
+               assertSegment(0, "\000\000\000\000\000\000\000\000", null, segments[0]);
+
+               // line 3
+               segments=term.getLineSegments(3, 0, term.getWidth());
+               assertEquals(1, segments.length);
+               assertSegment(0, "\000\000\000\000\000\000\000\000", null, segments[0]);
+
+       }
+       public void testGetChar() {
+               String s="12345\n" +
+                "abcde\n" +
+                "ABCDE";
+               ITerminalTextData term=makeITerminalTextData();
+               fill(term, s);
+               assertEquals('\000', term.getChar(0,0));
+               assertEquals('\000', term.getChar(0,1));
+               assertEquals('\000', term.getChar(0,2));
+               assertEquals('\000', term.getChar(0,3));
+               assertEquals('\000', term.getChar(0,4));
+               assertEquals('\000', term.getChar(1,0));
+               assertEquals('\000', term.getChar(1,1));
+               assertEquals('\000', term.getChar(1,2));
+               assertEquals('\000', term.getChar(1,3));
+               assertEquals('\000', term.getChar(1,4));
+               assertEquals('A', term.getChar(2,0));
+               assertEquals('B', term.getChar(2,1));
+               assertEquals('C', term.getChar(2,2));
+               assertEquals('D', term.getChar(2,3));
+               assertEquals('E', term.getChar(2,4));
+       }
+       public void testGetStyle() {
+               ITerminalTextData term=makeITerminalTextData();
+               Style style=getDefaultStyle();
+               term.setDimensions(6, 3);
+               for (int line = 0; line < term.getHeight(); line++) {
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               char c=(char)('a'+column+line);
+                               term.setChar(line, column, c, style.setForground(StyleColor.getStyleColor(""+c)));
+                       }
+               }
+               for (int line = 0; line < term.getHeight(); line++) {
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               char c=(char)('a'+column+line);
+                               Style s=null;
+                               if(line>=fOffset&&line<fOffset+fSize)
+                                       s=style.setForground(StyleColor.getStyleColor(""+c));
+                               assertSame(s, term.getStyle(line, column));
+                       }
+               }
+
+       }
+       public void testSetChar() {
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(6, 3);
+               for (int line = 0; line < term.getHeight(); line++) {
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               term.setChar(line, column, (char)('a'+column+line), null);
+                       }
+               }
+               for (int line = 0; line < term.getHeight(); line++) {
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               char c=0;
+                               if(line>=fOffset&&line<fOffset+fSize)
+                                       c=(char)('a'+column+line);
+                               assertEquals(c, term.getChar(line,column));
+                       }
+               }
+               assertEqualsTerm(
+                                 "abc\n"
+                               + "bcd\n"
+                               + "cde\n"
+                               + "def\n"
+                               + "efg\n"
+                               + "fgh", toMultiLineText(term));
+       }
+
+       public void testSetChars() {
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(6, 3);
+               for (int line = 0; line < term.getHeight(); line++) {
+                       char[] chars=new char[term.getWidth()];
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               chars[column]=(char)('a'+column+line);
+                       }
+                       term.setChars(line, 0, chars, null);
+               }
+               for (int line = 0; line < term.getHeight(); line++) {
+                       for (int column = 0; column < term.getWidth(); column++) {
+                               char c=0;
+                               if(line>=fOffset&&line<fOffset+fSize)
+                                       c=(char)('a'+column+line);
+                               assertEquals(c, term.getChar(line,column));
+                       }
+               }
+               assertEqualsTerm(
+                                 "abc\n"
+                               + "bcd\n"
+                               + "cde\n"
+                               + "def\n"
+                               + "efg\n"
+                               + "fgh", toMultiLineText(term));
+
+               term.setChars(3, 1, new char[]{'1','2'}, null);
+               assertEqualsTerm(
+                                 "abc\n"
+                               + "bcd\n"
+                               + "cde\n"
+                               + "d12\n"
+                               + "efg\n"
+                               + "fgh", toMultiLineText(term));
+               // check if chars are correctly chopped
+               term.setChars(4, 1, new char[]{'1','2','3','4','5'}, null);
+               assertEqualsTerm(
+                                 "abc\n"
+                               + "bcd\n"
+                               + "cde\n"
+                               + "d12\n"
+                               + "e12\n"
+                               + "fgh", toMultiLineText(term));
+
+       }
+       public void testSetCharsLen() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s= "ZYXWVU\n"
+                               + "abcdef\n"
+                               + "ABCDEF";
+               fill(term, s);
+               char[] chars=new char[]{'1','2','3','4','5','6','7','8'};
+               term.setChars(1, 0, chars, 0, 6,null);
+               assertEqualsTerm(
+                                 "ZYXWVU\n"
+                               + "123456\n"
+                               + "ABCDEF", toMultiLineText(term));
+
+               fill(term, s);
+               term.setChars(1, 0, chars, 0, 5, null);
+               assertEqualsTerm("ZYXWVU\n"
+                               + "12345f\n"
+                               + "ABCDEF", toMultiLineText(term));
+
+               fill(term, s);
+               term.setChars(1, 0, chars, 1, 5, null);
+               assertEqualsTerm("ZYXWVU\n"
+                               + "23456f\n"
+                               + "ABCDEF", toMultiLineText(term));
+
+               fill(term, s);
+               term.setChars(1, 1, chars, 1, 4, null);
+               assertEqualsTerm("ZYXWVU\n"
+                               + "a2345f\n"
+                               + "ABCDEF", toMultiLineText(term));
+
+
+
+               fill(term, s);
+               term.setChars(1, 2, chars, 3, 4, null);
+               assertEqualsTerm("ZYXWVU\n"
+                               + "ab4567\n"
+                               + "ABCDEF", toMultiLineText(term));
+
+               fill(term, s);
+       }
+       public void testSetCopyLines() {
+               ITerminalTextData term=new TerminalTextDataStore();
+               String s="012345";
+               fillSimple(term, s);
+               ITerminalTextData termCopy=makeITerminalTextData();
+               String sCopy="abcde";
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,0,0,0);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple(sCopy, toSimple(termCopy));
+
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,0,0,5);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple("01234", toSimple(termCopy));
+
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,0,0,2);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple("01cde", toSimple(termCopy));
+
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,0,1,2);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple("a01de", toSimple(termCopy));
+
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,1,1,2);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple("a12de", toSimple(termCopy));
+
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,1,1,4);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple("a1234", toSimple(termCopy));
+
+               fillSimple(termCopy, sCopy);
+               termCopy.copyRange(term,2,1,4);
+               assertEqualsSimple(s, toSimple(term));
+               assertEqualsSimple("a2345", toSimple(termCopy));
+       }
+       public void testScrollNegative() {
+               scrollTest(0,2,-1,"  23  ","  23  ");
+               scrollTest(0,1,-1,"  23  ","  23  ");
+               scrollTest(0,6,-1,"  23  ","  3   ");
+               scrollTest(0,6,-6,"  23  ","      ");
+               scrollTest(0,6,-7,"  23  ","      ");
+               scrollTest(0,6,-8,"  23  ","      ");
+               scrollTest(0,6,-2,"  23  ","      ");
+               scrollTest(1,1,-1,"  23  ","  23  ");
+               scrollTest(1,2,-1,"  23  ","   3  ");
+               scrollTest(5,1,-1,"  23  ","  23  ");
+               scrollTest(5,1,-1,"  23  ","  23  ");
+       }
+       public void testScrollAll() {
+               scrollTest(0,6,1,  "  2345","   2  ");
+               scrollTest(0,6,-1, "  2345","  3   ");
+               scrollTest(0,6,2,  "  2345","      ");
+               scrollTest(0,6,-2, "  2345","      ");
+       }
+       public void testCopyLineWithOffset() {
+               ITerminalTextData term=makeITerminalTextData();
+               String s=
+                       "111\n" +
+                       "222\n" +
+                       "333\n" +
+                       "444\n" +
+                       "555";
+               fill(term, s);
+               ITerminalTextData dest=makeITerminalTextData();
+               String sCopy=
+                       "aaa\n" +
+                       "bbb\n" +
+                       "ccc\n" +
+                       "ddd\n" +
+                       "eee";
+               fill(dest, sCopy);
+               copySelective(dest,term,1,0,new boolean []{true,false,false,true});
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEqualsTerm(
+                               "222\n" +
+                               "bbb\n" +
+                               "ccc\n" +
+                               "\00\00\00\n" +
+                               "eee", toMultiLineText(dest));
+
+               fill(dest, sCopy);
+               copySelective(dest,term,2,0,new boolean []{true,true});
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEqualsTerm(
+                               "333\n" +
+                               "444\n" +
+                               "ccc\n" +
+                               "ddd\n" +
+                               "eee", toMultiLineText(dest));
+
+               fill(dest, sCopy);
+               copySelective(dest,term,0,0,new boolean []{true,true,true,true,true});
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEqualsTerm(s, toMultiLineText(dest));
+
+               fill(dest, sCopy);
+               copySelective(dest,term,0,0,new boolean []{false,false,false,false,false});
+               assertEqualsTerm(s, toMultiLineText(term));
+               assertEqualsTerm(sCopy, toMultiLineText(dest));
+       }
+       public void testCopy() {
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(3, 1);
+               ITerminalTextData data=new TerminalTextData();
+               fillSimple(data,"abcd");
+               term.copy(data);
+       }
+
+       public void testWrappedLines() {
+               ITerminalTextData term=makeITerminalTextData();
+               term.setDimensions(4, 4);
+               for (int i=0; i<term.getHeight(); ++i)
+                       assertFalse(term.isWrappedLine(i));
+               term.setWrappedLine(0); // outside window
+               term.setWrappedLine(3);
+               assertFalse(term.isWrappedLine(0));
+               assertFalse(term.isWrappedLine(1));
+               assertFalse(term.isWrappedLine(2));
+               assertTrue(term.isWrappedLine(3));
+               term.cleanLine(3);
+               assertFalse(term.isWrappedLine(3));
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextTestHelper.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/model/TerminalTextTestHelper.java
new file mode 100644 (file)
index 0000000..b3f1067
--- /dev/null
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [168197] Fix Terminal for CDC-1.1/Foundation-1.1
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.model;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly;
+import org.eclipse.tm.terminal.model.Style;
+import org.eclipse.tm.terminal.model.StyleColor;
+
+public class TerminalTextTestHelper {
+       static public String toSimple(ITerminalTextDataReadOnly term) {
+               return toSimple(toMultiLineText(term));
+       }
+       static public String toMultiLineText(ITerminalTextDataReadOnly term) {
+               StringBuffer buff=new StringBuffer();
+               int width=term.getWidth();
+               for (int line = 0; line < term.getHeight(); line++) {
+                       if(line>0)
+                               buff.append("\n"); //$NON-NLS-1$
+                       for (int column = 0; column < width; column++) {
+                               buff.append(term.getChar(line, column));
+                       }
+               }
+               return buff.toString();
+       }
+       static public String toSimple(String str) {
+               //return str.replaceAll("\000", " ").replaceAll("\n", "");
+               // <J2ME CDC-1.1 Foundation-1.1 variant>
+               StringBuffer buf = new StringBuffer(str.length());
+               for (int i = 0; i < str.length(); i++) {
+                       char c = str.charAt(i);
+                       switch (c) {
+                       case '\000':
+                               buf.append(' ');
+                               break;
+                       case '\n':
+                               break;
+                       default:
+                               buf.append(c);
+                               break;
+                       }
+               }
+               return buf.toString();
+               // </J2ME CDC-1.1 Foundation-1.1 variant>
+       }
+       /**
+        * @param term
+        * @param s each character is one line
+        */
+       static public void fillSimple(ITerminalTextData term, String s) {
+               Style style=Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false, false, false);
+               term.setDimensions(s.length(), 1);
+               for (int i = 0; i < s.length(); i++) {
+                       char c=s.charAt(i);
+                       term.setChar(i, 0, c, style.setForground(StyleColor.getStyleColor(""+c)));
+               }
+       }
+       /**
+        * @param term
+        * @param s lines separated by \n. The terminal will automatically
+        * resized to fit the text.
+        */
+       static public void fill(ITerminalTextData term, String s) {
+               int width=0;
+               int len=0;
+               int height=0;
+               for (int i = 0; i < s.length(); i++) {
+                       char c=s.charAt(i);
+                       if(c=='\n') {
+                               width=Math.max(width,len);
+                               len=0;
+                       } else {
+                               if(len==0)
+                                       height++;
+                               len++;
+                       }
+               }
+               width=Math.max(width,len);
+               term.setDimensions(height, width);
+               fill(term,0,0,s);
+       }
+
+       static public void fill(ITerminalTextData term, int column, int line, String s) {
+               int xx=column;
+               int yy=line;
+               Style style=Style.getStyle(StyleColor.getStyleColor("fg"), StyleColor.getStyleColor("bg"), false, false, false, false);
+               for (int i = 0; i < s.length(); i++) {
+                       char c=s.charAt(i);
+                       if(c=='\n') {
+                               yy++;
+                               xx=column;
+                       } else {
+                               term.setChar(yy, xx, c, style.setForground(StyleColor.getStyleColor(""+c)));
+                               xx++;
+                       }
+               }
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/speedtest/SpeedTestConnection.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/speedtest/SpeedTestConnection.java
new file mode 100644 (file)
index 0000000..fbf9deb
--- /dev/null
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.speedtest;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+
+public class SpeedTestConnection extends Thread {
+       private static int fgNo;
+       private final ITerminalControl fControl;
+       private final InputStream fInputStream;
+       private final SpeedTestSettings fSettings;
+       protected SpeedTestConnection(InputStream inputStream, SpeedTestSettings settings,ITerminalControl control) {
+               super("SpeedTestConnection-"+fgNo++);
+               fControl = control;
+               fInputStream=inputStream;
+               fSettings=settings;
+       }
+       public void run() {
+               fControl.setState(TerminalState.CONNECTED);
+
+               try {
+                       readDataForever(fInputStream,fControl.getRemoteToTerminalOutputStream());
+               } catch (IOException e) {
+                       connectFailed(e.getMessage(),e.getMessage());
+               }
+               // when reading is done, we set the state to closed
+               fControl.setState(TerminalState.CLOSED);
+       }
+    private void connectFailed(String terminalText, String msg) {
+               Logger.log(terminalText);
+               fControl.displayTextInTerminal(terminalText);
+               fControl.setState(TerminalState.CLOSED);
+               fControl.setMsg(msg);
+       }
+       /**
+        * Read the data from the input file and display it in the terminal.
+        * @param in
+        * @throws IOException
+        */
+       private void readDataForever(InputStream in, OutputStream os) throws IOException {
+               long N=0;
+               long T=0;
+               long tDisplay=0;
+               int NCalls=0;
+               int bufferSize=fSettings.getBufferSize();
+               int throttle=fSettings.getThrottle();
+               // read the data
+               BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+               // read until the thread gets interrupted....
+               String info="";
+               int n=0;
+               byte[] crnl="\r\n".getBytes("UTF-8");
+               long t0=System.currentTimeMillis();
+               String line=null;
+               do {
+                       line=reader.readLine();
+
+                       // read some bytes
+                       if(line!=null) {
+                               os.write(line.getBytes("UTF-8"));
+                               os.write(crnl);
+                               n+=line.length();
+                       }
+                       // process at least this number of characters to update the UI
+                       if(line==null || n>bufferSize) {
+                               if(throttle>0)
+                                       sleep(throttle);
+                               // we assume we get ASCII UTF8 bytes
+                               long t=System.currentTimeMillis();
+                               T+=t-t0;
+                               N+=n;
+                               NCalls++;
+                               if(t-tDisplay>1000 && T>0) {
+                                       long rate=(1000*N)/T;
+                                       info=rate+" byte/s = "+rate*8+" baud "+"bytes/call="+N/NCalls;
+                                       info=rate+" byte/s with buffer size "+fSettings.getBufferSize();
+                                       setTitle(info);
+                                       tDisplay=System.currentTimeMillis();
+                               }
+                               n=0;
+                               t0=System.currentTimeMillis();
+                       }
+               } while(line!=null);
+       }
+       private void sleep(int ms) {
+               try {
+                       Thread.sleep(ms);
+               } catch (InterruptedException e) {
+                       Thread.currentThread().interrupt();
+               }
+       }
+       private void setTitle(final String title) {
+               Display.getDefault().asyncExec(new Runnable(){
+                       public void run() {
+                               fControl.setTerminalTitle(title);
+                       }});
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/speedtest/SpeedTestConnector.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/speedtest/SpeedTestConnector.java
new file mode 100644 (file)
index 0000000..a169f6a
--- /dev/null
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [225853][api] Provide more default functionality in TerminalConnectorImpl 
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.speedtest;
+
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.Logger;
+import org.eclipse.tm.internal.terminal.provisional.api.NullSettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
+
+public class SpeedTestConnector extends TerminalConnectorImpl {
+       final SpeedTestSettings fSettings=new SpeedTestSettings();
+       InputStream fInputStream;
+       OutputStream fOutputStream;
+       SpeedTestConnection fConnection;
+       public SpeedTestConnector() {
+       }
+       synchronized public void connect(ITerminalControl control) {
+               super.connect(control);
+               fControl.setState(TerminalState.CONNECTING);
+               String file=fSettings.getInputFile();
+               try {
+                       fInputStream=new BufferedInputStream(new FileInputStream(file));
+               } catch (FileNotFoundException e) {
+                       disconnect();
+                       fControl.setMsg(file+": "+e.getLocalizedMessage());
+                       return;
+               }
+               fOutputStream=System.out;
+               fControl.setTerminalTitle(fSettings.getInputFile());
+               fConnection=new SpeedTestConnection(fInputStream,fSettings,fControl);
+               fConnection.start();
+       }
+
+       synchronized public void doDisconnect() {
+               if(fConnection!=null){
+                       fConnection.interrupt();
+                       fConnection=null;
+               }
+               if (fInputStream != null) {
+                       try {
+                               fInputStream.close();
+                       } catch (Exception exception) {
+                               Logger.logException(exception);
+                       }
+               }
+               fInputStream=null;
+               if (fOutputStream != null) {
+                       try {
+                               fOutputStream.close();
+                       } catch (Exception exception) {
+                               Logger.logException(exception);
+                       }
+               }
+               fOutputStream=null;
+       }
+       synchronized public InputStream getInputStream() {
+               return fInputStream;
+       }
+
+       synchronized public OutputStream getTerminalToRemoteStream() {
+               return fOutputStream;
+       }
+
+       public String getSettingsSummary() {
+               return fSettings.getInputFile();
+       }
+
+       @Override
+       public void setDefaultSettings() {
+               fSettings.load(new NullSettingsStore());
+       }
+       
+       public void load(ISettingsStore store) {
+                fSettings.load(store);
+       }
+
+       public void save(ISettingsStore store) {
+               fSettings.save(store);
+       }
+
+       public void setTerminalSize(int newWidth, int newHeight) {
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/speedtest/SpeedTestSettings.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/speedtest/SpeedTestSettings.java
new file mode 100644 (file)
index 0000000..6b5f882
--- /dev/null
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.speedtest;
+
+
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+
+public class SpeedTestSettings {
+       String fInputFile="";
+       String fBufferSize="";
+       String fThrottle;
+       String getInputFile() {
+               return fInputFile;
+       }
+       public String getBufferSizeString() {
+               return getBufferSize()+"";
+       }
+       public void setBufferSizeString(String bufferSize) {
+               fBufferSize = bufferSize;
+       }
+       public int getBufferSize() {
+               try {
+                       return Integer.parseInt(fBufferSize);
+               } catch(RuntimeException e) {
+                       return 1024;
+               }
+       }
+       void setInputFile(String testFile) {
+               fInputFile = testFile;
+       }
+       public void load(ISettingsStore store) {
+               fInputFile=store.get("inputFile", "");
+               fBufferSize=store.get("bufferSize", "");
+               fThrottle=store.get("throttle", "0");
+       }
+       public void save(ISettingsStore store) {
+               store.put("inputFile", fInputFile);
+               store.put("bufferSize", fBufferSize);
+               store.put("throttle", fThrottle);
+       }
+       public String getThrottleString() {
+               return fThrottle;
+       }
+       public int getThrottle() {
+               try {
+                       return Integer.parseInt(fThrottle);
+               } catch(RuntimeException e) {
+                       return 0;
+               }
+       }
+       public void setThrottleString(String throttle) {
+               fThrottle = throttle;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/terminalcanvas/Main.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/terminalcanvas/Main.java
new file mode 100644 (file)
index 0000000..5e9f73d
--- /dev/null
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.terminalcanvas;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+public class Main {
+
+       /**
+        * @param args
+        */
+       public static void main(String[] args) {
+               Display display = new Display ();
+               Shell shell = new Shell (display);
+               shell.setLayout(new FillLayout());
+               new TerminalTextCanvas(shell,SWT.NONE);
+               shell.setSize (200, 150);
+               shell.open ();
+               while (!shell.isDisposed ()) {
+                       if (!display.readAndDispatch ()) display.sleep ();
+               }
+               display.dispose ();
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/terminalcanvas/Snippet48.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/terminalcanvas/Snippet48.java
new file mode 100644 (file)
index 0000000..a3d21af
--- /dev/null
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.terminalcanvas;
+
+/*
+ * Canvas example snippet: scroll an image (flicker free, no double buffering)
+ *
+ * For a list of all SWT example snippets see
+ * http://www.eclipse.org/swt/snippets/
+ */
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ScrollBar;
+import org.eclipse.swt.widgets.Shell;
+
+public class Snippet48 {
+
+public static void main (String [] args) {
+       Display display = new Display ();
+       Shell shell = new Shell (display);
+       shell.setLayout(new FillLayout());
+       Image originalImage = null;
+       FileDialog dialog = new FileDialog (shell, SWT.OPEN);
+       dialog.setText ("Open an image file or cancel");
+       String string = dialog.open ();
+       if (string != null) {
+               originalImage = new Image (display, string);
+       }
+       final Image image = originalImage;
+       final Point origin = new Point (0, 0);
+       final Canvas canvas = new Canvas (shell, SWT.NO_BACKGROUND |
+                       SWT.NO_REDRAW_RESIZE | SWT.V_SCROLL | SWT.H_SCROLL);
+       final ScrollBar hBar = canvas.getHorizontalBar ();
+       hBar.addListener (SWT.Selection, new Listener () {
+               public void handleEvent (Event e) {
+                       int hSelection = hBar.getSelection ();
+                       int destX = -hSelection - origin.x;
+                       Rectangle rect = image.getBounds ();
+                       canvas.scroll (destX, 0, 0, 0, rect.width, rect.height, false);
+                       origin.x = -hSelection;
+               }
+       });
+       final ScrollBar vBar = canvas.getVerticalBar ();
+       vBar.addListener (SWT.Selection, new Listener () {
+               public void handleEvent (Event e) {
+                       int vSelection = vBar.getSelection ();
+                       int destY = -vSelection - origin.y;
+                       Rectangle rect = image.getBounds ();
+                       canvas.scroll (0, destY, 0, 0, rect.width, rect.height, false);
+                       origin.y = -vSelection;
+               }
+       });
+       canvas.addListener (SWT.Resize,  new Listener () {
+               public void handleEvent (Event e) {
+                       Rectangle rect = image.getBounds ();
+                       Rectangle client = canvas.getClientArea ();
+                       hBar.setMaximum (rect.width);
+                       vBar.setMaximum (rect.height);
+                       hBar.setThumb (Math.min (rect.width, client.width));
+                       vBar.setThumb (Math.min (rect.height, client.height));
+                       int hPage = rect.width - client.width;
+                       int vPage = rect.height - client.height;
+                       int hSelection = hBar.getSelection ();
+                       int vSelection = vBar.getSelection ();
+                       if (hSelection >= hPage) {
+                               if (hPage <= 0) hSelection = 0;
+                               origin.x = -hSelection;
+                       }
+                       if (vSelection >= vPage) {
+                               if (vPage <= 0) vSelection = 0;
+                               origin.y = -vSelection;
+                       }
+                       canvas.redraw ();
+               }
+       });
+       canvas.addListener (SWT.Paint, new Listener () {
+               public void handleEvent (Event e) {
+                       GC gc = e.gc;
+                       gc.drawImage (image, origin.x, origin.y);
+                       Rectangle rect = image.getBounds ();
+                       Rectangle client = canvas.getClientArea ();
+                       int marginWidth = client.width - rect.width;
+                       if (marginWidth > 0) {
+                               gc.fillRectangle (rect.width, 0, marginWidth, client.height);
+                       }
+                       int marginHeight = client.height - rect.height;
+                       if (marginHeight > 0) {
+                               gc.fillRectangle (0, rect.height, client.width, marginHeight);
+                       }
+               }
+       });
+       shell.setSize (200, 150);
+       shell.open ();
+       while (!shell.isDisposed ()) {
+               if (!display.readAndDispatch ()) display.sleep ();
+       }
+       originalImage.dispose();
+       display.dispose ();
+}
+
+} 
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/terminalcanvas/TerminalTextCanvas.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/terminalcanvas/TerminalTextCanvas.java
new file mode 100644 (file)
index 0000000..a99fd90
--- /dev/null
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.terminalcanvas;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ScrollBar;
+
+public class TerminalTextCanvas extends Canvas {
+       Image image;
+       Point origin = new Point (0, 0);
+       public TerminalTextCanvas(Composite parent, int style) {
+               super(parent, SWT.NO_BACKGROUND |
+                               SWT.NO_REDRAW_RESIZE | SWT.V_SCROLL | SWT.H_SCROLL| style);
+               loadImage(parent);
+
+               final ScrollBar hBar = getHorizontalBar ();
+               hBar.addListener (SWT.Selection, new Listener () {
+                       public void handleEvent (Event e) {
+                               int hSelection = hBar.getSelection ();
+                               int destX = -hSelection - origin.x;
+                               Rectangle rect = image.getBounds ();
+                               scroll (destX, 0, 0, 0, rect.width, rect.height, false);
+                               origin.x = -hSelection;
+                       }
+               });
+               final ScrollBar vBar = getVerticalBar ();
+               vBar.addListener (SWT.Selection, new Listener () {
+                       public void handleEvent (Event e) {
+                               int vSelection = vBar.getSelection ();
+                               int destY = -vSelection - origin.y;
+                               Rectangle rect = image.getBounds ();
+                               scroll (0, destY, 0, 0, rect.width, rect.height, false);
+                               origin.y = -vSelection;
+                       }
+               });
+               addListener (SWT.Resize,  new Listener () {
+                       public void handleEvent (Event e) {
+                               Rectangle rect = image.getBounds ();
+                               Rectangle client = getClientArea ();
+                               hBar.setMaximum (rect.width);
+                               vBar.setMaximum (rect.height);
+                               hBar.setThumb (Math.min (rect.width, client.width));
+                               vBar.setThumb (Math.min (rect.height, client.height));
+                               int hPage = rect.width - client.width;
+                               int vPage = rect.height - client.height;
+                               int hSelection = hBar.getSelection ();
+                               int vSelection = vBar.getSelection ();
+                               if (hSelection >= hPage) {
+                                       if (hPage <= 0) hSelection = 0;
+                                       origin.x = -hSelection;
+                               }
+                               if (vSelection >= vPage) {
+                                       if (vPage <= 0) vSelection = 0;
+                                       origin.y = -vSelection;
+                               }
+                               redraw ();
+                       }
+               });
+               addListener (SWT.Paint, new Listener () {
+                       public void handleEvent (Event e) {
+                               GC gc = e.gc;
+                               System.out.println(gc.getClipping()+" "+origin);
+                               gc.drawImage (image, origin.x, origin.y);
+                               Rectangle rect = image.getBounds ();
+                               Rectangle client = getClientArea ();
+                               int marginWidth = client.width - rect.width;
+                               if (marginWidth > 0) {
+                                       gc.fillRectangle (rect.width, 0, marginWidth, client.height);
+                               }
+                               int marginHeight = client.height - rect.height;
+                               if (marginHeight > 0) {
+                                       gc.fillRectangle (0, rect.height, client.width, marginHeight);
+                               }
+                       }
+               });
+       }
+       private void loadImage(Composite parent) {
+               FileDialog dialog = new FileDialog (parent.getShell(), SWT.OPEN);
+               dialog.setText ("Open an image file or cancel");
+               String string = dialog.open ();
+               if (string != null) {
+                       image = new Image (getDisplay(), string);
+               }
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/terminalcanvas/VirtualCanvas.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/terminalcanvas/VirtualCanvas.java
new file mode 100644 (file)
index 0000000..bf0ba0f
--- /dev/null
@@ -0,0 +1,333 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.terminalcanvas;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ScrollBar;
+
+/**
+ * A <code>Canvas</code> showing a virtual object.
+ * Virtual: the extent of the total canvas.
+ * Screen: the visible client area in the screen.
+ */
+public abstract class VirtualCanvas extends Canvas {
+
+       private final Rectangle fVirtualBounds = new Rectangle(0,0,0,0);
+       private Rectangle fClientArea;
+       private GC fPaintGC=null;
+       public VirtualCanvas(Composite parent, int style) {
+               super(parent, style|SWT.NO_BACKGROUND|SWT.NO_REDRAW_RESIZE);
+               fPaintGC= new GC(this);
+               addListener(SWT.Paint, new Listener() {
+                       public void handleEvent(Event event) {
+                               paint(event.gc);
+                       }
+               });
+               addListener(SWT.Resize, new Listener() {
+                       public void handleEvent(Event event) {
+                               fClientArea=getClientArea();
+                               updateViewRectangle();
+                       }
+               });
+               getVerticalBar().addListener(SWT.Selection, new Listener() {
+                       public void handleEvent(Event e) {
+                               scrollY((ScrollBar)e.widget);
+                               postScrollEventHandling(e);
+
+                       }
+
+               });
+               getHorizontalBar().addListener(SWT.Selection, new Listener() {
+                       public void handleEvent(Event e) {
+                               scrollX((ScrollBar)e.widget);
+                               postScrollEventHandling(e);
+
+                       }
+               });
+               addDisposeListener(new DisposeListener(){
+                       public void widgetDisposed(DisposeEvent e) {
+                               if(fPaintGC!=null){
+                                       fPaintGC.dispose();
+                                       fPaintGC=null;
+                               }
+                       }
+                       
+               });
+       }
+       public void setAutoSelect(boolean on) {
+       }
+       public boolean hasAutoSelect() {
+               return false;
+       }
+       public void doAutoSelect() {
+       }
+       
+       /** HACK: run an event loop if the scrollbar is dragged...*/
+       private void postScrollEventHandling(Event e) {
+               if(true&&e.detail==SWT.DRAG) {
+                       // TODO check if this is always ok???
+                       // used to process runnables while scrolling
+                       // This fixes the update problems when scrolling!
+                       // see: https://bugs.eclipse.org/bugs/show_bug.cgi?id=47582#5
+                       // TODO investigate:
+                       // The alternative is to call redraw on the new visible area
+                       //        redraw(expose.x, expose.y, expose.width, expose.height, true);
+
+                       while (!getDisplay().isDisposed() && getDisplay().readAndDispatch()) {  
+                               // do nothing here...
+                       }
+               }
+       }
+       
+       protected void scrollX(ScrollBar hBar) {
+               int hSelection = hBar.getSelection ();
+               int destX = -hSelection - fVirtualBounds.x;
+               fVirtualBounds.x = -hSelection;
+               scrollSmart(destX, 0);
+               updateViewRectangle();
+       }
+       protected void scrollXDelta(int delta) {
+               getHorizontalBar().setSelection(-fVirtualBounds.x+delta);
+               scrollX(getHorizontalBar());
+       }
+
+       protected void scrollY(ScrollBar vBar) {
+               int vSelection = vBar.getSelection ();
+               int destY = -vSelection - fVirtualBounds.y;
+               fVirtualBounds.y = -vSelection;
+               scrollSmart(0,destY);
+               updateViewRectangle();
+               
+       }
+       protected void scrollYDelta(int delta) {
+               getVerticalBar().setSelection(-fVirtualBounds.y+delta);
+               scrollY(getVerticalBar());
+       }
+
+
+       private void scrollSmart(int deltaX, int deltaY) {
+               Rectangle rect = getBounds();
+               scroll (deltaX, deltaY, 0, 0, rect.width, rect.height, false);
+       }
+
+       protected void revealRect(Rectangle rect) {
+               Rectangle visibleRect=getScreenRectInVirtualSpace();
+               // scroll the X part
+               int deltaX=0;
+               if(rect.x<visibleRect.x) {
+                       deltaX=rect.x-visibleRect.x;
+               } else if(visibleRect.x+visibleRect.width<rect.x+rect.width){
+                       deltaX=(rect.x+rect.width)-(visibleRect.x+visibleRect.width);
+               }
+               if(deltaX!=0) {
+                       getHorizontalBar().setSelection(-fVirtualBounds.x+deltaX);
+                       scrollX(getHorizontalBar());
+               }
+       
+               // scroll the Y part
+               int deltaY=0;
+               if(rect.y<visibleRect.y){
+                       deltaY=rect.y-visibleRect.y;
+               } else if(visibleRect.y+visibleRect.height<rect.y+rect.height){
+                       deltaY=(rect.y+rect.height)-(visibleRect.y+visibleRect.height);
+                       
+               }
+               if(deltaY!=0) {
+                       getVerticalBar().setSelection(-fVirtualBounds.y+deltaY);
+                       scrollY(getVerticalBar());
+               }
+       }
+
+       protected void repaint(Rectangle r) {
+               if (fPaintGC!=null) {
+                       if(inClipping(r,fClientArea)) {
+                               fPaintGC.setClipping(r);
+                               paint(fPaintGC);
+                       }
+               }
+       }
+
+       /**
+        * @param gc
+        */
+       abstract protected void paint(GC gc);
+       protected Color getBackgroundCanvasColor() {
+               return getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND);
+       }
+       protected void paintUnoccupiedSpace(GC gc, Rectangle clipping) {
+               int width=fVirtualBounds.width;
+               int height=fVirtualBounds.height;
+               int marginWidth = (clipping.x+clipping.width) - width;
+               int marginHeight = (clipping.y+clipping.height) - height;
+               if(marginWidth>0||marginHeight>0){
+                       Color bg=getBackground();
+                       gc.setBackground(getBackgroundCanvasColor());
+                       if (marginWidth > 0) {
+                               gc.fillRectangle (width, clipping.y, marginWidth, clipping.height);
+                       }
+                       if (marginHeight > 0) {
+                               gc.fillRectangle (clipping.x, height, clipping.width, marginHeight);
+                       }
+                       gc.setBackground(bg);
+               }
+       }
+       /**
+        * @private
+        */
+       protected boolean inClipping(Rectangle clipping, Rectangle r) {
+               // TODO check if this is OK in all cases (the <=!)
+               // 
+               if(r.x+r.width<=clipping.x)
+                       return false;
+               if(clipping.x+clipping.width<=r.x)
+                       return false;
+               if(r.y+r.height<=clipping.y)
+                       return false;
+               if(clipping.y+clipping.height<=r.y)
+                       return false;
+               
+               return true;
+       }
+       /**
+        * @return the screen rect in virtual space (starting with (0,0))
+        * of the visible screen. (x,y>=0)
+        */
+       protected Rectangle getScreenRectInVirtualSpace() {
+               return new Rectangle(fClientArea.x-fVirtualBounds.x,fClientArea.y-fVirtualBounds.y,fClientArea.width,fClientArea.height);
+       }
+       /**
+        * @return the rect in virtual space (starting with (0,0))
+        * of the visible screen. (x,y>=0)
+        */
+       protected Rectangle getRectInVirtualSpace(Rectangle r) {
+               return new Rectangle(r.x-fVirtualBounds.x,r.y-fVirtualBounds.y,r.width,r.height);
+       }
+       
+       /**
+        * Sets the extend of the virtual dieplay ares
+        * @param width
+        * @param height
+        */
+       protected void setVirtualExtend(int width, int height) {
+               fVirtualBounds.width=width;
+               fVirtualBounds.height=height;
+               updateScrollbars();
+               updateViewRectangle();
+       }
+       /**
+        * sets the scrolling origin. Also sets the scrollbars.
+        * Does NOT redraw!
+        * Use negative values (move the virtual origin to the top left
+        * to see something in the screen (which is located at (0,0))
+        * @param x
+        * @param y
+        */
+       protected void setVirtualOrigin(int x, int y) {
+               fVirtualBounds.x=x;
+               fVirtualBounds.y=y;
+               getHorizontalBar().setSelection(x);
+               getVerticalBar().setSelection(y);
+               updateViewRectangle();
+       }
+
+       /**
+        * @param x
+        * @return the virtual coordinate in scree space
+        */
+       protected int virtualXtoScreen(int x) {
+               return x+fVirtualBounds.x;
+       }
+       protected int virtualYtoScreen(int y) {
+               return y+fVirtualBounds.y;
+       }
+       protected int screenXtoVirtual(int x) {
+               return x-fVirtualBounds.x;
+       }
+       protected int screenYtoVirtual(int y) {
+               return y-fVirtualBounds.y;
+       }
+       /** called when the viewed part is changing */
+       private final Rectangle fViewRectangle=new Rectangle(0,0,0,0);
+       void updateViewRectangle() {
+               if(
+                               fViewRectangle.x==-fVirtualBounds.x 
+                               && fViewRectangle.y==-fVirtualBounds.y
+                               && fViewRectangle.width==fClientArea.width
+                               && fViewRectangle.height==fClientArea.height
+                       )
+                       return;
+               fViewRectangle.x=-fVirtualBounds.x;
+               fViewRectangle.y=-fVirtualBounds.y;
+               fViewRectangle.width=fClientArea.width;
+               fViewRectangle.height=fClientArea.height;
+               viewRectangleChanged(fViewRectangle.x,fViewRectangle.y,fViewRectangle.width,fViewRectangle.height);
+       }
+       protected Rectangle getViewRectangle() {
+               return fViewRectangle;
+       }
+       /**
+        * Called when the viewed part has changed.
+        * Override when you need this information....
+        * Is only called if the values change!
+        * @param x visible in virtual space
+        * @param y visible in virtual space
+        * @param width
+        * @param height
+        */
+       protected void viewRectangleChanged(int x, int y, int width, int height) {
+//             System.out.println(x+" "+y+" "+width+" "+height);
+       }
+       /**
+        * @private
+        */
+       private void updateScrollbars() {
+               Point size= getSize();
+               Rectangle clientArea= getClientArea();
+       
+               ScrollBar horizontal= getHorizontalBar();
+               if (fVirtualBounds.width <= clientArea.width) {
+                       // TODO IMPORTANT in ScrollBar.setVisible comment out the line
+                       // that checks 'isvisible' and returns (at the beginning)
+                       horizontal.setVisible(false);
+                       horizontal.setSelection(0);
+               } else {
+                       horizontal.setPageIncrement(clientArea.width - horizontal.getIncrement());
+                       int max= fVirtualBounds.width + (size.x - clientArea.width);
+                       horizontal.setMaximum(max);
+                       horizontal.setThumb(size.x > max ? max : size.x);
+                       horizontal.setVisible(true);
+               }
+       
+               ScrollBar vertical= getVerticalBar();
+               if (fVirtualBounds.height <= clientArea.height) {
+                       vertical.setVisible(false);
+                       vertical.setSelection(0);
+               } else {
+                       vertical.setPageIncrement(clientArea.height - vertical.getIncrement());
+                       int max= fVirtualBounds.height + (size.y - clientArea.height);
+                       vertical.setMaximum(max);
+                       vertical.setThumb(size.y > max ? max : size.y);
+                       vertical.setVisible(true);
+               }
+       }
+}
+
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/AbstractLineOrientedDataSource.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/AbstractLineOrientedDataSource.java
new file mode 100644 (file)
index 0000000..c23ee5d
--- /dev/null
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.ui;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.Style;
+
+/**
+ * Adds line by line
+ *
+ */
+abstract class AbstractLineOrientedDataSource implements IDataSource {
+       abstract public char[] dataSource();
+       abstract public Style getStyle();
+
+       abstract public void next();
+
+       public int step(ITerminalTextData terminal) {
+               next();
+               char[] chars=dataSource();
+               Style style= getStyle();
+               int len;
+               // keep the synchronized block short!
+               synchronized (terminal) {
+                       terminal.addLine();
+                       len=Math.min(terminal.getWidth(),chars.length);
+                       int line=terminal.getHeight()-1;
+                       terminal.setChars(line, 0, chars, 0, len, style);
+                       terminal.setCursorLine(line);
+                       terminal.setCursorColumn(len-1);
+               }
+               return len;
+       }
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/DataReader.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/DataReader.java
new file mode 100644 (file)
index 0000000..ae1bd5c
--- /dev/null
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.ui;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+
+class DataReader implements Runnable {
+       final Thread fThread;
+       final IDataSource fDataSource;
+       final ITerminalTextData fTerminal;
+       volatile boolean fStart;
+       volatile boolean fStop;
+       volatile int fThrottleTime;
+       final IStatus fStatus;
+       final String fName;
+       DataReader(String name, ITerminalTextData terminal, IDataSource dataSource, IStatus status) {
+               fStatus=status;
+               fName=name;
+               fTerminal=terminal;
+               fDataSource=dataSource;
+               fThread=new Thread(this,name);
+               fThread.setDaemon(true);
+               fThread.start();
+       }
+       public void run() {
+               long t0=System.currentTimeMillis()-1;
+               long c=0;
+               int lines=0;
+               while(!Thread.interrupted()) {
+                       while(!fStart || fStop) {
+                               sleep(1);
+                       }
+                       if(fThrottleTime>0)
+                               sleep(fThrottleTime);
+                       // synchronize because we have to be sure the size does not change while
+                       // we add lines
+                       int len=fDataSource.step(fTerminal);
+                       // keep the synchronized block short!
+                       c+=len;
+                       lines++;
+                       if((fThrottleTime>0 || (lines%100==0))&&(System.currentTimeMillis()-t0)>1000) {
+                               long t=System.currentTimeMillis()-t0;
+                               final String s=(c*1000)/(t*1024)+"kb/s " + (lines*1000)/t+"lines/sec "+(c*1000*8)/t+" bits/s ";
+                               fStatus.setStatus(s);
+                               lines=0;
+                               t0=System.currentTimeMillis();
+                               c=0;
+                       }
+               }
+       }
+       public int getThrottleTime() {
+               return fThrottleTime;
+       }
+       public void setThrottleTime(int throttleTime) {
+               fThrottleTime = throttleTime;
+       }
+       private void sleep(int ms) {
+               try {
+                       Thread.sleep(ms);
+               } catch (InterruptedException e) {
+                       Thread.currentThread().interrupt();
+               }
+       }
+       public boolean isStart() {
+               return fStart;
+       }
+       public void setStart(boolean start) {
+               fStart = start;
+       }
+       public String getName() {
+               return fName;
+       }
+       public boolean isStop() {
+               return fStop;
+       }
+       public void setStop(boolean stop) {
+               fStop = stop;
+       }
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/FastDataSource.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/FastDataSource.java
new file mode 100644 (file)
index 0000000..fad8203
--- /dev/null
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.ui;
+
+import org.eclipse.tm.terminal.model.Style;
+
+final class FastDataSource extends AbstractLineOrientedDataSource {
+       char lines[][]=new char[][]{
+                       "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 ".toCharArray(),
+                       "abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi abcdefghi ".toCharArray(),
+       };
+
+
+       int pos;
+
+       public char[] dataSource() {
+               return lines[pos%lines.length];
+       }
+
+       public Style getStyle() {
+               return null;
+       }
+
+       public void next() {
+               pos++;
+       }
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/FileDataSource.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/FileDataSource.java
new file mode 100644 (file)
index 0000000..c981159
--- /dev/null
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.ui;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+
+import org.eclipse.tm.terminal.model.Style;
+import org.eclipse.tm.terminal.model.StyleColor;
+
+/**
+ * Reads the file in an infinite loop.
+ * Makes lines containing 'x' bold.
+ *
+ */
+final class FileDataSource extends AbstractLineOrientedDataSource {
+       private final String fFile;
+
+       BufferedReader reader;
+
+       String line;
+
+       Style style;
+
+       Style styleNormal=Style.getStyle(StyleColor.getStyleColor("black"),StyleColor.getStyleColor("white"));
+
+       Style styleBold=styleNormal.setBold(true);
+
+       FileDataSource(String file) {
+               fFile = file;
+       }
+
+       public char[] dataSource() {
+               return line.toCharArray();
+       }
+
+       public Style getStyle() {
+               return style;
+       }
+
+       public void next() {
+               try {
+                       if(reader==null)
+                               reader = new BufferedReader(new FileReader(fFile));
+                       line=reader.readLine();
+                       if(line==null) {
+                               reader.close();
+                               reader=null;
+                               // reopen the file
+                               next();
+                               return;
+                       }
+                       if(line.lastIndexOf('x')>0)
+                               style=styleBold;
+                       else
+                               style=styleNormal;
+               } catch (IOException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+
+       }
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/IDataSource.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/IDataSource.java
new file mode 100644 (file)
index 0000000..dd2edbf
--- /dev/null
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.ui;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+
+interface IDataSource {
+       /**
+        * @param terminal
+        * @return number of characters changed
+        */
+       int step(ITerminalTextData terminal);
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/IStatus.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/IStatus.java
new file mode 100644 (file)
index 0000000..ffd8b37
--- /dev/null
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.ui;
+
+public interface IStatus {
+       void setStatus(String message);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/LineCountingDataSource.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/LineCountingDataSource.java
new file mode 100644 (file)
index 0000000..685cd4e
--- /dev/null
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.ui;
+
+import org.eclipse.tm.terminal.model.Style;
+import org.eclipse.tm.terminal.model.StyleColor;
+
+final class LineCountingDataSource extends AbstractLineOrientedDataSource {
+       Style styleNormal=Style.getStyle(StyleColor.getStyleColor("black"),StyleColor.getStyleColor("red"));
+
+       Style styles[]=new Style[] {
+                       styleNormal,
+                       styleNormal.setBold(true),
+                       styleNormal.setForground("blue"),
+                       styleNormal.setForground("yellow"),
+                       styleNormal.setBold(true).setUnderline(true),
+                       styleNormal.setReverse(true),
+                       styleNormal.setReverse(true).setBold(true),
+                       styleNormal.setReverse(true).setUnderline(true)
+       };
+
+       int pos;
+
+       public char[] dataSource() {
+               return (pos+" 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789").toCharArray();
+       }
+
+       public Style getStyle() {
+               return styles[pos%styles.length];
+       }
+
+       public void next() {
+               pos++;
+       }
+}
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/RandomDataSource.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/RandomDataSource.java
new file mode 100644 (file)
index 0000000..b5268b4
--- /dev/null
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.ui;
+
+import java.util.Random;
+
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.Style;
+import org.eclipse.tm.terminal.model.StyleColor;
+
+public class RandomDataSource implements IDataSource {
+       Random fRandom=new Random();
+       Style styleNormal=Style.getStyle(StyleColor.getStyleColor("black"),StyleColor.getStyleColor("green"));
+       Style styles[]=new Style[] {
+                       styleNormal,
+                       styleNormal.setBold(true),
+                       styleNormal.setForground("red"),
+                       styleNormal.setForground("yellow"),
+                       styleNormal.setBold(true).setUnderline(true),
+                       styleNormal.setReverse(true),
+                       styleNormal.setReverse(true).setBold(true),
+                       styleNormal.setReverse(true).setUnderline(true)
+       };
+
+       public int step(ITerminalTextData terminal) {
+               int N=fRandom.nextInt(1000);
+               int h=terminal.getHeight();
+               int w=terminal.getWidth();
+               synchronized (terminal) {
+                       for (int i = 0; i < N; i++) {
+                               int line=fRandom.nextInt(h);
+                               int col=fRandom.nextInt(w);
+                               char c=(char)('A'+fRandom.nextInt('z'-'A'));
+                               Style style=styles[fRandom.nextInt(styles.length)];
+                               terminal.setChar(line, col, c, style);
+                       }
+               }
+               return N;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/TerminalTextUITest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/TerminalTextUITest.java
new file mode 100644 (file)
index 0000000..c608811
--- /dev/null
@@ -0,0 +1,253 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.ui;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowData;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.tm.internal.terminal.textcanvas.ITextCanvasModel;
+import org.eclipse.tm.internal.terminal.textcanvas.PollingTextCanvasModel;
+import org.eclipse.tm.internal.terminal.textcanvas.TextCanvas;
+import org.eclipse.tm.internal.terminal.textcanvas.TextLineRenderer;
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+import org.eclipse.tm.terminal.model.ITerminalTextDataSnapshot;
+import org.eclipse.tm.terminal.model.TerminalTextDataFactory;
+
+/**
+ * adjust columns when table gets resized....
+ * 
+ */
+public class TerminalTextUITest {
+       static TextCanvas fgTextCanvas;
+       static ITextCanvasModel fgModel;
+       static ITerminalTextData fTerminalModel;
+       static Label fStatusLabel;
+       static volatile int fHeight;
+       static volatile int fWidth;
+       static DataReader fDataReader;
+       static List fDataReaders=new ArrayList();
+       private static Text heightText;
+       static class Status implements IStatus {
+               public void setStatus(final String s) {
+                       if(!fStatusLabel.isDisposed())
+                               Display.getDefault().asyncExec(new Runnable(){
+                                       public void run() {
+                                               if(!fStatusLabel.isDisposed())
+                                                       fStatusLabel.setText(s);
+                                       }});
+               }
+               
+       }
+       public static void main(String[] args) {
+               Display display = new Display();
+               Shell shell = new Shell(display);
+               shell.setLayout(new GridLayout());
+               Composite composite=new Composite(shell, SWT.NONE);
+               composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               RowLayout layout = new RowLayout(SWT.HORIZONTAL);
+               layout.wrap = true;
+               layout.fill = false;
+               fTerminalModel=TerminalTextDataFactory.makeTerminalTextData();
+               fHeight=24;
+               fWidth=80;
+               fTerminalModel.setDimensions(fHeight, fWidth);
+               fTerminalModel.setMaxHeight(fHeight);
+               ITerminalTextDataSnapshot snapshot=fTerminalModel.makeSnapshot();
+               // TODO how to get the initial size correctly!
+               snapshot.updateSnapshot(false);
+               fgModel=new PollingTextCanvasModel(snapshot);
+               fgTextCanvas=new TextCanvas(shell,fgModel, SWT.NONE,new TextLineRenderer(fgTextCanvas,fgModel));
+               fgTextCanvas.setLayoutData(new GridData(GridData.FILL_BOTH));
+               
+
+               composite.setLayout(layout);
+               addAutorevealCursorButton(composite);
+               Text maxHeightText = addMaxHeightInput(composite);
+               addHeightInput(composite, maxHeightText);
+               addWidthText(composite);
+               Text throttleText = addThrottleText(composite);
+               
+               IStatus status=new Status();
+               DataReader reader=new DataReader("Line Count",fTerminalModel,new LineCountingDataSource(),status);
+               addDataReader(composite, reader);
+               reader=new DataReader("Fast",fTerminalModel,new FastDataSource(),status);
+               addDataReader(composite, reader);
+               reader=new DataReader("Random",fTerminalModel,new RandomDataSource(),status);
+               addDataReader(composite, reader);
+               for (int i = 0; i < args.length; i++) {
+                       File file=new File(args[i]);
+                       reader=new DataReader(file.getName(),fTerminalModel,new VT100DataSource(args[i]),status);
+                       addDataReader(composite, reader);
+               }
+               addStopAllButton(composite, reader);
+               
+               fStatusLabel=new Label(shell,SWT.NONE);
+               fStatusLabel.setLayoutData(new GridData(250,15));
+               throttleText.setText("100");
+               setThrottleForAll(100);
+
+               if(args.length==0)
+                       addLabel(composite, "[Files can be added via commandline]");
+               shell.setSize(600,300);
+               shell.open();
+               while (!shell.isDisposed()) {
+                       if (!display.readAndDispatch())
+                               display.sleep();
+               }
+               display.dispose();
+       }
+       private static Text addMaxHeightInput(Composite composite) {
+               addLabel(composite, "maxHeight:");
+               final Text maxHeightText=new Text(composite,SWT.BORDER);
+               setLayoutData(maxHeightText,30);
+               maxHeightText.addModifyListener(new ModifyListener(){
+                       public void modifyText(ModifyEvent e) {
+                               synchronized (fTerminalModel) {
+                                       int height=textToInt(maxHeightText);
+                                       if(height<1)
+                                               return;
+                                       if(fTerminalModel.getHeight()>height) {
+                                               fTerminalModel.scroll(0, fTerminalModel.getHeight(), height-fTerminalModel.getHeight());
+                                               fTerminalModel.setDimensions(height,fTerminalModel.getWidth());
+                                               heightText.setText(height+"");
+                                       }
+                                       fTerminalModel.setMaxHeight(height);
+                               }
+                       }
+               });
+               maxHeightText.setText(fHeight+"");
+               return maxHeightText;
+       }
+       private static void addHeightInput(Composite composite, final Text maxHeightText) {
+               addLabel(composite,"heigth:");
+               heightText=new Text(composite,SWT.BORDER);
+               setLayoutData(heightText,30);
+               heightText.addModifyListener(new ModifyListener(){
+                       public void modifyText(ModifyEvent e) {
+                               synchronized (fTerminalModel) {
+                                       int height=textToInt(heightText);
+                                       if(height<1)
+                                               return;
+                                       maxHeightText.setText(""+height);
+                                       fTerminalModel.setDimensions(height,fTerminalModel.getWidth());
+                                       fTerminalModel.setMaxHeight(height);
+                               }
+                       }
+               });
+               heightText.setText(fHeight+"");
+       }
+       private static Text addWidthText(Composite composite) {
+               addLabel(composite,"width:");
+               final Text widthText=new Text(composite,SWT.BORDER);
+               setLayoutData(widthText,30);
+               widthText.addModifyListener(new ModifyListener(){
+                       public void modifyText(ModifyEvent e) {
+                               synchronized (fTerminalModel) {
+                                       int width=textToInt(widthText);
+                                       if(width>1)
+                                               fTerminalModel.setDimensions(fTerminalModel.getHeight(), width);
+                               }
+                       }
+               });
+               widthText.setText(fWidth+"");
+               return widthText;
+       }
+       private static Text addThrottleText(Composite composite) {
+               addLabel(composite,"throttle:");
+               final Text throttleText=new Text(composite,SWT.BORDER);
+               setLayoutData(throttleText,30);
+               throttleText.addModifyListener(new ModifyListener(){
+                       public void modifyText(ModifyEvent e) {
+                               synchronized (fTerminalModel) {
+                                       int throttle=textToInt(throttleText);
+                                       setThrottleForAll(throttle);
+                               }
+                       }});
+               return throttleText;
+       }
+       private static void addStopAllButton(Composite composite, DataReader reader) {
+               final Button stopAllButton=new Button(composite,SWT.CHECK);
+               stopAllButton.setText("Stop ALL");
+               stopAllButton.addSelectionListener(new SelectionAdapter(){
+
+                       public void widgetSelected(SelectionEvent e) {
+                               boolean stop=stopAllButton.getSelection();
+                               for (Iterator iterator = fDataReaders.iterator(); iterator.hasNext();) {
+                                       DataReader reader = (DataReader) iterator.next();
+                                       reader.setStop(stop);
+
+                       }}});
+               stopAllButton.setSelection(reader.isStart());
+       }
+       private static void addAutorevealCursorButton(Composite composite) {
+               final Button button=new Button(composite,SWT.CHECK);
+               button.setText("ScrollLock");
+               button.addSelectionListener(new SelectionAdapter(){
+                       public void widgetSelected(SelectionEvent e) {
+                               boolean scrollLock=button.getSelection();
+                               fgTextCanvas.setScrollLock(scrollLock);
+                       }
+               });
+               button.setSelection(fgTextCanvas.isScrollLock());
+       }
+       private static void addLabel(Composite composite,String message) {
+               Label label;
+               label=new Label(composite, SWT.NONE);
+               label.setText(message);
+       }
+       private static void addDataReader(Composite composite, final DataReader reader) {
+               fDataReaders.add(reader);
+               final Button button=new Button(composite,SWT.CHECK);
+               button.setText(reader.getName());
+               button.addSelectionListener(new SelectionAdapter(){
+
+                       public void widgetSelected(SelectionEvent e) {
+                               reader.setStart(button.getSelection());
+                       }});
+               button.setSelection(reader.isStart());
+               
+       }
+       static private void setThrottleForAll(int throttle) {
+               for (Iterator iterator = fDataReaders.iterator(); iterator.hasNext();) {
+                       DataReader reader = (DataReader) iterator.next();
+                       reader.setThrottleTime(throttle);
+               }
+       }
+       static void setLayoutData(Control c,int width) {
+               c.setLayoutData(new RowData(width,-1));
+       }
+       static int textToInt(Text text) {
+               try {
+                       return Integer.valueOf(text.getText()).intValue();
+               } catch (Exception ex) {
+                       return 0;
+               }
+       }
+}
+
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/VT100DataSource.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/test/ui/VT100DataSource.java
new file mode 100644 (file)
index 0000000..5fc2628
--- /dev/null
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2015 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ * Martin Oberhuber (Wind River) - [204796] Terminal should allow setting the encoding to use
+ * Anton Leherbauer (Wind River) - [458398] Add support for normal/application cursor keys mode
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.test.ui;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.UnsupportedEncodingException;
+
+import org.eclipse.tm.internal.terminal.control.impl.ITerminalControlForText;
+import org.eclipse.tm.internal.terminal.emulator.VT100Emulator;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.model.ITerminalTextData;
+
+/**
+ * Reads the file in an infinite loop.
+ * Makes lines containing 'x' bold.
+ *
+ */
+final class VT100DataSource implements IDataSource {
+       VT100Emulator fEmulator;
+       volatile int fAvailable;
+       volatile int fRead;
+       private final String fFile;
+
+       VT100DataSource(String file) {
+               fFile=file;
+       }
+       class InfiniteFileInputStream extends InputStream {
+               public InfiniteFileInputStream() {
+                       try {
+                               fInputStream=new FileInputStream(fFile);
+                       } catch (FileNotFoundException e) {
+                               // TODO Auto-generated catch block
+                               e.printStackTrace();
+                       }
+               }
+               public int available() throws IOException {
+                       return fAvailable;
+               }
+               private InputStream fInputStream;
+               public int read() throws IOException {
+                       throw new IOException();
+               }
+               public int read(byte[] b, int off, int len) throws IOException {
+                       while(fAvailable==0) {
+                               try {
+                                       Thread.sleep(1);
+                               } catch (InterruptedException e) {
+                                       Thread.currentThread().interrupt();
+                               }
+                       }
+                       len=fAvailable;
+                       int n=fInputStream.read(b, off, len);
+                       if(n<=0) {
+                               fInputStream.close();
+                               fInputStream=new FileInputStream(fFile);
+                               n=fInputStream.read(b, off, len);
+                       }
+                       fAvailable-=n;
+                       return n;
+               }
+
+       }
+       void init(ITerminalTextData terminal) {
+               final Reader reader;
+               try {
+                       reader = new InputStreamReader(new InfiniteFileInputStream(), "ISO-8859-1"); //$NON-NLS-1$
+               } catch (UnsupportedEncodingException e) {
+                       throw new RuntimeException(e);
+               }
+               fEmulator=new VT100Emulator(terminal,new ITerminalControlForText() {
+
+                       public void disconnectTerminal() {
+                               // TODO Auto-generated method stub
+
+                       }
+
+                       public OutputStream getOutputStream() {
+                               return new ByteArrayOutputStream();
+                       }
+
+                       public TerminalState getState() {
+                               return TerminalState.CONNECTED;
+                       }
+
+                       public ITerminalConnector getTerminalConnector() {
+                               return null;
+                       }
+
+                       public void setState(TerminalState state) {
+                       }
+
+                       public void setTerminalTitle(String title) {
+                       }
+
+                       public void enableApplicationCursorKeys(boolean enable) {
+                       }
+               }, reader);
+       }
+       public int step(ITerminalTextData terminal) {
+               synchronized(terminal) {
+                       if(fEmulator==null) {
+                               init(terminal);
+//                             fEmulator.setDimensions(48, 132);
+                               fEmulator.setDimensions(24, 80);
+                               fEmulator.setCrAfterNewLine(true);
+
+                       }
+                       fAvailable=80;
+                       fEmulator.processText();
+               }
+               return 80;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/textcanvas/PipedInputStreamPerformanceTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/textcanvas/PipedInputStreamPerformanceTest.java
new file mode 100644 (file)
index 0000000..3b68ac6
--- /dev/null
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.textcanvas;
+
+import java.io.OutputStream;
+
+public class PipedInputStreamPerformanceTest {
+
+       /**
+        * @param args
+        * @throws InterruptedException 
+        */
+       public static void main(String[] args) throws InterruptedException {
+               runPerformanceTest();
+               runPerformanceTest();
+       }
+
+       private static void runPerformanceTest() throws InterruptedException {
+               PipedInputStream in=new PipedInputStream(1024);
+               OutputStream out=in.getOutputStream();
+               PipedStreamTest.runPipe("",in, out,100);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/textcanvas/PipedStreamTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/internal/terminal/textcanvas/PipedStreamTest.java
new file mode 100644 (file)
index 0000000..e1968db
--- /dev/null
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.internal.terminal.textcanvas;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+
+class PipedStreamTest {
+       static class ReadThread extends Thread implements Runnable {
+
+               InputStream pi = null;
+
+               OutputStream po = null;
+
+               ReadThread(String process, InputStream pi, OutputStream po) {
+                       this.pi = pi;
+                       this.po = po;
+                       setDaemon(true);
+               }
+
+               public void run() {
+                       byte[] buffer = new byte[2048];
+                       int bytes_read;
+                       try {
+                               for (;;) {
+                                       bytes_read = pi.read(buffer);
+                                       if (bytes_read == -1) {
+                                               po.close();
+                                               pi.close();
+                                               return;
+                                       }
+                                       po.write(buffer, 0, bytes_read);
+                               }
+                       } catch (Exception e) {
+                               e.printStackTrace();
+                       }
+               }
+
+       }
+       static class FakeInputStream extends InputStream {
+               int N;
+               FakeInputStream(int n) {
+                       N=n;
+               }
+               public int read(byte[] b, int off, int len) throws IOException {
+                       if(N==0)
+                               return -1;
+                       int n=Math.min(len,N);
+                       for (int i = off; i < off+n; i++) {
+                               b[i]='x';
+                       }
+                       N-=n;
+                       return n;
+               }
+               public int read() throws IOException {
+                       throw new UnsupportedOperationException();
+               }
+               /* 
+                * available has to be implemented!
+                */
+               public int available() throws IOException {
+                       return N;
+               }
+       }
+       static class FakeOutputStream extends OutputStream {
+               long N;
+               public void write(int b) throws IOException {
+                       throw new UnsupportedOperationException();
+               }
+               public void write(byte[] b, int off, int len) throws IOException {
+                       N+=len;
+               }
+       }
+       public static void main(String[] args) throws IOException, InterruptedException {
+               while(true) {
+                       runSunTest();
+                       runMyTest();
+               }
+       }
+       private static void runSunTest() throws IOException, InterruptedException {
+               java.io.PipedInputStream in = new java.io.PipedInputStream();
+               OutputStream out = new java.io.PipedOutputStream(in);
+               runPipe("Sun ",in, out,10);
+       }
+       private static void runMyTest() throws IOException, InterruptedException {
+               PipedInputStream in=new PipedInputStream(4*1024);
+               OutputStream out=in.getOutputStream();
+               runPipe("My  ",in, out,99);
+       }
+       public static void runPipe(String what,InputStream writeIn, OutputStream readOut,int N) throws InterruptedException {
+               FakeInputStream in=new FakeInputStream(N*1000*1000);
+               FakeOutputStream out=new FakeOutputStream();
+               ReadThread rt = new ReadThread("reader", in , readOut);
+               ReadThread wt = new ReadThread("writer", writeIn, out);
+               long t0=System.currentTimeMillis();
+               rt.start();
+               wt.start();
+               wt.join();
+               long t=System.currentTimeMillis();
+               long n=out.N;
+               System.out.println(what+n + " byte in " +(t-t0)+" ms -> "+(1000*n)/((t-t0+1)*1024)+" kb/sec");
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/model/AllTests.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/model/AllTests.java
new file mode 100644 (file)
index 0000000..d8aa16a
--- /dev/null
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Martin Oberhuber (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.model;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Public Terminal Model test cases. 
+ * Runs in internal model package to allow access to default visible items.
+ */
+public class AllTests extends TestCase {
+       public AllTests() {
+               super(null);
+       }
+
+       public AllTests(String name) {
+               super(name);
+       }
+
+       public static Test suite() {
+               TestSuite suite = new TestSuite(AllTests.class.getName());
+               suite.addTestSuite(StyleColorTest.class);
+               suite.addTestSuite(StyleTest.class);
+               return suite;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/model/StyleColorTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/model/StyleColorTest.java
new file mode 100644 (file)
index 0000000..b7672bf
--- /dev/null
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.model;
+
+import junit.framework.TestCase;
+
+public class StyleColorTest extends TestCase {
+
+
+       public void testEqualsObject() {
+               assertEquals(StyleColor.getStyleColor("foo"),StyleColor.getStyleColor("foo"));
+               assertFalse(StyleColor.getStyleColor("foox").equals(StyleColor.getStyleColor("foo")));
+       }
+
+       public void testSameObject() {
+               assertSame(StyleColor.getStyleColor("foo"),StyleColor.getStyleColor("foo"));
+               assertNotSame(StyleColor.getStyleColor("foox"),StyleColor.getStyleColor("foo"));
+       }
+
+       public void testToString() {
+               assertEquals("xxx", StyleColor.getStyleColor("xxx").toString());
+       }
+
+       public void testGetName() {
+               assertEquals("xxx", StyleColor.getStyleColor("xxx").getName());
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/model/StyleTest.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/model/StyleTest.java
new file mode 100644 (file)
index 0000000..e926438
--- /dev/null
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors: 
+ * Michael Scharf (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.model;
+
+import junit.framework.TestCase;
+
+public class StyleTest extends TestCase {
+       final StyleColor c1=StyleColor.getStyleColor("c1");
+       final StyleColor c2=StyleColor.getStyleColor("c2");
+       final StyleColor c3=StyleColor.getStyleColor("c3");
+
+       public void testGetStyle() {
+               Style s1=Style.getStyle(c1, c2, true, false, true, false);
+               Style s2=Style.getStyle(c1, c2, true, false, true, false);
+               assertEquals(s1,s2);
+               assertSame(s1,s2);
+               s1=s1.setBlink(!s1.isBlink());
+               assertNotSame(s1,s2);
+               assertFalse(s1.equals(s2));
+               s1=s1.setBlink(!s1.isBlink());
+               assertSame(s1,s2);
+       }
+
+       public void testSetForground() {
+               Style s1=Style.getStyle(c1, c2, true, false, true, false);
+               Style s2=s1;
+               s2=s1.setForground(c3);
+               assertNotSame(s1,s2);
+               assertFalse(s1.equals(s2));
+               assertSame(s2.getForground(), c3);
+               assertSame(s1.getForground(), c1);
+               assertSame(s1.getBackground(), c2);
+               assertSame(s2.getBackground(), c2);
+               s2=s2.setForground(c1);
+               assertSame(s1, s2);
+       }
+
+       public void testSetBackground() {
+               Style s1=Style.getStyle(c1, c2, true, false, true, false);
+               Style s2=s1;
+               s2=s1.setBackground(c3);
+               assertNotSame(s1,s2);
+               assertFalse(s1.equals(s2));
+               assertSame(s2.getForground(), c1);
+               assertSame(s1.getForground(), c1);
+               assertSame(s1.getBackground(), c2);
+               assertSame(s2.getBackground(), c3);
+               s2=s2.setBackground(c2);
+               assertSame(s1, s2);
+       }
+
+       public void testSetBold() {
+               Style s1=getDefaultStyle();
+               Style s2=s1;
+               assertSame(s1,s2);
+               assertFalse(s2.isBold());
+               s2=s2.setBold(true);
+               assertNotSame(s1,s2);
+               assertTrue(s2.isBold());
+               s2=s2.setBold(false);
+               assertSame(s1,s2);
+               assertFalse(s2.isBold());
+       }
+
+       public void testSetBlink() {
+               Style s1=getDefaultStyle();
+               Style s2=s1;
+               assertSame(s1,s2);
+               assertFalse(s2.isBlink());
+               s2=s2.setBlink(true);
+               assertNotSame(s1,s2);
+               assertTrue(s2.isBlink());
+               s2=s2.setBlink(false);
+               assertSame(s1,s2);
+               assertFalse(s2.isBlink());
+       }
+
+       public void testSetUnderline() {
+               Style s1=getDefaultStyle();
+               Style s2=s1;
+               assertSame(s1,s2);
+               assertFalse(s2.isUnderline());
+               s2=s2.setUnderline(true);
+               assertNotSame(s1,s2);
+               assertTrue(s2.isUnderline());
+               s2=s2.setUnderline(false);
+               assertSame(s1,s2);
+               assertFalse(s2.isUnderline());
+       }
+
+       public void testSetReverse() {
+               Style s1=getDefaultStyle();
+               Style s2=s1;
+               assertSame(s1,s2);
+               assertFalse(s2.isReverse());
+               s2=s2.setReverse(true);
+               assertNotSame(s1,s2);
+               assertTrue(s2.isReverse());
+               s2=s2.setReverse(false);
+               assertSame(s1,s2);
+               assertFalse(s2.isReverse());
+       }
+
+       private Style getDefaultStyle() {
+               return Style.getStyle(c1, c2, false, false, false, false);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/test/AutomatedPluginTests.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/test/AutomatedPluginTests.java
new file mode 100644 (file)
index 0000000..ee7a183
--- /dev/null
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Martin Oberhuber (Wind River) - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.tm.terminal.test;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Master Test Suite to run all Terminal plug-in tests.
+ */
+public class AutomatedPluginTests extends TestCase {
+       /**
+        * Call each AllTests class from each of the test packages.
+        */
+       public static Test suite() {
+               TestSuite suite = new TestSuite(AutomatedPluginTests.class.getName());
+               //These tests require Eclipse Platform to be up
+               suite.addTestSuite(org.eclipse.tm.internal.terminal.connector.TerminalConnectorPluginTest.class);
+               suite.addTestSuite(org.eclipse.tm.internal.terminal.connector.TerminalConnectorFactoryTest.class);
+               
+               //These tests must run as plain JUnit because they require access
+               //to "package" protected methods
+               //suite.addTest(AutomatedTests.suite());
+               return suite;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/test/AutomatedTests.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/test/AutomatedTests.java
new file mode 100644 (file)
index 0000000..089f39e
--- /dev/null
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2012 Wind River Systems, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Martin Oberhuber (Wind River) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.test;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Master test suite to run all terminal unit tests.
+ */
+public class AutomatedTests extends TestCase {
+
+       public static final String PI_TERMINAL_TESTS = "org.eclipse.tm.terminal.test"; //$NON-NLS-1$
+
+       public AutomatedTests() {
+               super(null);
+       }
+
+       public AutomatedTests(String name) {
+               super(name);
+       }
+
+       /**
+        * Call each AllTests class from each of the test packages.
+        */
+       public static Test suite() {
+               TestSuite suite = new TestSuite(AutomatedTests.class.getName());
+               suite.addTest(org.eclipse.tm.internal.terminal.emulator.AllTests.suite());
+               suite.addTest(org.eclipse.tm.internal.terminal.model.AllTests.suite());
+               suite.addTest(org.eclipse.tm.terminal.model.AllTests.suite());
+               suite.addTestSuite(org.eclipse.tm.internal.terminal.connector.TerminalConnectorTest.class);
+               suite.addTestSuite(org.eclipse.tm.internal.terminal.connector.TerminalToRemoteInjectionOutputStreamTest.class);
+               return suite;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/teamConfig/Terminal All Unit Tests.launch b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/teamConfig/Terminal All Unit Tests.launch
new file mode 100644 (file)
index 0000000..fd2e3eb
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.tm.terminal.test/src"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="2"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=org.eclipse.tm.terminal.test/src"/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.tm.terminal.test"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/>
+</launchConfiguration>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/teamConfig/Terminal AutomatedTests.launch b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/teamConfig/Terminal AutomatedTests.launch
new file mode 100644 (file)
index 0000000..a8d7a4e
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/test/AutomatedTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.tm.terminal.test.AutomatedTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.tm.terminal.test"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/>
+</launchConfiguration>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/teamConfig/Terminal Plugin Tests.launch b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/teamConfig/Terminal Plugin Tests.launch
new file mode 100644 (file)
index 0000000..0872cc4
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.tm.terminal.test/src/org/eclipse/tm/terminal/test/AutomatedPluginTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.tm.terminal.test.AutomatedPluginTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.tm.terminal.test"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.sdk.ide"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useProduct" value="true"/>
+</launchConfiguration>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/tm32.png b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/tm32.png
new file mode 100644 (file)
index 0000000..3077b12
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.test/tm32.png differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.classpath b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.classpath
new file mode 100644 (file)
index 0000000..ad32c83
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.gitignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.options b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.options
new file mode 100644 (file)
index 0000000..a0a2c87
--- /dev/null
@@ -0,0 +1 @@
+org.eclipse.tm.terminal.view.core/debugmode = 0
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.project b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.project
new file mode 100644 (file)
index 0000000..f6e4e7e
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.view.core</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>1329501981620</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.settings/org.eclipse.jdt.core.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..7fc8175
--- /dev/null
@@ -0,0 +1,380 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=4
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=4
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.settings/org.eclipse.jdt.ui.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..0d73226
--- /dev/null
@@ -0,0 +1,62 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Target Explorer Java STD
+formatter_settings_version=12
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.settings/org.eclipse.pde.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/.settings/org.eclipse.pde.prefs
new file mode 100644 (file)
index 0000000..cf80c8b
--- /dev/null
@@ -0,0 +1,32 @@
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.encodings=2
+compilers.p.build.java.compiler=2
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/META-INF/MANIFEST.MF b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..a811429
--- /dev/null
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.tm.terminal.view.core;singleton:=true
+Bundle-Version: 4.2.0.qualifier
+Bundle-Activator: org.eclipse.tm.terminal.view.core.activator.CoreBundleActivator
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.core.expressions;bundle-version="3.4.400",
+ org.eclipse.core.runtime;bundle-version="3.8.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Export-Package: org.eclipse.tm.terminal.view.core,
+ org.eclipse.tm.terminal.view.core.activator;x-internal:=true,
+ org.eclipse.tm.terminal.view.core.interfaces,
+ org.eclipse.tm.terminal.view.core.interfaces.constants,
+ org.eclipse.tm.terminal.view.core.internal;x-internal:=true,
+ org.eclipse.tm.terminal.view.core.nls;x-internal:=true,
+ org.eclipse.tm.terminal.view.core.preferences,
+ org.eclipse.tm.terminal.view.core.tracing,
+ org.eclipse.tm.terminal.view.core.utils
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/about.html b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/about.html
new file mode 100644 (file)
index 0000000..0f07cf0
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+<p>May 24, 2012</p>    
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/about.ini b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/about.ini
new file mode 100644 (file)
index 0000000..3adc27a
--- /dev/null
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=tm32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+# optional
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/about.mappings b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/about.mappings
new file mode 100644 (file)
index 0000000..bddaab4
--- /dev/null
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/about.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/about.properties
new file mode 100644 (file)
index 0000000..35d7bbe
--- /dev/null
@@ -0,0 +1,24 @@
+################################################################################
+# Copyright (c) 2006, 2016 Wind River Systems, Inc. and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Martin Oberhuber - initial API and implementation 
+################################################################################
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+#
+# Do not translate any values surrounded by {}
+
+blurb=TM Terminal\n\
+\n\
+Version: {featureVersion}\n\
+\n\
+(c) Copyright Wind River Systems, Inc. and others 2011, 2016.  All rights reserved.\n\
+Visit http://marketplace.eclipse.org/content/tm-terminal
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/build.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/build.properties
new file mode 100644 (file)
index 0000000..01e440a
--- /dev/null
@@ -0,0 +1,20 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties,\
+               about.html,\
+               plugin.xml,\
+               about.ini,\
+               about.mappings,\
+               about.properties,\
+               tm32.png
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/plugin.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/plugin.properties
new file mode 100644 (file)
index 0000000..15d6077
--- /dev/null
@@ -0,0 +1,14 @@
+##################################################################################
+# Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+
+pluginName = Terminal View Core
+providerName = Eclipse.org - Target Management
+
+ExtensionPoint.contextPropertiesProviders = Terminal Context Properties Providers
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/plugin.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/plugin.xml
new file mode 100644 (file)
index 0000000..c9373fa
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension-point id="contextPropertiesProviders" name="%contextPropertiesProviders" schema="schema/contextPropertiesProviders.exsd"/>
+
+<!-- Property tester contributions -->
+   <extension point="org.eclipse.core.expressions.propertyTesters">
+      <propertyTester
+            class="org.eclipse.tm.terminal.view.core.internal.PropertyTester"
+            id="org.eclipse.tm.terminal.view.core.PropertyTester"
+            namespace="org.eclipse.tm.terminal.view.core"
+            properties="hasContextPropertiesProvider"
+            type="java.lang.Object">
+      </propertyTester>
+   </extension>
+
+</plugin>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/pom.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/pom.xml
new file mode 100644 (file)
index 0000000..d85f2d0
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.tizen</groupId>
+    <artifactId>tizen-patches</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+    <relativePath>../../../tizen.rt.upstream.patches</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.view.core</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/pom2.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/pom2.xml
new file mode 100644 (file)
index 0000000..4acad71
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.view.core</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/schema/contextPropertiesProviders.exsd b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/schema/contextPropertiesProviders.exsd
new file mode 100644 (file)
index 0000000..42db131
--- /dev/null
@@ -0,0 +1,128 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.tm.terminal.view.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.tm.terminal.view.core" id="contextPropertiesProviders" name="Terminal Context Properties Providers"/>
+      </appinfo>
+      <documentation>
+         This extension point is used to contribute terminal context properties providers. The context properties provider allows querying desired properties for a given context.
+&lt;p&gt;
+The terminal context is passed in as default variable to the enablement expression evaluation. The terminal context is not expected to be iteratable or countable.
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="contextPropertiesProvider" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="contextPropertiesProvider">
+      <annotation>
+         <documentation>
+            Declares a terminal context properties provider contribution.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="enablement"/>
+         </sequence>
+         <attribute name="class" type="string">
+            <annotation>
+               <documentation>
+                  The class that implements &lt;code&gt;org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider&lt;/code&gt;.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         TM Terminal 4.0.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         This is an example of the extension point usage:
+&lt;p&gt;
+&lt;pre&gt;&lt;code&gt;
+  &lt;extension point=&quot;org.eclipse.tm.terminal.view.core.contextPropertiesProviders&quot;&gt;
+      &lt;contextPropertiesProvider
+            class=&quot;com.my.contribution.MyContextPropertiesProviderImpl&quot;&gt;
+      &lt;/contextPropertiesProvider&gt;
+   &lt;/extension&gt;
+&lt;/code&gt;&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         The provider of a terminal context properties provider must implement &lt;samp&gt;org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider&lt;/samp&gt;.
+      </documentation>
+   </annotation>
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright (c) 2015 Wind River Systems, Inc. and others.
+
+All rights reserved.
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Public License v1.0 which accompanies this distribution, and is
+available at http://www.eclipse.org/legal/epl-v10.html.
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/TerminalContextPropertiesProviderFactory.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/TerminalContextPropertiesProviderFactory.java
new file mode 100644 (file)
index 0000000..9d26a00
--- /dev/null
@@ -0,0 +1,228 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.ExpressionConverter;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.tm.terminal.view.core.activator.CoreBundleActivator;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider;
+import org.eclipse.tm.terminal.view.core.nls.Messages;
+
+/**
+ * Terminal context properties provider factory.
+ */
+public final class TerminalContextPropertiesProviderFactory {
+       // Flag to remember if the contributions got loaded
+       private static boolean contributionsLoaded = false;
+
+       // The list of all loaded contributions
+       private static final List<Proxy> contributions = new ArrayList<Proxy>();
+
+       // The proxy used to achieve lazy class loading and plug-in activation
+       private static class Proxy implements IExecutableExtension {
+               // Reference to the configuration element
+               private IConfigurationElement configElement = null;
+               // The class implementing the provider
+               public String clazz;
+               // The context properties provider instance
+               private ITerminalContextPropertiesProvider provider = null;
+               // The converted expression
+               private Expression expression;
+
+               /**
+                * Constructor.
+                */
+               protected Proxy() {
+               }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+                */
+               @Override
+               public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
+                       Assert.isNotNull(config);
+                       this.configElement = config;
+
+                       // Read the class attribute.
+                       // Throws an exception if the attribute value is empty or null.
+                       clazz = config.getAttribute("class"); //$NON-NLS-1$
+                       if (clazz == null || "".equals(clazz.trim())) { //$NON-NLS-1$
+                               throw new CoreException(new Status(IStatus.ERROR,
+                                                                               CoreBundleActivator.getUniqueIdentifier(),
+                                                                               NLS.bind(Messages.Extension_error_missingRequiredAttribute, "class", config.getContributor().getName()))); //$NON-NLS-1$
+                       }
+
+                       // Read the "enablement" sub element of the extension
+                       IConfigurationElement[] children = configElement.getChildren("enablement"); //$NON-NLS-1$
+                       if (children == null || children.length == 0) {
+                               throw new CoreException(new Status(IStatus.ERROR,
+                                                               CoreBundleActivator.getUniqueIdentifier(),
+                                                               NLS.bind(Messages.Extension_error_missingRequiredAttribute, "enablement", config.getContributor().getName()))); //$NON-NLS-1$
+                       }
+                       // Only one "enablement" element is expected
+                       expression = ExpressionConverter.getDefault().perform(children[0]);
+               }
+
+               /**
+                * Return the real terminal context properties provider instance for this proxy.
+                */
+               protected ITerminalContextPropertiesProvider getProvider() {
+                       if (provider == null && configElement != null) {
+                               try {
+                                       // Create the service class instance via the configuration element
+                                       Object provider = configElement.createExecutableExtension("class"); //$NON-NLS-1$
+                                       if (provider instanceof ITerminalContextPropertiesProvider) {
+                                               this.provider = (ITerminalContextPropertiesProvider)provider;
+                                       }
+                                       else {
+                                               IStatus status = new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), "Terminal context properties provider '" + provider.getClass().getName() + "' not of type ITerminalContextPropertiesProvider."); //$NON-NLS-1$ //$NON-NLS-2$
+                                               Platform.getLog(CoreBundleActivator.getContext().getBundle()).log(status);
+                                       }
+                               }
+                               catch (CoreException e) {
+                                       IStatus status = new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), "Cannot create terminal context properties provider '" + clazz + "'.", e); //$NON-NLS-1$ //$NON-NLS-2$
+                                       Platform.getLog(CoreBundleActivator.getContext().getBundle()).log(status);
+                               }
+                       }
+                       return provider;
+               }
+
+               /**
+                * Returns if or if not the context properties provider contribution is enabled for
+                * the given terminal context.
+                *
+                * @param context The terminal context or <code>null</code>.
+                * @return <code>True</code> if the context properties provider contribution is enabled
+                *         for the given terminal context, <code>false</code> otherwise.
+                */
+               protected boolean isEnabled(Object context) {
+                       if (context == null) {
+                               return getEnablement() == null;
+                       }
+
+                       Expression enablement = getEnablement();
+
+                       // The service contribution is enabled by default if no expression is specified.
+                       boolean enabled = enablement == null;
+
+                       if (enablement != null) {
+                               // Set the default variable to the service context.
+                               EvaluationContext evalContext = new EvaluationContext(null, context);
+                               // Allow plug-in activation
+                               evalContext.setAllowPluginActivation(true);
+                               // Evaluate the expression
+                               try {
+                                       enabled = enablement.evaluate(evalContext).equals(EvaluationResult.TRUE);
+                               } catch (CoreException e) {
+                                       IStatus status = new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), e.getLocalizedMessage(), e);
+                                       Platform.getLog(CoreBundleActivator.getContext().getBundle()).log(status);
+                               }
+                       }
+
+                       return enabled;
+               }
+
+               /**
+                * Returns the enablement expression.
+                *
+                * @return The enablement expression or <code>null</code>.
+                */
+               protected Expression getEnablement() {
+                       return expression;
+               }
+       }
+
+
+       /**
+        * Creates a new terminal context properties provider proxy instance and initialize it.
+        *
+        * @param config The configuration element. Must not be <code>null</code>.
+        * @return The new terminal context properties provider proxy instance.
+        */
+       private static Proxy getProxy(IConfigurationElement config) {
+               Assert.isNotNull(config);
+               Proxy proxy = new Proxy();
+               try {
+                       proxy.setInitializationData(config, null, null);
+               } catch (CoreException e) {
+                       if (Platform.inDebugMode()) {
+                               Platform.getLog(CoreBundleActivator.getContext().getBundle()).log(e.getStatus());
+                       }
+               }
+               return proxy;
+       }
+
+       /**
+        * Load the terminal context properties provider contributions.
+        */
+       private static void loadContributions() {
+               IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.tm.terminal.view.core.contextPropertiesProviders"); //$NON-NLS-1$
+               if (ep != null) {
+                       IExtension[] extensions = ep.getExtensions();
+                       if (extensions != null) {
+                               for (IExtension extension : extensions) {
+                                       IConfigurationElement[] configElements = extension.getConfigurationElements();
+                                       if (configElements != null) {
+                                               for (IConfigurationElement configElement : configElements) {
+                                                       if ("contextPropertiesProvider".equals(configElement.getName())) { //$NON-NLS-1$
+                                                               Proxy proxy = getProxy(configElement);
+                                                               contributions.add(proxy);
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Get the terminal context properties provider for the given context. The first terminal
+        * context properties provider which is enabled is returned.
+        *
+        * @param context The terminal context. Must not be <code>null</code>.
+        *
+        * @return The service or <code>null</code>.
+        */
+       public static ITerminalContextPropertiesProvider getProvider(Object context) {
+               Assert.isNotNull(context);
+
+               // Load the contributions if not yet loaded
+               synchronized (contributions) {
+                       if (!contributionsLoaded) {
+                               loadContributions();
+                               contributionsLoaded = true;
+                       }
+        }
+
+               for (Proxy proxy : contributions) {
+                       if (proxy.isEnabled(context)) {
+                               return proxy.getProvider();
+                       }
+               }
+
+               return null;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/TerminalServiceFactory.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/TerminalServiceFactory.java
new file mode 100644 (file)
index 0000000..7dd819a
--- /dev/null
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.tm.terminal.view.core.activator.CoreBundleActivator;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
+import org.eclipse.tm.terminal.view.core.nls.Messages;
+import org.osgi.framework.Bundle;
+
+/**
+ * Terminal service factory implementation.
+ * <p>
+ * Provides access to the terminal service instance.
+ */
+public final class TerminalServiceFactory {
+       private static ITerminalService instance = null;
+
+       static {
+               // Tries to instantiate the terminal service implementation
+               // from the o.e.tm.terminal.view.ui bundle
+               Bundle bundle = Platform.getBundle("org.eclipse.tm.terminal.view.ui"); //$NON-NLS-1$
+               if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                       try {
+                   Class<?> clazz = bundle.loadClass("org.eclipse.tm.terminal.view.ui.services.TerminalService"); //$NON-NLS-1$
+                   instance = (ITerminalService) clazz.newInstance();
+            }
+            catch (Exception e) {
+               if (Platform.inDebugMode()) {
+                       Platform.getLog(bundle).log(new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), Messages.TerminalServiceFactory_error_serviceImplLoadFailed, e));
+               }
+            }
+               }
+       }
+
+       /**
+        * Returns the terminal service instance.
+        */
+       public static ITerminalService getService() {
+               return instance;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/activator/CoreBundleActivator.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/activator/CoreBundleActivator.java
new file mode 100644 (file)
index 0000000..16e0ed8
--- /dev/null
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.activator;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class CoreBundleActivator implements BundleActivator {
+       // The bundle context
+       private static BundleContext context;
+
+       /**
+        * Returns the bundle context
+        *
+        * @return the bundle context
+        */
+       public static BundleContext getContext() {
+               return context;
+       }
+
+       /**
+        * Convenience method which returns the unique identifier of this plug-in.
+        */
+       public static String getUniqueIdentifier() {
+               if (getContext() != null && getContext().getBundle() != null) {
+                       return getContext().getBundle().getSymbolicName();
+               }
+               return "org.eclipse.tm.terminal.view.core"; //$NON-NLS-1$
+       }
+
+       /* (non-Javadoc)
+        * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+        */
+       @Override
+       public void start(BundleContext bundleContext) throws Exception {
+               CoreBundleActivator.context = bundleContext;
+       }
+
+       /* (non-Javadoc)
+        * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+        */
+       @Override
+       public void stop(BundleContext bundleContext) throws Exception {
+               CoreBundleActivator.context = null;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/ITerminalContextPropertiesProvider.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/ITerminalContextPropertiesProvider.java
new file mode 100644 (file)
index 0000000..86dd363
--- /dev/null
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.interfaces;
+
+import java.util.Map;
+
+/**
+ * Terminal context properties provider.
+ * <p>
+ * The context properties provider allows querying desired properties
+ * for a given context. The context is typically an element from a selection
+ * and the inner structure of the element is unknown to the terminal.
+ */
+public interface ITerminalContextPropertiesProvider {
+
+       /**
+        * Returns a unmodifiable map containing the target address and port for the given context,
+        * if it can be determined.
+        * <p>
+        * A context may return multiple target addresses and ports if the context can be reached using
+        * different connection methods.
+        * <p>
+        * <b>Note:</b>
+        * <ul>
+        * <li>See the constants defined in the context provider constants interface for default
+        * address and port types.</li>
+        * <li>The target address returned must <b>not</b> necessarily be an IP address.</li>
+        * <li>The values of the address or port properties might be <code>null</code>.</li>
+        * </ul>
+        *
+        * @param context The context to get the target addresses and ports from. Must not be <code>null</code>.
+        * @return The unmodifiable map containing the target addresses and ports, or <code>null</code>.
+        */
+       public Map<String, String> getTargetAddress(Object context);
+
+       /**
+        * Returns the property value stored under the given property key. If the property does not
+        * exist, <code>null</code> is returned.
+        *
+        * @param context The context to get the property from. Must not be <code>null</code>.
+        * @param key The property key. Must not be <code>null</code>.
+        *
+        * @return The stored property value or <code>null</code>.
+        */
+       public Object getProperty(Object context, String key);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/ITerminalService.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/ITerminalService.java
new file mode 100644 (file)
index 0000000..7633762
--- /dev/null
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2011 - 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.interfaces;
+
+import java.util.Map;
+
+import org.eclipse.core.runtime.IStatus;
+
+/**
+ * Terminal service.
+ */
+public interface ITerminalService {
+
+       /**
+        * Client call back interface.
+        */
+       public interface Done {
+               /**
+                * Called when the terminal service operation is done.
+                *
+                * @param status The status of the terminal service operation.
+                */
+               public void done(IStatus status);
+       }
+
+       /**
+        * Opens a terminal asynchronously and invokes the given callback if done.
+        *
+        * @param properties The terminal properties. Must not be <code>null</code>.
+        * @param done The callback to invoke if finished or <code>null</code>.
+        */
+       public void openConsole(Map<String, Object> properties, Done done);
+
+       /**
+        * Close the terminal asynchronously and invokes the given callback if done.
+        *
+        * @param properties The terminal properties. Must not be <code>null</code>.
+        * @param done The callback to invoke if finished or <code>null</code>.
+        */
+       public void closeConsole(Map<String, Object> properties, Done done);
+
+       /**
+        * Terminate (disconnect) the terminal asynchronously and invokes the given callback if done.
+        *
+        * @param properties The terminal properties. Must not be <code>null</code>.
+        * @param done The callback to invoke if finished or <code>null</code>.
+        */
+       public void terminateConsole(Map<String, Object> properties, Done done);
+
+       /**
+        * Register the given listener to receive notifications about terminal events.
+        * Calling this method multiple times with the same listener has no effect.
+
+        * @param listener The terminal tab listener. Must not be <code>null</code>.
+        */
+       public void addTerminalTabListener(ITerminalTabListener listener);
+
+       /**
+        * Unregister the given listener from receiving notifications about terminal
+        * events. Calling this method multiple times with the same listener
+        * has no effect.
+        *
+        * @param listener The terminal tab listener. Must not be <code>null</code>.
+        */
+       public void removeTerminalTabListener(ITerminalTabListener listener);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/ITerminalServiceOutputStreamMonitorListener.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/ITerminalServiceOutputStreamMonitorListener.java
new file mode 100644 (file)
index 0000000..0205f4c
--- /dev/null
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2014 - 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.interfaces;
+
+/**
+ * An interface to be implemented by listeners who want to listen
+ * to the streams data without interfering with the original data receiver.
+ * <p>
+ * Listeners are invoked within the monitor processing thread.
+ */
+public interface ITerminalServiceOutputStreamMonitorListener {
+
+       /**
+        * Signals that some content has been read from the monitored stream.
+        *
+        * @param byteBuffer The byte stream. Must not be <code>null</code>.
+        * @param bytesRead The number of bytes that were read into the read buffer.
+        */
+       public void onContentReadFromStream(byte[] byteBuffer, int bytesRead);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/ITerminalTabListener.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/ITerminalTabListener.java
new file mode 100644 (file)
index 0000000..e4e35fa
--- /dev/null
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.interfaces;
+
+/**
+ * Listener to implement and to register to get notified about
+ * terminal tabs events, like the disposal of a terminal tab.
+ */
+public interface ITerminalTabListener {
+
+       /**
+        * Invoked once a terminal tab got disposed. The source object is
+        * the disposed tab item and data is the custom data object associated
+        * with the disposed tab item.
+        *
+        * @param source The disposed tab item. Must not be <code>null</code>.
+        * @param data The custom data object associated with the disposed tab item or <code>null</code>.
+        */
+       public void terminalTabDisposed(Object source, Object data);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/constants/IContextPropertiesConstants.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/constants/IContextPropertiesConstants.java
new file mode 100644 (file)
index 0000000..b9d2b55
--- /dev/null
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.interfaces.constants;
+
+/**
+ * Defines the terminal context properties constants.
+ */
+public interface IContextPropertiesConstants {
+
+       /**
+        * Target name.
+        * <p>
+        * The target name is not meant to be identical with the targets network name. It can
+        * be the targets network name, but it can be any other string identifying the target
+        * to the user as well. The name is for display only, it is not meant to be used for
+        * communicating with the target.
+        */
+       public static String PROP_NAME = "name"; //$NON-NLS-1$
+
+       /**
+        * Target agent address.
+        * <p>
+        * <i>The value is typically the address an agent running at the target.</i>
+        */
+       public static String PROP_ADDRESS = "address"; //$NON-NLS-1$
+
+       /**
+        * Target agent port.
+        * <p>
+        * <i>The value is typically the port an agent running at the target.</i>
+        */
+       public static String PROP_PORT = "port"; //$NON-NLS-1$
+
+       /**
+        * The default user name to use to log into the target.
+        */
+       public static String PROP_DEFAULT_USER = "defaultUser"; //$NON-NLS-1$
+
+       /**
+        * The default encoding to use.
+        */
+       public static String PROP_DEFAULT_ENCODING = "defaultEncoding"; //$NON-NLS-1$
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/constants/ILineSeparatorConstants.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/constants/ILineSeparatorConstants.java
new file mode 100644 (file)
index 0000000..7f147c3
--- /dev/null
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2011 - 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.interfaces.constants;
+
+/**
+ * Line separator constants.
+ */
+public interface ILineSeparatorConstants {
+
+       /**
+        * The line separator setting CR (carriage return only; for example, used by Mac OS 9).
+        */
+       public final static String LINE_SEPARATOR_CR = "\\r"; //$NON-NLS-1$
+
+       /**
+        * The line separator setting CRLF (carriage return and line feed; for example, used by
+        * Windows).
+        */
+       public final static String LINE_SEPARATOR_CRLF = "\\r\\n"; //$NON-NLS-1$
+
+       /**
+        * The line separator setting LF (line feed only; used by all UNIX-based systems).
+        */
+       public final static String LINE_SEPARATOR_LF = "\\n"; //$NON-NLS-1$
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/constants/ITerminalsConnectorConstants.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/interfaces/constants/ITerminalsConnectorConstants.java
new file mode 100644 (file)
index 0000000..ebd5dd8
--- /dev/null
@@ -0,0 +1,336 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [361352] [TERMINALS][SSH] Add SSH terminal support
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.interfaces.constants;
+
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
+
+
+/**
+ * Defines the terminals connector constants.
+ *
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface ITerminalsConnectorConstants {
+
+       /**
+        * Property: The unique id of the terminals view to open.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_ID = "id"; //$NON-NLS-1$
+
+       /**
+        * Property: The unique secondary id of the terminals view to open.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_SECONDARY_ID = "secondaryId"; //$NON-NLS-1$
+
+       /**
+        * Property: The title of the terminal tab to open.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_TITLE = "title"; //$NON-NLS-1$
+
+       /**
+        * Property: The encoding of the terminal tab to open.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_ENCODING = "encoding"; //$NON-NLS-1$
+
+       /**
+        * Property: Custom data object to associate with the terminal tab.
+        * <p>
+        * Property Type: {@link Object}
+        */
+       public static final String PROP_DATA = "data"; //$NON-NLS-1$
+
+       /**
+        * Property: External selection to associate with the terminal tab.
+        * <p>
+        * Property Type: {@link org.eclipse.jface.viewers.ISelection}
+        */
+       public static final String PROP_SELECTION = "selection"; //$NON-NLS-1$
+
+       /**
+        * Property: Flag to force a new terminal tab.
+        * <p>
+        * Property Type: {@link Boolean}
+        */
+       public static final String PROP_FORCE_NEW = "terminal.forceNew"; //$NON-NLS-1$
+
+       /**
+        * Property: Terminal launcher delegate id.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_DELEGATE_ID = "delegateId"; //$NON-NLS-1$
+
+       /**
+        * Property: Specific terminal connector type id. Allows clients to
+        *           override the specifically used terminal connector
+        *           implementation for a given type.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_TERMINAL_CONNECTOR_ID = "tm.terminal.connector.id"; //$NON-NLS-1$
+
+       // ***** Generic terminals connector properties *****
+
+       /**
+        * Property: Timeout to be passed to the terminal connector. The specific terminal
+        *           connector implementation may interpret this value differently. If not
+        *           set, the terminal connector may use a default value.
+        * <p>
+        * Property Type: {@link Integer}
+        */
+       public static final String PROP_TIMEOUT = "timeout"; //$NON-NLS-1$
+
+       /**
+        * Property: Flag to control if a local echo is needed from the terminal widget.
+        *           <p>Typical for process and streams terminals.
+        * <p>
+        * Property Type: {@link Boolean}
+        */
+       public static final String PROP_LOCAL_ECHO = "localEcho"; //$NON-NLS-1$
+
+       /**
+        * Property: Data flag to tell the terminal to not reconnect when hitting enter
+        *           in a disconnected terminal.
+        * <p>
+        * Property Type: {@link Boolean}
+        */
+       public static final String PROP_DATA_NO_RECONNECT = "data.noReconnect"; //$NON-NLS-1$
+
+       /**
+        * Property: The line separator expected by the remote terminal on input streams and
+        *           send by the remote terminal on output streams.
+        *           <p>Typical for process and streams terminals.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_LINE_SEPARATOR = "lineSeparator"; //$NON-NLS-1$
+
+       /**
+        * Property: The list of stdout listeners to attach to the corresponding stream monitor.
+        *           <p>Typical for process and streams terminals.
+        * <p>
+        * Property Type: {@link ITerminalServiceOutputStreamMonitorListener} array
+        */
+       public static final String PROP_STDOUT_LISTENERS = "stdoutListeners"; //$NON-NLS-1$
+
+       /**
+        * Property: The list of stderr listeners to attach to the corresponding stream monitor.
+        *           <p>Typical for process and streams terminals.
+        * <p>
+        * Property Type: {@link ITerminalServiceOutputStreamMonitorListener} array
+        */
+       public static final String PROP_STDERR_LISTENERS = "stderrListeners"; //$NON-NLS-1$
+
+       /**
+        * Property: If set to <code>true</code>, backslashes are translated to
+        *           slashes before pasting the text to the terminal widget.
+        * <p>
+        * Property Type: {@link Boolean}
+        */
+       public static final String PROP_TRANSLATE_BACKSLASHES_ON_PASTE = "translateBackslashesOnPaste"; //$NON-NLS-1$
+
+       // ***** IP based terminals connector properties *****
+
+       /**
+        * Property: Host name or IP address the terminal server is running.
+        *           <p>Typical for telnet or ssh terminals.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_IP_HOST = "ip.host"; //$NON-NLS-1$
+
+       /**
+        * Property: Port at which the terminal server is providing the console input and output.
+        *           <p>Typical for telnet or ssh terminals.
+        * <p>
+        * Property Type: {@link Integer}
+        */
+       public static final String PROP_IP_PORT = "ip.port"; //$NON-NLS-1$
+
+       /**
+        * Property: An offset to add to the specified port number.
+        *           <p>Typical for telnet or ssh terminals.
+        * <p>
+        * Property Type: {@link Integer}
+        */
+       public static final String PROP_IP_PORT_OFFSET = "ip.port.offset"; //$NON-NLS-1$
+
+       // ***** Process based terminals connector properties *****
+
+       /**
+        * Property: Process image path.
+        *                       <p>Typical for process terminals.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_PROCESS_PATH = "process.path"; //$NON-NLS-1$
+
+       /**
+        * Property: Process arguments.
+        *           <p>Typical for process terminals.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_PROCESS_ARGS = "process.args"; //$NON-NLS-1$
+
+       /**
+        * Property: Process arguments.
+        *           <p>Typical for process terminals.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_PROCESS_WORKING_DIR = "process.working_dir"; //$NON-NLS-1$
+
+       /**
+        * Property: Process environment.
+        *           <p>Typical for process terminals.
+        * <p>
+        * Property Type: {@link String} array
+        */
+       public static final String PROP_PROCESS_ENVIRONMENT = "process.environment"; //$NON-NLS-1$
+
+       /**
+        * Property: Flag to merge process environment with native environment.
+        *           <p>Typical for process terminals.
+        * <p>
+        * Property Type: {@link Boolean}
+        */
+       public static final String PROP_PROCESS_MERGE_ENVIRONMENT = "process.environment.merge"; //$NON-NLS-1$
+
+       /**
+        * Property: Runtime process instance.
+     *           <p>Typical for process terminals.
+        * <p>
+        * Property Type: {@link Process}
+        */
+       public static final String PROP_PROCESS_OBJ = "process"; //$NON-NLS-1$
+
+       /**
+        * Property: Runtime process PTY instance.
+        *           <p>Typical for process terminals.
+        * <p>
+        * Property Type: {@link org.eclipse.cdt.utils.pty.PTY}
+        */
+       public static final String PROP_PTY_OBJ = "pty"; //$NON-NLS-1$
+
+       // ***** Streams based terminals connector properties *****
+
+       /**
+        * Property: Stdin streams instance.
+        *           <p>Typical for streams terminals.
+        * <p>
+        * Property Type: {@link OutputStream}
+        */
+       public static final String PROP_STREAMS_STDIN = "streams.stdin"; //$NON-NLS-1$
+
+       /**
+        * Property: Stdout streams instance.
+        *           <p>Typical for streams terminals.
+        * <p>
+        * Property Type: {@link InputStream}
+        */
+       public static final String PROP_STREAMS_STDOUT = "streams.stdout"; //$NON-NLS-1$
+
+       /**
+        * Property: Stderr streams instance.
+        *           <p>Typical for streams terminals.
+        * <p>
+        * Property Type: {@link InputStream}
+        */
+       public static final String PROP_STREAMS_STDERR = "streams.stderr"; //$NON-NLS-1$
+
+       // ***** Ssh specific properties *****
+
+       /**
+        * Property: ssh keep alive value.
+        * <p>
+        * Property Type: {@link Integer}
+        */
+       public static final String PROP_SSH_KEEP_ALIVE = "ssh.keep_alive"; //$NON-NLS-1$
+
+       /**
+        * Property: Ssh password.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_SSH_PASSWORD = "ssh.password"; //$NON-NLS-1$
+
+       /**
+        * Property: Ssh user.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_SSH_USER = "ssh.user"; //$NON-NLS-1$
+
+       // ***** Serial specific properties *****
+
+       /**
+        * The serial device name.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_SERIAL_DEVICE = "serial.device"; //$NON-NLS-1$
+
+       /**
+        * The baud rate.
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_SERIAL_BAUD_RATE = "serial.baudrate"; //$NON-NLS-1$
+
+       /**
+        * The data bits
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_SERIAL_DATA_BITS = "serial.databits"; //$NON-NLS-1$
+
+       /**
+        * The parity
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_SERIAL_PARITY = "serial.parity"; //$NON-NLS-1$
+
+       /**
+        * The stop bits
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_SERIAL_STOP_BITS = "serial.stopbits"; //$NON-NLS-1$
+
+       /**
+        * The flow control
+        * <p>
+        * Property Type: {@link String}
+        */
+       public static final String PROP_SERIAL_FLOW_CONTROL = "serial.flowcontrol"; //$NON-NLS-1$
+
+       // ***** Telnet specific properties *****
+
+       /**
+        * The end-of-line sequence to be sent to the server on "Enter".
+        * <p>
+        * Property Type: {@link String}
+        * @since 4.2
+        */
+       public static final String PROP_TELNET_EOL = "telnet.eol"; //$NON-NLS-1$
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/internal/PropertyTester.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/internal/PropertyTester.java
new file mode 100644 (file)
index 0000000..ceca0ef
--- /dev/null
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2011 - 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.internal;
+
+import org.eclipse.tm.terminal.view.core.TerminalContextPropertiesProviderFactory;
+
+
+
+/**
+ * Property tester implementation.
+ */
+public class PropertyTester extends org.eclipse.core.expressions.PropertyTester {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
+        */
+       @Override
+       public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+
+               // "hasContextPropertiesProvider": Checks if a context properties provider is available for the given receiver.
+               if ("hasContextPropertiesProvider".equals(property)) { //$NON-NLS-1$
+                       boolean hasProvider = TerminalContextPropertiesProviderFactory.getProvider(receiver) != null;
+                       return expectedValue instanceof Boolean ? ((Boolean)expectedValue).equals(Boolean.valueOf(hasProvider)) : hasProvider;
+               }
+
+               return false;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/nls/Messages.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/nls/Messages.java
new file mode 100644 (file)
index 0000000..f382eea
--- /dev/null
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Externalized strings management.
+ */
+public class Messages extends NLS {
+
+       // The plug-in resource bundle name
+       private static final String BUNDLE_NAME = "org.eclipse.tm.terminal.view.core.nls.Messages"; //$NON-NLS-1$
+
+       /**
+        * Static constructor.
+        */
+       static {
+               // Load message values from bundle file
+               NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+       }
+
+       // **** Declare externalized string id's down here *****
+
+       public static String TerminalServiceFactory_error_serviceImplLoadFailed;
+
+       public static String Extension_error_missingRequiredAttribute;
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/nls/Messages.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/nls/Messages.properties
new file mode 100644 (file)
index 0000000..212cd18
--- /dev/null
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+
+TerminalServiceFactory_error_serviceImplLoadFailed=Failed to load terminal service implementation.
+
+Extension_error_missingRequiredAttribute=Required attribute "{0}" missing for extension "{1}"!
+
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/preferences/ScopedEclipsePreferences.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/preferences/ScopedEclipsePreferences.java
new file mode 100644 (file)
index 0000000..d9e974b
--- /dev/null
@@ -0,0 +1,459 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.preferences;
+
+import java.io.OutputStream;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.core.runtime.preferences.IPreferenceFilter;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * Helper class to handle scoped Eclipse preferences for plug-in's. Scoped
+ * preferences means a given preference context plus the default preferences
+ * scope.
+ * <p>
+ * On changes a {@link PreferenceChangeEvent} is sent to inform all listeners of the change.
+ *
+ * @see IEclipsePreferences
+ * @see IEclipsePreferences.PreferenceChangeEvent
+ * @see IEclipsePreferences.IPreferenceChangeListener
+ */
+public class ScopedEclipsePreferences {
+       /**
+        * The preferences scope qualifier.
+        */
+       private final String qualifier;
+
+       /**
+        * The default scope preference node.
+        */
+       protected final IEclipsePreferences defaultPrefs;
+
+       /**
+        * The context scope preference node.
+        */
+       protected final IEclipsePreferences contextScopePrefs;
+
+       /**
+        * The registered preference change listeners.
+        */
+       private final ListenerList listeners = new ListenerList();
+
+       /**
+        * Constructor.
+        * <p>
+        * Initialize the scoped preferences with a new instance scope for the given qualifier. The default
+        * scope is determined by calling <code>DefaultScope().getNode(qualifier)</code>.
+        *
+        * @param qualifier The qualifier for the preferences (in example the unique identifier of a plugin). Must not be <code>null</code>.
+        */
+       public ScopedEclipsePreferences(String qualifier) {
+               this(InstanceScope.INSTANCE, qualifier);
+       }
+
+       /**
+        * Constructor.
+        * <p>
+        * Initialize the scoped preferences with the given scope. The default scope
+        * is determined by calling <code>DefaultScope().getNode(qualifier)</code>.
+        *
+        * @param context The preference scope context. Must not be <code>null</code>.
+        * @param qualifier The qualifier for the preferences (in example the unique identifier of a plugin). Must not be <code>null</code>.
+        */
+       public ScopedEclipsePreferences(IScopeContext context, String qualifier) {
+               Assert.isNotNull(context);
+               Assert.isNotNull(qualifier);
+               this.qualifier = qualifier;
+               defaultPrefs = DefaultScope.INSTANCE.getNode(getQualifier());
+               contextScopePrefs = context.getNode(getQualifier());
+       }
+
+       /**
+        * Returns the qualifier that is used to get the preferences.
+        * For plugin preferences, this is the unique identifier of the plugin.
+        */
+       protected final String getQualifier() {
+               return qualifier;
+       }
+
+       /**
+        * Exports the preferences to the stream.
+        * <p>
+        * <b>Note:</b> The stream will be closed after the export.
+        *
+        * @param stream The stream to where preferences and defaults should be exported.
+        */
+       public void exportPreferences(OutputStream stream) {
+               Assert.isNotNull(stream);
+               try {
+                       IPreferenceFilter filter = new IPreferenceFilter() {
+                               /* (non-Javadoc)
+                                * @see org.eclipse.core.runtime.preferences.IPreferenceFilter#getScopes()
+                                */
+                               @Override
+                               public String[] getScopes() {
+                                       return new String[] { InstanceScope.SCOPE };
+                               }
+                               /* (non-Javadoc)
+                                * @see org.eclipse.core.runtime.preferences.IPreferenceFilter#getMapping(java.lang.String)
+                                */
+                               @Override
+                               public Map getMapping(String scope) {
+                                       return null;
+                               }
+                       };
+
+                       Platform.getPreferencesService().exportPreferences(contextScopePrefs, new IPreferenceFilter[] { filter }, stream);
+                       stream.close();
+               }
+               catch (Exception e) {
+               }
+       }
+
+       /**
+        * Check whether a key is set or not.
+        *
+        * @param key The key to check.
+        * @return <code>null</code> if the key does not exist.
+        */
+       public boolean containsKey(String key) {
+               return Platform.getPreferencesService().getString(getQualifier(), key, null, null) != null;
+       }
+
+       /**
+        * Get a String preference value.
+        *
+        * @param key The preference key.
+        * @return The value of the preference key or the default value if not set.
+        */
+       public final String getString(String key) {
+               return Platform.getPreferencesService().getString(getQualifier(), key, null, null);
+       }
+
+       /**
+        * Get a boolean preference value.
+        *
+        * @param key The preference key.
+        * @return The value of the preference key or the default value if not set.
+        */
+       public final boolean getBoolean(String key) {
+               return Platform.getPreferencesService().getBoolean(getQualifier(), key, false, null);
+       }
+
+       /**
+        * Get an int preference value.
+        *
+        * @param key The preference key.
+        * @return The value of the preference key or the default value if not set.
+        */
+       public final int getInt(String key) {
+               return Platform.getPreferencesService().getInt(getQualifier(), key, 0, null);
+       }
+
+       /**
+        * Get a long preference value.
+        *
+        * @param key The preference key.
+        * @return The value of the preference key or the default value if not set.
+        */
+       public final long getLong(String key) {
+               return Platform.getPreferencesService().getLong(getQualifier(), key, 0, null);
+       }
+
+       /**
+        * Get a default String preference value.
+        *
+        * @param key The preference key.
+        * @return The default value of the preference key or <code>null</code>.
+        */
+       public final String getDefaultString(String key) {
+               return defaultPrefs.get(key, null);
+       }
+
+       /**
+        * Get a default boolean preference value.
+        *
+        * @param key The preference key.
+        * @return The default value of the preference key or <code>null</code>.
+        */
+       public final boolean getDefaultBoolean(String key) {
+               return defaultPrefs.getBoolean(key, false);
+       }
+
+       /**
+        * Get a default int preference value.
+        *
+        * @param key The preference key.
+        * @return The default value of the preference key or <code>null</code>.
+        */
+       public final int getDefaultInt(String key) {
+               return defaultPrefs.getInt(key, 0);
+       }
+
+       /**
+        * Get a default long preference value.
+        *
+        * @param key The preference key.
+        * @return The default value of the preference key or <code>null</code>.
+        */
+       public final long getDefaultLong(String key) {
+               return defaultPrefs.getLong(key, 0);
+       }
+
+       /**
+        * Set a String preference value. If the value is <code>null</code> or is equal to
+        * the default value, the entry will be removed.
+        * <p>
+        * A {@link PreferenceChangeEvent} is fired, if the value has changed.
+        *
+        * @param key The preference key.
+        * @return The value of the preference key.
+        */
+       public void putString(String key, String value) {
+               String defValue = defaultPrefs.get(key, null);
+               String instValue = getString(key);
+               if (value == null || value.equals(defValue)) {
+                       contextScopePrefs.remove(key);
+                       flushAndNotify(contextScopePrefs, key, instValue, defValue);
+               }
+               else if (!value.equals(instValue)) {
+                       contextScopePrefs.put(key, value);
+                       flushAndNotify(contextScopePrefs, key, instValue, value);
+               }
+       }
+
+       /**
+        * Set a boolean preference value. If the value is equal the default value,
+        * the entry will be removed.
+        * <p>
+        * A {@link PreferenceChangeEvent} is fired, if the value has changed.
+        *
+        * @param key The preference key.
+        * @return The value of the preference key.
+        */
+       public void putBoolean(String key, boolean value) {
+               boolean defValue = defaultPrefs.getBoolean(key, false);
+               boolean instValue = getBoolean(key);
+               if (value == defValue) {
+                       contextScopePrefs.remove(key);
+                       flushAndNotify(contextScopePrefs, key, Boolean.toString(instValue), Boolean.toString(defValue));
+               }
+               else if (value != instValue) {
+                       contextScopePrefs.putBoolean(key, value);
+                       flushAndNotify(contextScopePrefs, key, Boolean.toString(instValue), Boolean.toString(value));
+               }
+       }
+
+       /**
+        * Set an int preference value. If the value is equal to the default value,
+        * the entry will be removed.
+        * <p>
+        * A {@link PreferenceChangeEvent} is fired, if the value has changed. The old
+        * and new values are string representation in base 10.
+        *
+        * @param key The preference key.
+        * @return The value of the preference key.
+        */
+       public void putInt(String key, int value) {
+               int defValue = defaultPrefs.getInt(key, 0);
+               int instValue = getInt(key);
+               if (value == defValue) {
+                       contextScopePrefs.remove(key);
+                       flushAndNotify(contextScopePrefs, key, Integer.toString(instValue), Integer.toString(defValue));
+               }
+               else if (value != instValue) {
+                       contextScopePrefs.putInt(key, value);
+                       flushAndNotify(contextScopePrefs, key, Integer.toString(instValue), Integer.toString(value));
+               }
+       }
+
+       /**
+        * Set a long preference value. If the given value is equal to the default
+        * value, the entry will be removed.
+        * <p>
+        * A {@link PreferenceChangeEvent} is fired, if the value has changed. The old
+        * and new values are string representation in base 10.
+        *
+        * @param key The preference key.
+        * @return The value of the preference key.
+        */
+       public void putLong(String key, long value) {
+               long defValue = defaultPrefs.getLong(key, 0);
+               long instValue = getLong(key);
+               if (value == defValue) {
+                       contextScopePrefs.remove(key);
+                       flushAndNotify(contextScopePrefs, key, Long.toString(instValue), Long.toString(defValue));
+               }
+               else if (value != instValue) {
+                       contextScopePrefs.putLong(key, value);
+                       flushAndNotify(contextScopePrefs, key, Long.toString(instValue), Long.toString(value));
+               }
+       }
+
+       /**
+        * Set a default String preference value. If the given value is <code>null</code>,
+        * the entry will be removed.
+        * <p>
+        * A {@link PreferenceChangeEvent} is fired, if the value has changed.
+        *
+        * @param key The preference key.
+        * @return The default value of the preference key.
+        */
+       public void putDefaultString(String key, String value) {
+               String defValue = defaultPrefs.get(key, null);
+               if (value == null) {
+                       defaultPrefs.remove(key);
+                       flushAndNotify(defaultPrefs, key, defValue, null);
+               }
+               else if (!value.equals(defValue)) {
+                       defaultPrefs.put(key, value);
+                       flushAndNotify(defaultPrefs, key, defValue, value);
+               }
+       }
+
+       /**
+        * Set a default boolean preference value.
+        * <p>
+        * A {@link PreferenceChangeEvent} is fired, if the value has changed.
+        *
+        * @param key The preference key.
+        * @return The default value of the preference key.
+        */
+       public void putDefaultBoolean(String key, boolean value) {
+               boolean defValue = defaultPrefs.getBoolean(key, false);
+               if (value != defValue) {
+                       defaultPrefs.putBoolean(key, value);
+                       flushAndNotify(defaultPrefs, key, Boolean.toString(defValue), Boolean.toString(value));
+               }
+       }
+
+       /**
+        * Set a default int preference value.
+        * <p>
+        * A {@link PreferenceChangeEvent} is fired, if the value has changed. The old
+        * and new values are string representation in base 10.
+        *
+        * @param key The preference key.
+        * @return The default value of the preference key.
+        */
+       public void putDefaultInt(String key, int value) {
+               int defValue = defaultPrefs.getInt(key, 0);
+               if (value != defValue) {
+                       defaultPrefs.putInt(key, value);
+                       flushAndNotify(defaultPrefs, key, Integer.toString(defValue), Integer.toString(value));
+               }
+       }
+
+       /**
+        * Set a default long preference value.
+        * <p>
+        * A {@link PreferenceChangeEvent} is fired, if the value has changed. The old
+        * and new values are string representation in base 10.
+        *
+        * @param key The preference key.
+        * @return The default value of the preference key.
+        */
+       public void putDefaultLong(String key, long value) {
+               long defValue = defaultPrefs.getLong(key, 0);
+               if (value != defValue) {
+                       defaultPrefs.putLong(key, value);
+                       flushAndNotify(defaultPrefs, key, Long.toString(defValue), Long.toString(value));
+               }
+       }
+
+       /**
+        * Write back the changes to the store and notify all listeners about the changed key.
+        *
+        * @param node The preference node which has changed. Must not be <code>null</code>.
+        * @param key The key of the changed preference. Must not be <code>null</code>.
+        * @param oldValue The old value as a {@link String}, or <code>null</code>.
+        * @param newValue The new value as a {@link String}, or <code>null</code>.
+        */
+       protected final void flushAndNotify(IEclipsePreferences node, String key, String oldValue, String newValue) {
+               // Flush the preferences to the persistence store
+               try { node.flush(); } catch (BackingStoreException e) { /* Ignored on purpose */ }
+
+               // Notify the listeners
+               firePreferenceEvent(node, key, oldValue, newValue);
+       }
+
+       /**
+        * Register the given listener to receive notifications of preference changes to this node.
+        * Calling this method multiple times with the same listener has no effect. The given listener
+        * argument must not be <code>null</code>.
+        *
+        * @param listener The preference change listener. Must not be <code>null</code>.
+        */
+       public void addPreferenceChangeListener(IPreferenceChangeListener listener) {
+               Assert.isNotNull(listener);
+               listeners.add(listener);
+       }
+
+       /**
+        * De-register the given listener from receiving notifications of preference changes
+        * to this node. Calling this method multiple times with the same listener has no
+        * effect. The given listener argument must not be <code>null</code>.
+        *
+        * @param listener The preference change listener. Must not be <code>null</code>.
+        */
+       public void removePreferenceChangeListener(IPreferenceChangeListener listener) {
+               Assert.isNotNull(listener);
+               listeners.remove(listener);
+       }
+
+       /**
+        * Convenience method for notifying the registered preference change listeners.
+        *
+        * @param node The preference node which has changed. Must not be <code>null</code>.
+        * @param key The key of the changed preference. Must not be <code>null</code>.
+        * @param oldValue The old value as a {@link String}, or <code>null</code>.
+        * @param newValue The new value as a {@link String}, or <code>null</code>.
+        */
+       protected void firePreferenceEvent(IEclipsePreferences node, String key, String oldValue, String newValue) {
+               Assert.isNotNull(node);
+               Assert.isNotNull(key);
+
+               // If no listener is registered, we are done here
+               if (listeners.isEmpty()) return;
+
+               // Get the list or currently registered listeners
+               Object[] l = listeners.getListeners();
+               // Create the preference change event
+               final PreferenceChangeEvent event = new PreferenceChangeEvent(node, key, oldValue, newValue);
+               for (int i = 0; i < l.length; i++) {
+                       final IPreferenceChangeListener listener = (IPreferenceChangeListener) l[i];
+                       ISafeRunnable job = new ISafeRunnable() {
+                               @Override
+                               public void handleException(Throwable exception) {
+                                       // already logged in Platform#run()
+                               }
+
+                               @Override
+                               public void run() throws Exception {
+                                       listener.preferenceChange(event);
+                               }
+                       };
+                       SafeRunner.run(job);
+               }
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/tracing/TraceHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/tracing/TraceHandler.java
new file mode 100644 (file)
index 0000000..fd8bdeb
--- /dev/null
@@ -0,0 +1,295 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.tracing;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.tm.terminal.view.core.activator.CoreBundleActivator;
+
+/**
+ * Helper class to handle tracing using the platforms debug capabilities.
+ */
+public class TraceHandler {
+       /**
+        * The bundle identifier.
+        */
+       private final String identifier;
+
+       /**
+        * The tracer instance.
+        */
+       private Tracer tracer = null;
+
+       /**
+        * The tracer is responsible for writing the trace message to the desired
+        * output media.
+        */
+       protected static class Tracer {
+
+               /**
+                * The bundle identifier.
+                */
+               private final String fIdentifier;
+
+               /**
+                * The qualifier for the default &quot;&lt;bundle identifier&gt;/debugmode&quot;
+                * tracing slot.
+                */
+               private final String fDebugModeQualifier;
+
+               /**
+                * Constructor.
+                *
+                * @param identifier The bundle identifier. Must not be <code>null</code>.
+                */
+               public Tracer(String identifier) {
+                       Assert.isNotNull(identifier);
+                       fIdentifier = identifier;
+
+                       // Initialize the debug mode qualifier
+                       fDebugModeQualifier = fIdentifier + "/debugmode"; //$NON-NLS-1$
+               }
+
+               /**
+                * Returns the value of the debug mode tracing slot.
+                * <p>
+                * If not set, or the value is not an {@link Integer}, the method returns <code>0</code>.
+                *
+                * @return The debug mode value.
+                */
+               protected int getDebugMode() {
+                       try {
+                               String mode = Platform.getDebugOption(fDebugModeQualifier);
+                               if (mode != null && Integer.decode(mode).intValue() > 0) {
+                                       return Integer.decode(mode).intValue();
+                               }
+                       } catch (NumberFormatException e) { /* ignored on purpose */ }
+
+                       return 0;
+               }
+
+               /**
+                * Check if the specified trace slot is enabled.
+                *
+                * @param slotId The name of the slot.
+                * @return <code>true</code> if the slot is defined and enabled, <code>false</code> otherwise.
+                */
+               protected boolean isSlotEnabled(String slotId) {
+                       return fIdentifier != null ? Boolean.parseBoolean(Platform.getDebugOption(fIdentifier + "/" + slotId)) : false; //$NON-NLS-1$
+               }
+
+               /**
+                * Check if tracing is enabled for given mode and slot.
+                *
+                * @param debugMode The debug mode for the current debug.
+                * @param slotId The name of the slot.
+                *
+                * @return <code>true</code> if the debug should be written, <code>false</code> otherwise.
+                */
+               protected final boolean isEnabled(int debugMode, String slotId) {
+                       return getDebugMode() < 0 ||
+                       (debugMode <= getDebugMode() &&
+                                       (slotId == null || slotId.trim().length() == 0 || isSlotEnabled(slotId)));
+               }
+
+               /**
+                * Format the trace message.
+                *
+                * @param message The trace message.
+                * @param debugMode The debug mode.
+                * @param slotId The name of the slot.
+                * @param severity The severity. See {@link IStatus} for valid severity values.
+                * @param clazz The class that calls this tracer.
+                *
+                * @see IStatus
+                */
+               protected String getFormattedDebugMessage(String message, int debugMode, String slotId, int severity, Object clazz) {
+                       StringBuffer debug = new StringBuffer();
+                       if (slotId != null || clazz != null) {
+                               if (clazz != null) {
+                                       String name = clazz instanceof Class<?> ? ((Class<?>)clazz).getSimpleName() : clazz.getClass().getSimpleName();
+                                       debug.append(name.trim().length() > 0 ? name.trim() : clazz instanceof Class<?> ? ((Class<?>)clazz).getName() : clazz.getClass().getName());
+                               }
+                               if (slotId != null) {
+                                       debug.append(" at "); //$NON-NLS-1$
+                                       debug.append(slotId);
+                               }
+                               if (debugMode >= 0) {
+                                       debug.append(" (Mode "); //$NON-NLS-1$
+                                       debug.append(debugMode);
+                                       debug.append(')');
+                               }
+                               debug.append('\n');
+                               debug.append('\t');
+                       }
+                       debug.append(message);
+
+                       return debug.toString();
+               }
+
+               /**
+                * Write the trace message.
+                *
+                * @param message The trace message.
+                * @param debugMode The debug mode.
+                * @param slotId The name of the slot.
+                * @param severity The severity. See {@link IStatus} for valid severity values.
+                * @param clazz The class that calls this tracer.
+                *
+                * @see IStatus
+                */
+               protected void write(String message, int debugMode, String slotId, int severity, Object clazz) {
+                       String formattedMessage = getFormattedDebugMessage(message, debugMode, slotId, severity, clazz);
+                       if (severity == IStatus.ERROR || severity == IStatus.WARNING) {
+                               System.err.println(formattedMessage);
+                       }
+                       else {
+                               System.out.println(formattedMessage);
+                       }
+               }
+
+               /**
+                * Trace the given message with the given debug mode and slot.
+                *
+                * @param message The trace message.
+                * @param debugMode The debug mode.
+                * @param slotId The name of the slot.
+                * @param severity The severity. See {@link IStatus} for valid severity values.
+                * @param clazz The class that calls this tracer.
+                *
+                * @see IStatus
+                */
+               public final void trace(String message, int debugMode, String slotId, int severity, Object clazz) {
+                       if (isEnabled(debugMode, slotId)) {
+                               write(message, debugMode, slotId, severity, clazz);
+                       }
+               }
+       }
+
+       /**
+        * Constructor.
+        * <p>
+        * Initializes the tracing handler with the given bundle identifier.
+        *
+        * @param identifier The bundle identifier or <code>null</code>.
+        */
+       public TraceHandler(String identifier) {
+               this.identifier = identifier != null ? identifier : CoreBundleActivator.getUniqueIdentifier();
+               Assert.isNotNull(this.identifier);
+       }
+
+       /**
+        * Returns the identifier.
+        */
+       protected final String getIdentifier() {
+               return identifier;
+       }
+
+       /**
+        * Returns the tracer instance. Create a new tracer instance
+        * on first invocation.
+        *
+        * @return The tracer instance.
+        */
+       protected Tracer getTracer() {
+               if (tracer == null) {
+                       tracer = new Tracer(identifier);
+               }
+               return tracer;
+       }
+
+       /**
+        * Return the current debug mode.
+        */
+       public final int getDebugMode() {
+               return getTracer().getDebugMode();
+       }
+
+       /**
+        * Check whether a trace slot is enabled. The debug mode defaults
+        * to 0.
+        *
+        * @param slotId The name of the slot.
+        *
+        * @return <code>true</code> if the slot is enabled, <code>false</code> otherwise.
+        */
+       public final boolean isSlotEnabled(String slotId) {
+               return isSlotEnabled(0, slotId);
+       }
+
+       /**
+        * Check whether a trace slot is enabled with the given debug mode.
+        *
+        * @param debugMode The debug mode
+        * @param slotId The name of the slot.
+        *
+        * @return <code>true</code> if the slot is enabled, <code>false</code> otherwise.
+        */
+       public final boolean isSlotEnabled(int debugMode, String slotId) {
+               return getTracer().isEnabled(debugMode, slotId);
+       }
+
+       /**
+        * Trace the given message.
+        * <p>
+        * The message severity will be {@link IStatus#INFO} and the message will be
+        * traced unconditionally.
+        *
+        * @param message The message.
+        * @param clazz The class that calls this tracer or <code>null</code>.
+        */
+       public final void trace(String message, Object clazz) {
+               getTracer().trace(message, 0, null, IStatus.INFO, clazz);
+       }
+
+       /**
+        * Trace the given message.
+        * <p>
+        * The message severity will be {@link IStatus#INFO}.
+        *
+        * @param message The message.
+        * @param debugMode The minimum debug mode that has to be set to write out the message.
+        * @param clazz The class that calls this tracer or <code>null</code>.
+        */
+       public final void trace(String message, int debugMode, Object clazz) {
+               getTracer().trace(message, debugMode, null, IStatus.INFO, clazz);
+       }
+
+       /**
+        * Trace the given message.
+        * <p>
+        * The message severity will be {@link IStatus#INFO} and the debug mode
+        * will default to <code>0</code>.
+        *
+        * @param message The message.
+        * @param slotId The slot that has to be enabled to write out the message.
+        * @param clazz The class that calls this tracer or <code>null</code>.
+        */
+       public final void trace(String message, String slotId, Object clazz) {
+               getTracer().trace(message, 0, slotId, IStatus.INFO, clazz);
+       }
+
+       /**
+        * Trace the given message.
+        *
+        * @param message The message.
+        * @param debugMode The minimum debug mode that has to be set to write out the message.
+        * @param slotId The slot that has to be enabled to write out the message.
+        * @param severity The severity. See {@link IStatus} for valid severity values.
+        * @param clazz The class that calls this tracer or <code>null</code>.
+        *
+        * @see IStatus
+        */
+       public final void trace(String message, int debugMode, String slotId, int severity, Object clazz) {
+               getTracer().trace(message, debugMode, slotId, severity, clazz);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/utils/Env.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/src/org/eclipse/tm/terminal/view/core/utils/Env.java
new file mode 100644 (file)
index 0000000..cdd2c58
--- /dev/null
@@ -0,0 +1,233 @@
+/*******************************************************************************
+ * Copyright (c) 2013, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.core.utils;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osgi.service.environment.Constants;
+
+/**
+ * Environment handling utility methods.
+ */
+public class Env {
+
+       // Reference to the monitor to lock if determining the native environment
+       private final static Object ENV_GET_MONITOR = new Object();
+
+       // Reference to the native environment with the case of the variable names preserved
+       private static Map<String, String> nativeEnvironmentCasePreserved = null;
+
+       /**
+        * Returns the merged environment of the native environment and the passed
+        * in environment. Passed in variables will overwrite the native environment
+        * if the same variables are set there.
+        * <p>
+        * For use with terminals, the parameter <code>terminal</code> should be set to
+        * <code>true</code>. In this case, the method will assure that the <code>TERM</code>
+        * environment variable is always set to <code>ANSI</code> and is not overwritten
+        * by the passed in environment.
+        *
+        * @param envp The environment to set on top of the native environment or <code>null</code>.
+        * @param terminal <code>True</code> if used with an terminal, <code>false</code> otherwise.
+        *
+        * @return The merged environment.
+        */
+       public static String[] getEnvironment(String[] envp, boolean terminal) {
+               // Get the cached native environment
+               Map<String, String> nativeEnv = getNativeEnvironmentCasePreserved();
+               // Make a copy of the native environment so it can be manipulated without changing
+               // the cached environment
+               Map<String, String> env = new LinkedHashMap<String, String>(nativeEnv);
+               // Set the TERM environment variable if in terminal mode
+               if (terminal) env.put("TERM", "xterm"); //$NON-NLS-1$ //$NON-NLS-2$
+
+               // On Windows, the environment variable names are not case-sensitive. However,
+               // we desire to preserve the original case. Build up a translation map between
+               // an all lowercase name and the original environment name
+               Map<String, String> k2n = null;
+               if (Platform.OS_WIN32.equals(Platform.getOS())) {
+                       k2n = new HashMap<String, String>();
+                       for (String name : env.keySet()) {
+                               k2n.put(name.toLowerCase(), name);
+                       }
+               }
+
+               // If a "local" environment is provided, merge it with the native
+               // environment.
+               if (envp != null) {
+                       for (int i = 0; i < envp.length; i++) {
+                               // The full provided variable in form "name=value"
+                               String envpPart = envp[i];
+                               // Split the variable
+                               int eqIdx = envpPart.indexOf('=');
+                               if (eqIdx < 1)
+                                       continue;
+                               String name = envpPart.substring(0, eqIdx);
+                               // Map the variable name to the real environment name (Windows only)
+                               if (Platform.OS_WIN32.equals(Platform.getOS())) {
+                                       if (k2n.containsKey(name.toLowerCase())) {
+                                               String candidate = k2n.get(name.toLowerCase());
+                                               Assert.isNotNull(candidate);
+                                               name = candidate;
+                                       }
+                                       // Filter out environment variables with bad names
+                                       if ("".equals(name.trim()) || name.contains(":")) { //$NON-NLS-1$ //$NON-NLS-2$
+                                               continue;
+                                       }
+                               }
+                               // Get the variable value
+                               String value = envpPart.substring(eqIdx+1);
+                               // Don't overwrite the TERM variable if in terminal mode
+                               if (terminal && "TERM".equals(name)) continue; //$NON-NLS-1$
+                               // If a variable with the name does not exist, just append it
+                               if (!env.containsKey(name) && !"<unset>".equals(value)) { //$NON-NLS-1$
+                                       env.put(name, value);
+                               } else if (env.containsKey(name)) {
+                                       // If the value contains the special placeholder "<unset>", remove the variable from the environment
+                                       if ("<unset>".equals(value)) {//$NON-NLS-1$
+                                               env.remove(name);
+                                       } else {
+                                               // A variable with the name already exist, check if the value is different
+                                               String oldValue = env.get(name);
+                                               if (oldValue != null && !oldValue.equals(value) || oldValue == null && value != null) {
+                                                       env.put(name, value);
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               // Convert into an array of strings
+               List<String> keys = new ArrayList<String>(env.keySet());
+               // On Windows hosts, sort the environment keys
+               if (Platform.OS_WIN32.equals(Platform.getOS())) Collections.sort(keys);
+               Iterator<String> iter = keys.iterator();
+               List<String> strings = new ArrayList<String>(env.size());
+               StringBuilder buffer = null;
+               while (iter.hasNext()) {
+                       String key = iter.next();
+                       buffer = new StringBuilder(key);
+                       buffer.append('=').append(env.get(key));
+                       strings.add(buffer.toString());
+               }
+
+               return strings.toArray(new String[strings.size()]);
+       }
+
+       /**
+        * Determine the native environment.
+        *
+        * @return The native environment, or an empty map.
+        */
+       private static Map<String, String> getNativeEnvironmentCasePreserved() {
+               synchronized (ENV_GET_MONITOR) {
+                       if (nativeEnvironmentCasePreserved == null) {
+                               nativeEnvironmentCasePreserved = new LinkedHashMap<String, String>();
+                               cacheNativeEnvironment(nativeEnvironmentCasePreserved);
+                       }
+                       return new LinkedHashMap<String, String>(nativeEnvironmentCasePreserved);
+               }
+       }
+
+       /**
+        * Query the native environment and store it to the specified cache.
+        *
+        * @param cache The environment cache. Must not be <code>null</code>.
+        */
+       private static void cacheNativeEnvironment(Map<String, String> cache) {
+               Assert.isNotNull(cache);
+
+               try {
+                       String nativeCommand = null;
+                       if (Platform.getOS().equals(Constants.OS_WIN32)) {
+                               nativeCommand = "cmd.exe /C set"; //$NON-NLS-1$
+                       } else if (!Platform.getOS().equals(Constants.OS_UNKNOWN)) {
+                               nativeCommand = "env"; //$NON-NLS-1$
+                       }
+                       if (nativeCommand == null) { return; }
+                       Process process = Runtime.getRuntime().exec(nativeCommand);
+
+                       // read process directly on other platforms
+                       // we need to parse out matching '{' and '}' for function declarations in .bash environments
+                       // pattern is [function name]=() { and we must find the '}' on its own line with no trailing ';'
+                       InputStream stream = process.getInputStream();
+                       InputStreamReader isreader = new InputStreamReader(stream);
+                       BufferedReader reader = new BufferedReader(isreader);
+                       try {
+                               String line = reader.readLine();
+                               while (line != null) {
+                                       String key = null;
+                                       String value = null;
+                                       int func = line.indexOf("=()"); //$NON-NLS-1$
+                                       if (func > 0) {
+                                               key = line.substring(0, func);
+                                               // scan until we find the closing '}' with no following chars
+                                               value = line.substring(func + 1);
+                                               do {
+                                                       line = reader.readLine();
+                                                       if (line == null)
+                                                               break;
+                                                       if (line.equals("}")) //$NON-NLS-1$
+                                                               value += ';';
+                                                       value += ' ' + line;
+                                               } while (!line.equals("}")); //$NON-NLS-1$
+                                               line = reader.readLine();
+                                       } else {
+                                               int separator = line.indexOf('=');
+                                               if (separator > 0) {
+                                                       key = line.substring(0, separator);
+                                                       value = line.substring(separator + 1);
+                                                       StringBuilder bufValue = new StringBuilder(value);
+                                                       line = reader.readLine();
+                                                       if (line != null) {
+                                                               // this line has a '=' read ahead to check next line for '=', might be broken on more
+                                                               // than one line
+                                                               separator = line.indexOf('=');
+                                                               while (separator < 0) {
+                                                                       bufValue.append(line.trim());
+                                                                       line = reader.readLine();
+                                                                       if (line == null) {
+                                                                               // if next line read is the end of the file quit the loop
+                                                                               break;
+                                                                       }
+                                                                       separator = line.indexOf('=');
+                                                               }
+                                                       }
+                                                       value = bufValue.toString();
+                                               }
+                                       }
+                                       if (key != null) {
+                                               cache.put(key, value);
+                                       } else {
+                                               line = reader.readLine();
+                                       }
+                               }
+                       } finally {
+                               reader.close();
+                       }
+               } catch (IOException e) {
+                       // Native environment-fetching code failed.
+                       // This can easily happen and is not useful to log.
+               }
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/tm32.png b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/tm32.png
new file mode 100644 (file)
index 0000000..668b05b
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core/tm32.png differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.classpath b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.classpath
new file mode 100644 (file)
index 0000000..ad32c83
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.gitignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.options b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.options
new file mode 100644 (file)
index 0000000..b396734
--- /dev/null
@@ -0,0 +1 @@
+org.eclipse.tcf.te.ui.terminals.local/debugmode = 0
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.project b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.project
new file mode 100644 (file)
index 0000000..2d1d0bc
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.view.ui.rse</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>0</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.settings/org.eclipse.jdt.core.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..24dad44
--- /dev/null
@@ -0,0 +1,362 @@
+#Tue Oct 11 11:53:38 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=4
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=4
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.settings/org.eclipse.jdt.ui.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..0d73226
--- /dev/null
@@ -0,0 +1,62 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Target Explorer Java STD
+formatter_settings_version=12
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.settings/org.eclipse.pde.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/.settings/org.eclipse.pde.prefs
new file mode 100644 (file)
index 0000000..cf80c8b
--- /dev/null
@@ -0,0 +1,32 @@
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.encodings=2
+compilers.p.build.java.compiler=2
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/META-INF/MANIFEST.MF b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..125d671
--- /dev/null
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.tm.terminal.view.ui.rse;singleton:=true
+Bundle-Version: 4.2.0.qualifier
+Bundle-Activator: org.eclipse.tm.terminal.view.ui.rse.activator.UIPlugin
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.core.expressions;bundle-version="3.4.400",
+ org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.rse.core;bundle-version="3.3.100",
+ org.eclipse.rse.subsystems.files.core;bundle-version="3.3.1",
+ org.eclipse.rse.ui;bundle-version="3.3.100",
+ org.eclipse.tm.terminal.view.core;bundle-version="4.0.0",
+ org.eclipse.tm.terminal.view.ui;bundle-version="4.1.0",
+ org.eclipse.tm.terminal.control;bundle-version="4.0.0",
+ org.eclipse.ui;bundle-version="3.8.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Export-Package: org.eclipse.tm.terminal.view.ui.rse.activator;x-internal:=true,
+ org.eclipse.tm.terminal.view.ui.rse.internal;x-internal:=true,
+ org.eclipse.tm.terminal.view.ui.rse.nls;x-internal:=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/about.html b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/about.html
new file mode 100644 (file)
index 0000000..0f07cf0
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+<p>May 24, 2012</p>    
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/build.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/build.properties
new file mode 100644 (file)
index 0000000..2401156
--- /dev/null
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               about.html,\
+               icons/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/icons/eview16/terminal_view.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/icons/eview16/terminal_view.gif
new file mode 100644 (file)
index 0000000..bbb6a9e
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/icons/eview16/terminal_view.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/plugin.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/plugin.properties
new file mode 100644 (file)
index 0000000..23da4a2
--- /dev/null
@@ -0,0 +1,18 @@
+##################################################################################
+# Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+
+pluginName = Terminal View for RSE
+providerName = Eclipse.org - Target Management
+
+# ----- Commands and Menu contributions -----
+
+command.launch.name=Open Terminal
+command.launch.label=Open Terminal...
+command.launch.tooltip=Open a Terminal
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/plugin.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/plugin.xml
new file mode 100644 (file)
index 0000000..145f3ea
--- /dev/null
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+<!-- Terminal context properties provider contributions -->
+   <extension point="org.eclipse.tm.terminal.view.core.contextPropertiesProviders">
+      <contextPropertiesProvider
+            class="org.eclipse.tm.terminal.view.ui.rse.internal.TerminalContextPropertiesProvider">
+         <enablement>
+            <instanceof value="org.eclipse.rse.core.model.IHost"/>
+         </enablement>
+      </contextPropertiesProvider>
+   </extension>
+
+<!-- Perspective extension contributions -->    
+   <extension point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension targetID="org.eclipse.rse.ui.view.SystemPerspective">
+                <!-- Register the view shortcuts  -->
+         <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
+         <!-- Place the Terminal view relative to the Task List view -->
+         <view
+               id="org.eclipse.tm.terminal.view.ui.TerminalsView"
+               minimized="false"
+               relationship="stack"
+               relative="org.eclipse.ui.views.TaskList"
+               visible="false">
+         </view>
+      </perspectiveExtension>
+   </extension>
+
+<!-- Eclipse core expressions property tester -->
+   <extension point="org.eclipse.core.expressions.propertyTesters">
+      <propertyTester
+            class="org.eclipse.tm.terminal.view.ui.rse.internal.PropertyTester"
+            id="org.eclipse.tm.terminal.view.ui.rse.PropertyTester"
+            namespace="org.eclipse.tm.terminal.view.ui.rse"
+            properties="isVisible"
+            type="org.eclipse.rse.core.model.IRSEModelObject">
+      </propertyTester>
+
+      <propertyTester
+            class="org.eclipse.tm.terminal.view.ui.rse.internal.PropertyTester"
+            id="org.eclipse.tm.terminal.view.ui.rse.PropertyTester2"
+            namespace="org.eclipse.tm.terminal.view.ui.rse"
+            properties="isVisible"
+            type="org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile">
+      </propertyTester>
+   </extension>
+
+<!-- Menu contributions -->
+   <extension point="org.eclipse.ui.menus">
+      <menuContribution locationURI="popup:org.eclipse.rse.ui.view.systemView?after=additions">
+         <command
+               commandId="org.eclipse.tm.terminal.view.ui.rse.command.launch"
+               icon="icons/eview16/terminal_view.gif"
+               id="org.eclipse.tm.terminal.view.ui.rse.commands.launch"
+               label="%command.launch.label"
+               tooltip="%command.launch.tooltip">
+            <visibleWhen checkEnabled="false">
+               <with variable="selection">
+                  <iterate operator="and" ifEmpty="false">
+                     <or>
+                        <adapt type="org.eclipse.rse.core.model.IRSEModelObject">
+                           <test property="org.eclipse.tm.terminal.view.ui.rse.isVisible" value="true" forcePluginActivation="true"/>
+                        </adapt>
+                        <adapt type="org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile">
+                           <test property="org.eclipse.tm.terminal.view.ui.rse.isVisible" value="true" forcePluginActivation="true"/>
+                        </adapt>
+                     </or>
+                  </iterate>
+               </with>
+            </visibleWhen>
+         </command>
+      </menuContribution>
+   </extension>
+
+<!-- Command contributions -->
+   <extension point="org.eclipse.ui.commands">
+      <command
+            categoryId="org.eclipse.tm.terminal.view.ui.commands.category"
+            helpContextId="org.eclipse.tm.terminal.view.ui.rse.command_Launch"
+            id="org.eclipse.tm.terminal.view.ui.rse.command.launch"
+            name="%command.launch.name">
+      </command>
+   </extension>
+
+<!-- Handler contributions -->
+   <extension point="org.eclipse.ui.handlers">
+      <handler
+            class="org.eclipse.tm.terminal.view.ui.rse.internal.LaunchTerminalHandler"
+            commandId="org.eclipse.tm.terminal.view.ui.rse.command.launch">
+         <activeWhen>
+            <with variable="activePartId">
+               <equals value="org.eclipse.rse.ui.view.systemView"/>
+            </with>
+         </activeWhen>
+         <enabledWhen>
+               <with variable="selection">
+                  <count value="1"/>
+                  <iterate operator="and" ifEmpty="false">
+                     <or>
+                        <adapt type="org.eclipse.rse.core.model.IRSEModelObject"/>
+                        <adapt type="org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile"/>
+                     </or>
+                  </iterate>
+               </with>
+         </enabledWhen>
+      </handler>
+   </extension>
+
+</plugin>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/pom.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/pom.xml
new file mode 100644 (file)
index 0000000..d5c39e7
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.0-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.view.ui.rse</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/activator/UIPlugin.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/activator/UIPlugin.java
new file mode 100644 (file)
index 0000000..15821b2
--- /dev/null
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.rse.activator;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.tm.terminal.view.core.tracing.TraceHandler;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class UIPlugin extends AbstractUIPlugin {
+       // The shared instance
+       private static UIPlugin plugin;
+
+       // The trace handler instance
+       private static volatile TraceHandler traceHandler;
+
+       /**
+        * The constructor
+        */
+       public UIPlugin() {
+       }
+
+       /**
+        * Returns the shared instance
+        *
+        * @return the shared instance
+        */
+       public static UIPlugin getDefault() {
+               return plugin;
+       }
+
+       /**
+        * Convenience method which returns the unique identifier of this plugin.
+        */
+       public static String getUniqueIdentifier() {
+               if (getDefault() != null && getDefault().getBundle() != null) {
+                       return getDefault().getBundle().getSymbolicName();
+               }
+               return "org.eclipse.tm.terminal.view.ui.rse"; //$NON-NLS-1$
+       }
+
+       /**
+        * Returns the bundles trace handler.
+        *
+        * @return The bundles trace handler.
+        */
+       public static TraceHandler getTraceHandler() {
+               if (traceHandler == null) {
+                       traceHandler = new TraceHandler(getUniqueIdentifier());
+               }
+               return traceHandler;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void start(BundleContext context) throws Exception {
+               super.start(context);
+               plugin = this;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+        */
+       @Override
+    public void stop(BundleContext context) throws Exception {
+               plugin = null;
+               super.stop(context);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)
+        */
+       @Override
+       protected void initializeImageRegistry(ImageRegistry registry) {
+               super.initializeImageRegistry(registry);
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>Image</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>Image</code> object instance or <code>null</code>.
+        */
+       public static Image getImage(String key) {
+               return getDefault().getImageRegistry().get(key);
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>ImageDescriptor</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>ImageDescriptor</code> object instance or <code>null</code>.
+        */
+       public static ImageDescriptor getImageDescriptor(String key) {
+               return getDefault().getImageRegistry().getDescriptor(key);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/internal/LaunchTerminalHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/internal/LaunchTerminalHandler.java
new file mode 100644 (file)
index 0000000..596e80f
--- /dev/null
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.rse.internal;
+
+import java.util.Map;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.rse.core.filters.ISystemFilterReference;
+import org.eclipse.rse.core.model.IHost;
+import org.eclipse.rse.core.model.IRSEModelObject;
+import org.eclipse.rse.core.subsystems.ISubSystem;
+import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
+import org.eclipse.tm.terminal.view.ui.internal.dialogs.LaunchTerminalSettingsDialog;
+import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Launch terminal handler implementation.
+ */
+@SuppressWarnings("restriction")
+public class LaunchTerminalHandler extends AbstractHandler {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+        */
+    @Override
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               // Get the active shell
+               Shell shell = HandlerUtil.getActiveShell(event);
+               // Get the current selection
+               ISelection selection = HandlerUtil.getCurrentSelection(event);
+               if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+                       // The handler is enabled only if just one element is selected
+                       Object element = ((IStructuredSelection) selection).getFirstElement();
+                       if (element instanceof IRSEModelObject || element instanceof IRemoteFile) {
+                               // Determine the host
+                               IHost host = null;
+
+                               if (element instanceof IHost) host = (IHost) element;
+                               if (host == null && element instanceof ISubSystem) host = ((ISubSystem) element).getHost();
+                               if (host == null && element instanceof ISystemFilterReference) host = ((ISystemFilterReference) element).getSubSystem().getHost();
+                               if (host == null && element instanceof IRemoteFile) host = ((IRemoteFile) element).getHost();
+
+                               if (host != null) {
+                                       // Open the launch terminal settings dialog with the SSH panel only
+                                       LaunchTerminalSettingsDialog dialog = new LaunchTerminalSettingsDialog(shell) {
+                                               @Override
+                                               protected boolean isFiltered(ISelection selection, ILauncherDelegate delegate) {
+                                                       Assert.isNotNull(delegate);
+                                                   return !"org.eclipse.tm.terminal.connector.ssh.launcher.ssh".equals(delegate.getId()); //$NON-NLS-1$
+                                               }
+                                       };
+                                       dialog.setSelection(new StructuredSelection(host));
+
+                                       if (dialog.open() == Window.OK) {
+                                               // Get the terminal settings from the dialog
+                                               Map<String, Object> properties = dialog.getSettings();
+                                               if (properties != null) {
+                                                       String delegateId = (String)properties.get(ITerminalsConnectorConstants.PROP_DELEGATE_ID);
+                                                       Assert.isNotNull(delegateId);
+                                                       ILauncherDelegate delegate = LauncherDelegateManager.getInstance().getLauncherDelegate(delegateId, false);
+                                                       Assert.isNotNull(delegateId);
+                                                       delegate.execute(properties, null);
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               return null;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/internal/PropertyTester.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/internal/PropertyTester.java
new file mode 100644 (file)
index 0000000..8d24c37
--- /dev/null
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.rse.internal;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.rse.core.filters.ISystemFilterReference;
+import org.eclipse.rse.core.model.IHost;
+import org.eclipse.rse.core.subsystems.ISubSystem;
+import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile;
+
+
+
+/**
+ * Terminal RSE add-on property tester implementation.
+ */
+public class PropertyTester extends org.eclipse.core.expressions.PropertyTester {
+       // Supported system type id's
+       private final static String[] VALID_SYSTEM_TYPES = new String[] {
+                       "org.eclipse.rse.systemtype.linux", //$NON-NLS-1$
+                       "org.eclipse.rse.systemtype.unix", //$NON-NLS-1$
+                       "org.eclipse.rse.systemtype.aix", //$NON-NLS-1$
+                       "org.eclipse.rse.systemtype.ssh" //$NON-NLS-1$
+       };
+
+       private final static List<String> VALID_SYSTEM_TYPES_LIST = Arrays.asList(VALID_SYSTEM_TYPES);
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
+        */
+       @Override
+       public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+               // Determine the host object
+               IHost host = null;
+
+               if (receiver instanceof IHost) host = (IHost) receiver;
+               if (host == null && receiver instanceof ISubSystem) host = ((ISubSystem) receiver).getHost();
+               if (host == null && receiver instanceof ISystemFilterReference) host = ((ISystemFilterReference) receiver).getSubSystem().getHost();
+               if (host == null && receiver instanceof IRemoteFile) host = ((IRemoteFile) receiver).getHost();
+
+               if (host != null) {
+                       if ("isVisible".equals(property) && expectedValue instanceof Boolean) { //$NON-NLS-1$
+                               String systemTypeID = host.getSystemType().getId();
+                               boolean validID = systemTypeID != null ? VALID_SYSTEM_TYPES_LIST.contains(systemTypeID) : false;
+                               return ((Boolean)expectedValue).booleanValue() == validID;
+                       }
+               }
+
+               return false;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/internal/TerminalContextPropertiesProvider.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/internal/TerminalContextPropertiesProvider.java
new file mode 100644 (file)
index 0000000..3bae85c
--- /dev/null
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.rse.internal;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.rse.core.model.IHost;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.IContextPropertiesConstants;
+
+/**
+ * Terminal context properties provider implementation.
+ */
+public class TerminalContextPropertiesProvider implements ITerminalContextPropertiesProvider {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider#getTargetAddress(java.lang.Object)
+        */
+       @Override
+       public Map<String, String> getTargetAddress(Object context) {
+               if (context instanceof IHost) {
+                       IHost host = (IHost) context;
+
+                       Map<String, String> props = new HashMap<String, String>();
+                       props.put(IContextPropertiesConstants.PROP_ADDRESS, host.getHostName());
+                       props.put(IContextPropertiesConstants.PROP_NAME, host.getName());
+
+                       return props;
+               }
+
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider#getProperty(java.lang.Object, java.lang.String)
+        */
+       @Override
+       public Object getProperty(Object context, String key) {
+               if (context instanceof IHost) {
+                       IHost host = (IHost) context;
+
+                       if (IContextPropertiesConstants.PROP_DEFAULT_USER.equals(key)) {
+                               String user = host.getDefaultUserId();
+                               if (user != null && !"".equals(user.trim())) { //$NON-NLS-1$
+                                       return user;
+                               }
+                       }
+
+                       if (IContextPropertiesConstants.PROP_DEFAULT_ENCODING.equals(key)) {
+                               String encoding = host.getDefaultEncoding(true);
+                               if (encoding != null && !"".equals(encoding)) { //$NON-NLS-1$
+                                       return encoding;
+                               }
+                       }
+               }
+               return null;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/nls/Messages.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/nls/Messages.java
new file mode 100644 (file)
index 0000000..0a9517f
--- /dev/null
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.rse.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Externalized strings management.
+ */
+public class Messages extends NLS {
+
+       // The plug-in resource bundle name
+       private static final String BUNDLE_NAME = "org.eclipse.tm.terminal.view.ui.rse.nls.Messages"; //$NON-NLS-1$
+
+       /**
+        * Static constructor.
+        */
+       static {
+               // Load message values from bundle file
+               NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+       }
+
+       // **** Declare externalized string id's down here *****
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/nls/Messages.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui.rse/src/org/eclipse/tm/terminal/view/ui/rse/nls/Messages.properties
new file mode 100644 (file)
index 0000000..31897b0
--- /dev/null
@@ -0,0 +1,10 @@
+###############################################################################
+# Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.classpath b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.classpath
new file mode 100644 (file)
index 0000000..ad32c83
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.gitignore b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.gitignore
new file mode 100644 (file)
index 0000000..ae3c172
--- /dev/null
@@ -0,0 +1 @@
+/bin/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.options b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.options
new file mode 100644 (file)
index 0000000..2b37de4
--- /dev/null
@@ -0,0 +1,3 @@
+org.eclipse.tm.terminal.view.ui/debugmode = 0
+org.eclipse.tm.terminal.view.ui/trace/outputStreamMonitor = false
+org.eclipse.tm.terminal.view.ui/trace/launchTerminalCommandHandler = false
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.project b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.project
new file mode 100644 (file)
index 0000000..3686758
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.view.ui</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>1329502074611</id>
+                       <name></name>
+                       <type>10</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-name-matches-false-false-target</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.settings/org.eclipse.jdt.core.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..5cb95e2
--- /dev/null
@@ -0,0 +1,362 @@
+#Fri Oct 07 16:14:53 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=4
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=4
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.settings/org.eclipse.jdt.ui.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..0d73226
--- /dev/null
@@ -0,0 +1,62 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Target Explorer Java STD
+formatter_settings_version=12
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.settings/org.eclipse.pde.prefs b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/.settings/org.eclipse.pde.prefs
new file mode 100644 (file)
index 0000000..cf80c8b
--- /dev/null
@@ -0,0 +1,32 @@
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.encodings=2
+compilers.p.build.java.compiler=2
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=1
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=1
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/META-INF/MANIFEST.MF b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..f0e53fe
--- /dev/null
@@ -0,0 +1,40 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.tm.terminal.view.ui;singleton:=true
+Bundle-Version: 4.2.100.qualifier
+Bundle-Activator: org.eclipse.tm.terminal.view.ui.activator.UIPlugin
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.core.expressions;bundle-version="3.4.400",
+ org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.core.resources;bundle-version="3.8.1";resolution:=optional,
+ org.eclipse.core.variables;bundle-version="3.2.600",
+ org.eclipse.debug.ui;bundle-version="3.8.1";resolution:=optional,
+ org.eclipse.egit.ui;bundle-version="2.0.0";resolution:=optional,
+ org.eclipse.tm.terminal.view.core;bundle-version="4.0.0",
+ org.eclipse.tm.terminal.control;bundle-version="4.0.0",
+ org.eclipse.ui;bundle-version="3.8.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Export-Package: org.eclipse.tm.terminal.view.ui.actions,
+ org.eclipse.tm.terminal.view.ui.activator;x-internal:=true,
+ org.eclipse.tm.terminal.view.ui.controls,
+ org.eclipse.tm.terminal.view.ui.help,
+ org.eclipse.tm.terminal.view.ui.interfaces,
+ org.eclipse.tm.terminal.view.ui.interfaces.tracing;x-internal:=true,
+ org.eclipse.tm.terminal.view.ui.internal;x-internal:=true,
+ org.eclipse.tm.terminal.view.ui.internal.dialogs;x-internal:=true,
+ org.eclipse.tm.terminal.view.ui.internal.handler;x-internal:=true,
+ org.eclipse.tm.terminal.view.ui.launcher,
+ org.eclipse.tm.terminal.view.ui.listeners,
+ org.eclipse.tm.terminal.view.ui.local.showin;x-internal:=true,
+ org.eclipse.tm.terminal.view.ui.manager,
+ org.eclipse.tm.terminal.view.ui.nls;x-internal:=true,
+ org.eclipse.tm.terminal.view.ui.panels,
+ org.eclipse.tm.terminal.view.ui.preferences;x-internal:=true,
+ org.eclipse.tm.terminal.view.ui.services,
+ org.eclipse.tm.terminal.view.ui.streams,
+ org.eclipse.tm.terminal.view.ui.tabs,
+ org.eclipse.tm.terminal.view.ui.view,
+ org.eclipse.tm.terminal.view.ui.view.showin;x-internal:=true
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/about.html b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/about.html
new file mode 100644 (file)
index 0000000..0f07cf0
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+<p>May 24, 2012</p>    
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/build.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/build.properties
new file mode 100644 (file)
index 0000000..b92d23a
--- /dev/null
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties,\
+               plugin.xml,\
+               about.html,\
+               icons/,\
+               contexts.xml
+src.includes = schema/
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/contexts.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/contexts.xml
new file mode 100644 (file)
index 0000000..bb0f006
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<contexts>
+   <context id="LaunchTerminalSettingsDialog">
+      <description>Select the terminal type and specify the connections settings to connect a new terminal.</description>
+   </context>
+   <context id="EncodingSelectionDialog">
+      <description>Select the new encoding for the active terminal.</description>
+   </context>
+   <context id="ExternalExecutablesDialog">
+      <description>Add or modify an external executable added to the 'Show in Local Terminal' context menu.</description>
+   </context>
+</contexts>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/command_input_field.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/command_input_field.gif
new file mode 100644 (file)
index 0000000..9e3a547
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/command_input_field.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/lock_co.png b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/lock_co.png
new file mode 100644 (file)
index 0000000..df111d4
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/lock_co.png differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/lock_co@2x.png b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/lock_co@2x.png
new file mode 100644 (file)
index 0000000..df6d431
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/lock_co@2x.png differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/new_terminal_view.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/new_terminal_view.gif
new file mode 100644 (file)
index 0000000..0089626
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/clcl16/new_terminal_view.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/command_input_field.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/command_input_field.gif
new file mode 100644 (file)
index 0000000..f538ca7
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/command_input_field.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/disconnect.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/disconnect.gif
new file mode 100644 (file)
index 0000000..1ca9213
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/disconnect.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/lock_co.png b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/lock_co.png
new file mode 100644 (file)
index 0000000..6f06196
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/lock_co.png differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/lock_co@2x.png b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/lock_co@2x.png
new file mode 100644 (file)
index 0000000..692fa10
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/lock_co@2x.png differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/new_terminal_view.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/new_terminal_view.gif
new file mode 100644 (file)
index 0000000..25adc24
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/dlcl16/new_terminal_view.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/command_input_field.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/command_input_field.gif
new file mode 100644 (file)
index 0000000..f538ca7
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/command_input_field.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/disconnect.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/disconnect.gif
new file mode 100644 (file)
index 0000000..d61dd77
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/disconnect.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/lock_co.png b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/lock_co.png
new file mode 100644 (file)
index 0000000..df111d4
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/lock_co.png differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/lock_co@2x.png b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/lock_co@2x.png
new file mode 100644 (file)
index 0000000..df6d431
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/lock_co@2x.png differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/new_terminal_view.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/new_terminal_view.gif
new file mode 100644 (file)
index 0000000..b81882b
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/elcl16/new_terminal_view.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/eview16/console_view.png b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/eview16/console_view.png
new file mode 100644 (file)
index 0000000..ca77aee
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/eview16/console_view.png differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/eview16/console_view@2x.png b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/eview16/console_view@2x.png
new file mode 100644 (file)
index 0000000..54ecae2
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/eview16/console_view@2x.png differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/eview16/terminal_view.gif b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/eview16/terminal_view.gif
new file mode 100644 (file)
index 0000000..bbb6a9e
Binary files /dev/null and b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/icons/eview16/terminal_view.gif differ
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/plugin.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/plugin.properties
new file mode 100644 (file)
index 0000000..fdd4f54
--- /dev/null
@@ -0,0 +1,73 @@
+##################################################################################
+# Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+##################################################################################
+
+pluginName = Terminal View
+providerName = Eclipse.org - Target Management
+
+# ----- Terminal View -----
+
+ViewCategory.name=Terminal
+
+TerminalsView.name=Terminal
+TerminalsView.name.old=Terminals (Old)
+TerminalsView.context.name=In Terminal View
+TerminalsView.context.description=Show modified keyboard shortcuts in context menu
+
+# ----- Terminal Connectors -----
+
+TerminalConnector.streams=Streams Connector (hidden)
+
+# ----- Terminal Launcher Delegates -----
+
+StreamsLauncherDelegate.label=Streams Terminal
+
+# ----- Commands and Menu contributions -----
+command.category.name=Terminal Commands
+
+toolbar.terminal.label=Terminal
+
+command.launch.selection.name=Open Terminal on Selection
+command.launch.name=Open Terminal
+command.launch.label=Open Terminal...
+command.launch.tooltip=Open a Terminal
+
+command.disconnect.name=Disconnect Terminal
+command.disconnect.label=Disconnect
+command.disconnect.tooltip=Disconnect Terminal Connection
+
+command.newview.name=New Terminal View
+
+menu.showIn.label = Show in Local Terminal
+menu.showIn.mnemonic=I
+
+LocalLauncherDelegate.label=Local Terminal
+
+command.launch.name=Open Local Terminal on Selection
+
+menu.showIn.localterminal.label = Terminal
+
+TerminalConnector.local=Local
+
+# -----  Extension Points  -----
+
+ExtensionPoint.launcherDelegates.name=Terminal Launcher Delegates
+
+# -----  Activity contributions  -----
+
+activities.category.terminals.name=Terminal
+activities.category.terminals.description=Use the terminal to connect to remote hosts via telnet, ssh and others.
+
+activities.activity.terminals.views.name=Terminal Views
+activities.activity.terminals.views.description=Terminal related views. 
+
+# ----- Preference Pages -----
+
+preference.page.name=Local Terminal
+
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/plugin.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/plugin.xml
new file mode 100644 (file)
index 0000000..569d0c4
--- /dev/null
@@ -0,0 +1,470 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+<!-- Extension points -->
+   <extension-point id="launcherDelegates" name="%ExtensionPoint.launcherDelegates.name" schema="schema/launcherDelegates.exsd"/>
+
+<!-- View contributions -->
+   <extension point="org.eclipse.ui.views">
+      <category
+            id="org.eclipse.tm.terminal.view.ui.views.category"
+            name="%ViewCategory.name">
+      </category>
+
+      <view
+            allowMultiple="true"
+            category="org.eclipse.tm.terminal.view.ui.views.category"
+            class="org.eclipse.tm.terminal.view.ui.view.TerminalsView"
+            icon="icons/eview16/terminal_view.gif"
+            id="org.eclipse.tm.terminal.view.ui.TerminalsView"
+            name="%TerminalsView.name">
+      </view>
+
+      <!-- Bug 466644: Contribute another view with the old (TCF) ID to handle the ID change -->
+      <!-- The sole purpose of this view is to close itself when it's in an old workspace/persepctive -->
+      <view
+            allowMultiple="true"
+            class="org.eclipse.tm.terminal.view.ui.view.OldTerminalsViewHandler"
+            icon="icons/eview16/terminal_view.gif"
+            id="org.eclipse.tcf.te.ui.terminals.TerminalsView"
+            name="%TerminalsView.name.old">
+      </view>
+    </extension>
+
+<!-- Perspective extension contributions -->    
+   <extension point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension targetID="org.eclipse.tcf.te.ui.perspective">
+                <!-- Register the view shortcuts  -->
+         <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
+         <!-- Place the Terminal view relative to the Task List view -->
+         <view
+               id="org.eclipse.tm.terminal.view.ui.TerminalsView"
+               minimized="false"
+               relationship="stack"
+               relative="org.eclipse.ui.views.TaskList"
+               visible="false">
+         </view>
+      </perspectiveExtension>
+
+      <perspectiveExtension targetID="org.eclipse.ui.resourcePerspective">
+                <!-- Register the view shortcuts  -->
+         <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
+         <!-- Place the Terminal view relative to the Task List view -->
+         <view
+               id="org.eclipse.tm.terminal.view.ui.TerminalsView"
+               minimized="false"
+               relationship="stack"
+               relative="org.eclipse.ui.views.TaskList"
+               visible="false">
+         </view>
+      </perspectiveExtension>
+
+      <perspectiveExtension targetID="org.eclipse.debug.ui.DebugPerspective">
+                <!-- Register the view shortcuts  -->
+         <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
+         <!-- Place the Terminal view relative to the Task List view -->
+         <view
+               id="org.eclipse.tm.terminal.view.ui.TerminalsView"
+               minimized="false"
+               relationship="stack"
+               relative="org.eclipse.ui.views.TaskList"
+               visible="false">
+         </view>
+      </perspectiveExtension>
+
+      <perspectiveExtension targetID="org.eclipse.cdt.ui.CPerspective">
+                <!-- Register the view shortcuts  -->
+         <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
+         <!-- Place the Terminal view relative to the Task List view -->
+         <view
+               id="org.eclipse.tm.terminal.view.ui.TerminalsView"
+               minimized="false"
+               relationship="stack"
+               relative="org.eclipse.ui.views.TaskList"
+               visible="false">
+         </view>
+      </perspectiveExtension>
+
+      <perspectiveExtension targetID="org.eclipse.jdt.ui.JavaPerspective">
+                <!-- Register the view shortcuts  -->
+         <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
+         <!-- Place the Terminal view relative to the Task List view -->
+         <view
+               id="org.eclipse.tm.terminal.view.ui.TerminalsView"
+               minimized="false"
+               relationship="stack"
+               relative="org.eclipse.ui.views.ProblemView"
+               visible="false">
+         </view>
+      </perspectiveExtension>
+
+      <perspectiveExtension targetID="org.eclipse.pde.ui.PDEPerspective">
+                <!-- Register the view shortcuts  -->
+         <viewShortcut id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
+         <!-- Place the Terminal view relative to the Task List view -->
+         <view
+               id="org.eclipse.tm.terminal.view.ui.TerminalsView"
+               minimized="false"
+               relationship="stack"
+               relative="org.eclipse.ui.views.ProblemView"
+               visible="false">
+         </view>
+      </perspectiveExtension>
+      
+      <perspectiveExtension targetID="*">
+         <!-- Show In shortcut -->
+         <showInPart id="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
+      </perspectiveExtension>
+   </extension>
+
+<!-- Terminal connector contributions -->
+   <extension point="org.eclipse.tm.terminal.control.connectors">
+      <connector 
+                 name="%TerminalConnector.streams"
+                 id="org.eclipse.tm.terminal.connector.streams.StreamsConnector"
+                 hidden="true"
+                 class="org.eclipse.tm.terminal.view.ui.streams.StreamsConnector"/>
+   </extension>
+
+<!-- Preferences contributions -->
+   <extension point="org.eclipse.core.expressions.propertyTesters">
+      <propertyTester
+            class="org.eclipse.tm.terminal.view.ui.internal.PropertyTester"
+            id="org.eclipse.tm.terminal.view.ui.PropertyTester"
+            namespace="org.eclipse.tm.terminal.view.ui"
+            properties="hasApplicableLauncherDelegates,canDisconnect"
+            type="java.lang.Object">
+      </propertyTester>
+   </extension>
+   <extension point="org.eclipse.tm.terminal.view.ui.launcherDelegates">
+      <delegate
+            class="org.eclipse.tm.terminal.view.ui.streams.StreamsLauncherDelegate"
+            hidden="true"
+            id="org.eclipse.tm.terminal.connector.streams.launcher.streams"
+            label="%StreamsLauncherDelegate.label">
+      </delegate>
+   </extension>
+   <extension point="org.eclipse.ui.menus">
+      <menuContribution locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
+         <toolbar
+               id="org.eclipse.tm.terminal.view.ui.toolbar"
+               label="%toolbar.terminal.label">
+                <command
+                      commandId="org.eclipse.tm.terminal.view.ui.command.launchToolbar"
+                      icon="icons/eview16/console_view.png"
+                      id="org.eclipse.tm.terminal.view.ui.commands.launchToolbar"
+                      label="%command.launch.label"
+                      style="push"
+                      tooltip="%command.launch.tooltip">
+                </command>
+         </toolbar>
+      </menuContribution>
+      <menuContribution locationURI="toolbar:org.eclipse.tm.terminal.view.ui.TerminalsView">
+         <command
+               commandId="org.eclipse.tm.terminal.view.ui.command.launchToolbar"
+               icon="icons/eview16/console_view.png"
+               id="org.eclipse.tm.terminal.view.ui.commands.launchToolbarTerminalsView"
+               label="%command.launch.label"
+               style="push"
+               tooltip="%command.launch.tooltip">
+         </command>
+         <command
+               commandId="org.eclipse.tm.terminal.view.ui.command.disconnect"
+               icon="icons/elcl16/disconnect.gif"
+               id="org.eclipse.tm.terminal.view.ui.commands.disconnect"
+               label="%command.disconnect.label"
+               style="push"
+               tooltip="%command.disconnect.tooltip">
+         </command>
+      </menuContribution>
+      <menuContribution locationURI="popup:org.eclipse.tm.terminal.view.ui.TerminalsView?after=additions">
+         <command
+               commandId="org.eclipse.tm.terminal.maximize"
+               id="org.eclipse.tm.terminal.view.ui.commands.maximizePart"
+               label="Maximize View"
+               style="push">
+         </command>
+         <command
+               commandId="org.eclipse.tm.terminal.quickaccess"
+               id="org.eclipse.tm.terminal.view.ui.commands.quickAccess"
+               label="Quick Access"
+               style="push">
+         </command>
+      </menuContribution>
+
+      <!-- Project Explorer "Show In" contribution -->
+      <menuContribution locationURI="popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu?before=group.edit">
+         <menu
+               id="org.eclipse.tm.terminal.view.ui.ProjectExplorer.menu.showIn"
+               label="%menu.showIn.label"
+               mnemonic="%menu.showIn.mnemonic">
+             <separator name="additions" visible="false"/>
+                <dynamic
+                      class="org.eclipse.tm.terminal.view.ui.local.showin.DynamicContributionItems"
+                      id="org.eclipse.tm.terminal.connector.local.LocalLauncherDynamicContributionItems">
+                   <visibleWhen
+                         checkEnabled="false">
+                      <or>
+                             <with variable="selection">
+                                <iterate operator="and" ifEmpty="false">
+                                   <adapt type="org.eclipse.core.resources.IResource">
+                                     <not>
+                                        <!-- The JDT Project Explorer contributions are adding the "Navigate -> Show In" quick menu.
+                                             See o.e.jdt.internal.ui.navigator.JavaNavigatorActionProvider -->
+                                        <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature" />
+                                     </not> 
+                                   </adapt>
+                                </iterate>
+                             </with>
+                         <and>
+                                     <with variable="selection">
+                                        <iterate operator="and" ifEmpty="false">
+                                           <adapt type="org.eclipse.core.resources.IResource">
+                                                <!-- The JDT Project Explorer contributions are adding the "Navigate -> Show In" quick menu.
+                                                     See o.e.jdt.internal.ui.navigator.JavaNavigatorActionProvider -->
+                                                <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature" />
+                                           </adapt>
+                                        </iterate>
+                                     </with>
+                                 <with
+                                       variable="org.eclipse.tm.terminal.external.executable.configured">
+                                    <equals
+                                          value="TRUE">
+                                    </equals>
+                                 </with>
+                         </and>
+                      </or>
+                   </visibleWhen>
+                </dynamic>
+         </menu>
+      </menuContribution>
+
+      <!-- JDT Package Explorer "Show In" contribution -->
+      <menuContribution locationURI="popup:org.eclipse.jdt.ui.PackageExplorer?before=group.edit">
+         <menu
+               id="org.eclipse.tm.terminal.view.ui.PackageExplorer.menu.showIn"
+               label="%menu.showIn.label"
+               mnemonic="%menu.showIn.mnemonic">
+             <separator name="additions" visible="false"/>
+                <dynamic
+                      class="org.eclipse.tm.terminal.view.ui.local.showin.DynamicContributionItems"
+                      id="org.eclipse.tm.terminal.connector.local.LocalLauncherDynamicContributionItems">
+                   <visibleWhen
+                         checkEnabled="false">
+                      <or>
+                             <with variable="selection">
+                                <iterate operator="and" ifEmpty="false">
+                                   <adapt type="org.eclipse.core.resources.IResource">
+                                     <not>
+                                        <!-- The JDT Project Explorer contributions are adding the "Navigate -> Show In" quick menu.
+                                             See o.e.jdt.internal.ui.navigator.JavaNavigatorActionProvider -->
+                                        <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature" />
+                                     </not> 
+                                   </adapt>
+                                </iterate>
+                             </with>
+                         <and>
+                                     <with variable="selection">
+                                        <iterate operator="and" ifEmpty="false">
+                                           <adapt type="org.eclipse.core.resources.IResource">
+                                                <!-- The JDT Project Explorer contributions are adding the "Navigate -> Show In" quick menu.
+                                                     See o.e.jdt.internal.ui.navigator.JavaNavigatorActionProvider -->
+                                                <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.jdt.core.javanature" />
+                                           </adapt>
+                                        </iterate>
+                                     </with>
+                                 <with
+                                       variable="org.eclipse.tm.terminal.external.executable.configured">
+                                    <equals
+                                          value="TRUE">
+                                    </equals>
+                                 </with>
+                         </and>
+                      </or>
+                   </visibleWhen>
+                </dynamic>
+         </menu>
+      </menuContribution>
+            
+   </extension>
+   <extension point="org.eclipse.ui.commands">
+      <category
+            id="org.eclipse.tm.terminal.view.ui.commands.category"
+            name="%command.category.name">
+      </category>
+   
+      <command
+            categoryId="org.eclipse.tm.terminal.view.ui.commands.category"
+            helpContextId="org.eclipse.tm.terminal.view.ui.command_Launch"
+            id="org.eclipse.tm.terminal.view.ui.command.launch"
+            name="%command.launch.selection.name">
+      </command>
+      <command
+            categoryId="org.eclipse.tm.terminal.view.ui.commands.category"
+            helpContextId="org.eclipse.tm.terminal.view.ui.command_Launch"
+            id="org.eclipse.tm.terminal.view.ui.command.launchToolbar"
+            name="%command.launch.name">
+      </command>
+      <command
+            categoryId="org.eclipse.tm.terminal.view.ui.commands.category"
+            helpContextId="org.eclipse.tm.terminal.view.ui.command_Disconnect"
+            id="org.eclipse.tm.terminal.view.ui.command.disconnect"
+            name="%command.disconnect.name">
+      </command>
+      <command
+            categoryId="org.eclipse.tm.terminal.view.ui.commands.category"
+            helpContextId="org.eclipse.tm.terminal.view.ui.command_NewView"
+            id="org.eclipse.tm.terminal.view.ui.command.newview"
+            name="%command.newview.name">
+      </command>
+   </extension>
+   <extension point="org.eclipse.ui.bindings">
+      <key
+            commandId="org.eclipse.tm.terminal.view.ui.command.launchToolbar"
+            contextId="org.eclipse.ui.contexts.window"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="CTRL+SHIFT+M3+T"/> <!-- Bug 435111: Don't use M1 since COMMAND+Option T already taken on Mac -->
+   </extension>
+   <extension point="org.eclipse.ui.handlers">
+      <handler
+            class="org.eclipse.tm.terminal.view.ui.internal.handler.LaunchTerminalCommandHandler"
+            commandId="org.eclipse.tm.terminal.view.ui.command.launch">
+      </handler>
+      <handler
+            class="org.eclipse.tm.terminal.view.ui.internal.handler.LaunchTerminalCommandHandler"
+            commandId="org.eclipse.tm.terminal.view.ui.command.launchToolbar">
+      </handler>
+      <handler
+            class="org.eclipse.tm.terminal.view.ui.internal.handler.DisconnectTerminalCommandHandler"
+            commandId="org.eclipse.tm.terminal.view.ui.command.disconnect">
+            <enabledWhen>
+               <with variable="activePart">
+                  <instanceof value="org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView"/>
+                  <test property="org.eclipse.tm.terminal.view.ui.canDisconnect" value="true"/>
+               </with>
+            </enabledWhen>
+      </handler>
+      
+      <handler
+            class="org.eclipse.tm.terminal.view.ui.internal.handler.MaximizeViewHandler"
+            commandId="org.eclipse.tm.terminal.maximize">
+            <activeWhen>
+               <with variable="activePartId">
+                  <equals value="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
+               </with>
+            </activeWhen>
+      </handler>
+      
+      <handler
+            class="org.eclipse.tm.terminal.view.ui.internal.handler.QuickAccessHandler"
+            commandId="org.eclipse.tm.terminal.quickaccess">
+            <activeWhen>
+               <with variable="activePartId">
+                  <equals value="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
+               </with>
+            </activeWhen>
+      </handler>
+
+      <handler
+            class="org.eclipse.tm.terminal.view.ui.internal.handler.NewTerminalViewHandler"
+            commandId="org.eclipse.tm.terminal.view.ui.command.newview">
+            <activeWhen>
+               <with variable="activePartId">
+                  <equals value="org.eclipse.tm.terminal.view.ui.TerminalsView"/>
+               </with>
+            </activeWhen>
+      </handler>
+   </extension>
+   <extension point="org.eclipse.help.contexts">
+      <contexts
+            file="contexts.xml">
+      </contexts>
+   </extension>
+   <extension point="org.eclipse.ui.activities">
+      <category
+            description="%activities.category.terminals.description"
+            id="org.eclipse.tm.terminal.view.ui.category"
+            name="%activities.category.terminals.name">
+      </category>
+      
+      <activity
+            description="%activities.activity.terminals.views.description"
+            id="org.eclipse.tm.terminal.view.ui.activity.views"
+            name="%activities.activity.terminals.views.name">
+      </activity>
+
+      <activityPatternBinding
+            activityId="org.eclipse.tm.terminal.view.ui.activity.views"
+            pattern="org\.eclipse\.tm\.terminal\.view\.ui/org\.eclipse\.tm\.terminal\.view\.ui\.TerminalsView">
+      </activityPatternBinding>
+      <activityPatternBinding
+            activityId="org.eclipse.tm.terminal.view.ui.activity.views"
+            pattern="org\.eclipse\.tm\.terminal\.view\.ui/org\.eclipse\.tm\.terminal\.view\.ui\.toolbar">
+      </activityPatternBinding>
+      <activityPatternBinding
+            activityId="org.eclipse.tm.terminal.view.ui.activity.views"
+            pattern="org\.eclipse\.tm\.terminal\.view\.ui/org\.eclipse\.tm\.terminal\.view\.ui\.commands\..*">
+      </activityPatternBinding>
+      
+      <categoryActivityBinding
+            activityId="org.eclipse.tm.terminal.view.ui.activity.views"
+            categoryId="org.eclipse.tm.terminal.view.ui.category">
+      </categoryActivityBinding>
+      
+      <defaultEnablement
+            id="org.eclipse.tm.terminal.view.ui.activity.views">
+      </defaultEnablement>
+     
+      <!-- Hide the old TCF Terminals (Migration Only) View from the View Shortcuts Menu -->
+      <activity
+            id="org.eclipse.tm.terminal.view.ui.activity.oldview"
+            name="Terminal Views (Old)">
+      </activity>
+      
+      <activityPatternBinding
+            activityId="org.eclipse.tm.terminal.view.ui.activity.oldview"
+            pattern=".*/org\.eclipse\.tcf\.te\.ui\.terminals\.TerminalsView">
+      </activityPatternBinding>
+     
+      <!-- TBD Remove this category binding to hide the Migration Capability from the Preferences -->
+      <!-- 
+      <categoryActivityBinding
+            activityId="org.eclipse.tm.terminal.view.ui.activity.oldview"
+            categoryId="org.eclipse.tm.terminal.view.ui.category">
+      </categoryActivityBinding>
+      -->
+   </extension>
+
+   <extension point="org.eclipse.ui.contexts">
+      <context
+            id="org.eclipse.tm.terminal.view.ui.TerminalsView"
+            name="%TerminalsView.context.name"
+            description="%TerminalsView.context.description"
+            parentId="org.eclipse.ui.contexts.window">
+      </context>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            category="org.eclipse.tm.terminal.TerminalPreferencePage"
+            class="org.eclipse.tm.terminal.view.ui.preferences.PreferencePage"
+            id="org.eclipse.tm.terminal.view.ui.preferences"
+            name="%preference.page.name">
+      </page>
+   </extension>
+   <extension point="org.eclipse.core.runtime.preferences">
+      <initializer class="org.eclipse.tm.terminal.view.ui.preferences.PreferencesInitializer"/>
+   </extension>
+
+   <extension
+         point="org.eclipse.ui.services">
+      <sourceProvider
+            provider="org.eclipse.tm.terminal.view.ui.internal.ExternalExecutablesState">
+         <variable
+               name="org.eclipse.tm.terminal.external.executable.configured"
+               priorityLevel="workbench">
+         </variable>
+      </sourceProvider>
+   </extension>
+</plugin>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/pom.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/pom.xml
new file mode 100644 (file)
index 0000000..b9849f4
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.tizen</groupId>
+    <artifactId>tizen-patches</artifactId>
+    <version>3.0.0-SNAPSHOT</version>
+    <relativePath>../../../tizen.rt.upstream.patches</relativePath>
+  </parent>
+
+  <version>4.2.100-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.view.ui</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/pom2.xml b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/pom2.xml
new file mode 100644 (file)
index 0000000..b8c58db
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <relativePath>../../admin/pom-build.xml</relativePath>
+  </parent>
+
+  <version>4.2.100-SNAPSHOT</version>
+  <artifactId>org.eclipse.tm.terminal.view.ui</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/schema/launcherDelegates.exsd b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/schema/launcherDelegates.exsd
new file mode 100644 (file)
index 0000000..e3454e0
--- /dev/null
@@ -0,0 +1,215 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.tcf.te.ui.terminals" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.tcf.te.ui.terminals" id="launcherDelegates" name="Terminal Launcher Delegates"/>
+      </appinfo>
+      <documentation>
+         This extension point is used to contribute terminal launcher delegates.
+&lt;p&gt;
+Terminal launcher delegates contributes terminal settings widget to the &lt;code&gt;LaunchTerminalSettingsDialog&lt;/code&gt; required to open a remote terminal through a specific communication channel, like TCF or SSH.
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="delegate" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="delegate">
+      <annotation>
+         <documentation>
+            Declares a terminal launcher delegate contribution.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="class" minOccurs="0" maxOccurs="1"/>
+            <element ref="description" minOccurs="0" maxOccurs="1"/>
+            <element ref="enablement" minOccurs="0" maxOccurs="1"/>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The unique id of the terminal launcher delegate contribution.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="label" type="string">
+            <annotation>
+               <documentation>
+                  The label representing the terminal launcher delegate within the UI.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string">
+            <annotation>
+               <documentation>
+                  The class that implements &lt;code&gt;org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate&lt;/code&gt; or extends &lt;code&gt;org.eclipse.tcf.te.ui.terminals.launcher.AbstractLauncherDelegate&lt;/code&gt;.
+&lt;p&gt;
+The terminal launcher delegate implementation class must be specified either by the class attribute or the class child element!
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate:org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="hidden" type="boolean">
+            <annotation>
+               <documentation>
+                  If &lt;code&gt;true&lt;/code&gt;, than the terminal launcher delegate is not visible in the UI, even if a possible &lt;code&gt;enablement&lt;/code&gt; will evaluate to &lt;code&gt;true&lt;/code&gt;.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="description" type="string">
+      <annotation>
+         <documentation>
+            A short description of the terminal connector type to be presented in the UI.
+         </documentation>
+      </annotation>
+   </element>
+
+   <element name="class">
+      <annotation>
+         <documentation>
+            Used when creating an &lt;code&gt;IExecutableExtension&lt;/code&gt; with a named parameter, or more than one.
+         </documentation>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="parameter" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="class" type="string">
+            <annotation>
+               <documentation>
+                  The class that implements &lt;code&gt;org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate&lt;/code&gt; or extends &lt;code&gt;org.eclipse.tcf.te.ui.terminals.launcher.AbstractLauncherDelegate&lt;/code&gt;.
+&lt;p&gt;
+The terminal launcher delegate implementation class must be specified either by the class attribute or the class child element!
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate:org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="parameter">
+      <annotation>
+         <documentation>
+            A parameter for an &lt;code&gt;IExecutableExtension&lt;/code&gt;.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  &lt;p&gt;The parameter name.&lt;/p&gt;
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="value" type="string" use="required">
+            <annotation>
+               <documentation>
+                  &lt;p&gt;The parameter value.&lt;/p&gt;
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         Target Explorer 1.0.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         This is an example of the extension point usage:
+&lt;p&gt;
+&lt;pre&gt;&lt;code&gt;
+  &lt;extension point=&quot;org.eclipse.tcf.te.ui.terminals.launcherDelegates&quot;&gt;
+      &lt;delegate
+            id=&quot;org.eclipse.tcf.te.ui.terminals.launcher.tcf&quot;
+            class=&quot;org.eclipse.tcf.te.tcf.terminals.ui.internal.TerminalLauncherDelegate&quot;
+            label=&quot;TCF Terminal&quot;&gt;
+            &lt;enablement&gt;
+               ...
+            &lt;/enablement&gt;
+      &lt;/delegate&gt;
+   &lt;/extension&gt;
+&lt;/code&gt;&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         The provider of a launcher delegate must implement &lt;samp&gt;org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate&lt;/samp&gt;.
+      </documentation>
+   </annotation>
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright (c) 2011 Wind River Systems, Inc. and others.
+
+All rights reserved.
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Public License v1.0 which accompanies this distribution, and is
+available at http://www.eclipse.org/legal/epl-v10.html.
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/AbstractAction.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/AbstractAction.java
new file mode 100644 (file)
index 0000000..e3c4a3e
--- /dev/null
@@ -0,0 +1,189 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.actions;
+
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
+import org.eclipse.tm.terminal.view.ui.tabs.TabFolderToolbarHandler;
+import org.eclipse.ui.ISources;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
+
+/**
+ * Abstract terminal action wrapper implementation.
+ */
+public abstract class AbstractAction extends AbstractTerminalAction {
+       // Reference to the parent toolbar handler
+       private final TabFolderToolbarHandler parent;
+
+       /**
+        * Constructor.
+        *
+        * @param parent
+        *            The parent toolbar handler instance. Must not be
+        *            <code>null</code>.
+        * @param id
+        *            The terminal action id. Must not be <code>null</code>.
+        */
+       public AbstractAction(TabFolderToolbarHandler parent, String id) {
+               super(id);
+
+               Assert.isNotNull(parent);
+               this.parent = parent;
+       }
+
+       /**
+        * Returns the parent toolbar handler.
+        *
+        * @return The parent toolbar handler.
+        */
+       protected final TabFolderToolbarHandler getParent() {
+               return parent;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
+        */
+       @Override
+       protected ITerminalViewControl getTarget() {
+               return getParent().getActiveTerminalViewControl();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#run()
+        */
+       @Override
+       public void run() {
+               // Get the active tab item from the tab folder manager
+               TabFolderManager manager = (TabFolderManager)getParent().getAdapter(TabFolderManager.class);
+               if (manager != null) {
+                       // If we have the active tab item, we can get the active terminal control
+                       CTabItem activeTabItem = manager.getActiveTabItem();
+                       if (activeTabItem != null) {
+                               // And execute the command
+                               executeCommand(activeTabItem.getData("customData")); //$NON-NLS-1$
+                       }
+               }
+       }
+
+       /**
+        * Executes the command for the given data node as current and active menu selection.
+        * <p>
+        * <b>Node:</b> If the provided data node is <code>null</code>, the method will trigger
+        *              the command with an empty selection.
+        *
+        * @param data The terminal custom data node or <code>null</code>.
+        */
+       @SuppressWarnings("cast")
+       protected void executeCommand(Object data) {
+               // Get the command service from the workbench
+               ICommandService service = (ICommandService)PlatformUI.getWorkbench().getAdapter(ICommandService.class);
+               if (service != null && getCommandId() != null) {
+                       // Get the command
+                       final Command command = service.getCommand(getCommandId());
+                       if (command != null && command.isDefined()) {
+                               IHandlerService handlerSvc = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);
+                               Assert.isNotNull(handlerSvc);
+
+                               // Construct a selection element
+                               IStructuredSelection selection = data != null ? new StructuredSelection(data) : new StructuredSelection();
+                               // Construct the application context
+                               EvaluationContext context = new EvaluationContext(handlerSvc.getCurrentState(), selection);
+                               // Apply the selection to the "activeMenuSelection" and "selection" variable too
+                               context.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection);
+                               context.addVariable(ISources.ACTIVE_MENU_SELECTION_NAME, selection);
+                               // Allow plug-in activation
+                               context.setAllowPluginActivation(true);
+                               // And execute the event
+                               try {
+                                       ParameterizedCommand pCmd = ParameterizedCommand.generateCommand(command, null);
+                                       Assert.isNotNull(pCmd);
+
+                                       handlerSvc.executeCommandInContext(pCmd, null, context);
+                               } catch (Exception e) {
+                                       IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
+                                                                                               NLS.bind(Messages.AbstractAction_error_commandExecutionFailed, getCommandId(), e.getLocalizedMessage()),
+                                                                                               e);
+                                       UIPlugin.getDefault().getLog().log(status);
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Returns the command id of the command to execute.
+        *
+        * @return The command id. Must be never <code>null</code>.
+        */
+       protected abstract String getCommandId();
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#updateAction(boolean)
+        */
+       @Override
+       public void updateAction(boolean aboutToShow) {
+               // Ignore the flag given from outside. We have to decide ourself
+               // what the enabled state of the action is
+               boolean enabled = getTarget() != null;
+
+               // If a target terminal control is available, we need to find the corresponding
+               // VLM target object which we need to trigger the handler
+               if (enabled) {
+                       // The action will be enabled if we can determine the VLM target object
+                       enabled = false;
+                       // Get the active tab item from the tab folder manager
+                       TabFolderManager manager = (TabFolderManager)getParent().getAdapter(TabFolderManager.class);
+                       if (manager != null) {
+                               // If we have the active tab item, we can get the active terminal control
+                               CTabItem activeTabItem = manager.getActiveTabItem();
+                               if (activeTabItem != null) {
+                                       enabled = checkEnableAction(activeTabItem.getData("customData")); //$NON-NLS-1$
+                               }
+                       }
+               }
+
+               setEnabled(enabled);
+       }
+
+       /**
+        * Checks if the action should be enabled based on the given terminal data object.
+        *
+        * @param data The terminal data node or <code>null</code>.
+        * @return <code>True</code> to enable the action, <code>false</code> otherwise.
+        */
+       protected boolean checkEnableAction(Object data) {
+               return data != null;
+       }
+
+       /**
+        * Returns if the action is a separator. Returning <code>true</code> here
+        * means that an additional separator toolbar element is added right or
+        * above of the action.
+        *
+        * @return <code>True</code> if the action is separating the parent contribution manager, <code>false</code> otherwise.
+        */
+       public boolean isSeparator() {
+               return false;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/NewTerminalViewAction.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/NewTerminalViewAction.java
new file mode 100644 (file)
index 0000000..a9e8093
--- /dev/null
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.actions;
+
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
+import org.eclipse.tm.terminal.view.ui.interfaces.ImageConsts;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
+
+/**
+ * Opens a new terminal view with a new secondary view ID.
+ *
+ * @since 4.1
+ */
+public class NewTerminalViewAction extends AbstractTerminalAction {
+
+       //private ITerminalsView view = null;
+
+       /**
+        * Constructor.
+        */
+       public NewTerminalViewAction(ITerminalsView view) {
+               super(null, NewTerminalViewAction.class.getName(), IAction.AS_PUSH_BUTTON);
+
+               //this.view = view;
+               setupAction(Messages.NewTerminalViewAction_menu, Messages.NewTerminalViewAction_tooltip,
+                                               UIPlugin.getImageDescriptor(ImageConsts.ACTION_NewTerminalView_Hover),
+                                               UIPlugin.getImageDescriptor(ImageConsts.ACTION_NewTerminalView_Enabled),
+                                               UIPlugin.getImageDescriptor(ImageConsts.ACTION_NewTerminalView_Disabled), true);
+               setEnabled(true);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#run()
+        */
+       @SuppressWarnings("cast")
+    @Override
+       public void run() {
+               ICommandService service = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class);
+               Command command = service != null ? service.getCommand("org.eclipse.tm.terminal.view.ui.command.newview") : null; //$NON-NLS-1$
+               if (command != null && command.isDefined() && command.isEnabled()) {
+                       try {
+                               ParameterizedCommand pCmd = ParameterizedCommand.generateCommand(command, null);
+                               Assert.isNotNull(pCmd);
+                               IHandlerService handlerSvc = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);
+                               Assert.isNotNull(handlerSvc);
+                               handlerSvc.executeCommandInContext(pCmd, null, handlerSvc.getCurrentState());
+                       } catch (Exception e) {
+                               // If the platform is in debug mode, we print the exception to the log view
+                               if (Platform.inDebugMode()) {
+                                       IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
+                                                                                               Messages.AbstractTriggerCommandHandler_error_executionFailed, e);
+                                       UIPlugin.getDefault().getLog().log(status);
+                               }
+                       }
+               }
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/SelectEncodingAction.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/SelectEncodingAction.java
new file mode 100644 (file)
index 0000000..1d8513a
--- /dev/null
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.actions;
+
+import java.io.UnsupportedEncodingException;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.window.Window;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.view.ui.internal.dialogs.EncodingSelectionDialog;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
+
+/**
+ * Terminal control select encoding action implementation.
+ */
+public class SelectEncodingAction extends AbstractTerminalAction {
+       // Reference to the parent tab folder manager
+       private final TabFolderManager tabFolderManager;
+
+       /**
+        * Constructor.
+        *
+        * @param tabFolderManager The parent tab folder manager. Must not be <code>null</code>.
+        */
+       public SelectEncodingAction(TabFolderManager tabFolderManager) {
+               super(null, SelectEncodingAction.class.getName(), IAction.AS_PUSH_BUTTON);
+
+               Assert.isNotNull(tabFolderManager);
+               this.tabFolderManager = tabFolderManager;
+
+        setupAction(Messages.SelectEncodingAction_menu,
+                    Messages.SelectEncodingAction_tooltip,
+                    (ImageDescriptor)null,
+                    (ImageDescriptor)null,
+                    (ImageDescriptor)null,
+                    true);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#run()
+        */
+       @Override
+       public void run() {
+               ITerminalViewControl target = getTarget();
+               if (target == null) return;
+
+               EncodingSelectionDialog dialog = new EncodingSelectionDialog(null);
+               dialog.setEncoding(target.getEncoding());
+               if (dialog.open() == Window.OK) {
+                       try {
+                               target.setEncoding(dialog.getEncoding());
+                               tabFolderManager.updateStatusLine();
+                       }
+                       catch (UnsupportedEncodingException e) { e.printStackTrace(); }
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#updateAction(boolean)
+        */
+       @Override
+       public void updateAction(boolean aboutToShow) {
+               setEnabled(aboutToShow
+                                               && getTarget() != null && getTarget().getState() == TerminalState.CONNECTED);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/TabScrollLockAction.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/TabScrollLockAction.java
new file mode 100644 (file)
index 0000000..b9645a1
--- /dev/null
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.ImageConsts;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+
+/**
+ * Terminal console tab scroll lock action.
+ */
+public class TabScrollLockAction extends AbstractTerminalAction {
+
+       /**
+        * Constructor.
+        */
+       public TabScrollLockAction() {
+               super(null, TabScrollLockAction.class.getName(), IAction.AS_RADIO_BUTTON);
+
+        setupAction(Messages.TabScrollLockAction_text,
+                    Messages.TabScrollLockAction_tooltip,
+                    UIPlugin.getImageDescriptor(ImageConsts.ACTION_ScrollLock_Hover),
+                    UIPlugin.getImageDescriptor(ImageConsts.ACTION_ScrollLock_Enabled),
+                    UIPlugin.getImageDescriptor(ImageConsts.ACTION_ScrollLock_Disabled),
+                    true);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#run()
+        */
+       @Override
+       public void run() {
+               ITerminalViewControl target = getTarget();
+               if (target != null) {
+                       target.setScrollLock(!target.isScrollLock());
+                       setChecked(target.isScrollLock());
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#updateAction(boolean)
+        */
+       @Override
+       public void updateAction(boolean aboutToShow) {
+               setEnabled(aboutToShow && getTarget() != null && getTarget().getState() == TerminalState.CONNECTED);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/ToggleCommandFieldAction.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/actions/ToggleCommandFieldAction.java
new file mode 100644 (file)
index 0000000..dcdbbe9
--- /dev/null
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
+import org.eclipse.tm.terminal.view.ui.interfaces.ImageConsts;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.tm.terminal.view.ui.tabs.TabCommandFieldHandler;
+import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
+
+/**
+ * Toggle command input field.
+ */
+public class ToggleCommandFieldAction extends AbstractTerminalAction {
+       private ITerminalsView view = null;
+
+       /**
+        * Constructor.
+        */
+       public ToggleCommandFieldAction(ITerminalsView view) {
+               super(null, ToggleCommandFieldAction.class.getName(), IAction.AS_CHECK_BOX);
+
+               this.view = view;
+               setupAction(Messages.ToggleCommandFieldAction_menu, Messages.ToggleCommandFieldAction_toolTip,
+                                               UIPlugin.getImageDescriptor(ImageConsts.ACTION_ToggleCommandField_Hover),
+                                               UIPlugin.getImageDescriptor(ImageConsts.ACTION_ToggleCommandField_Enabled),
+                                               UIPlugin.getImageDescriptor(ImageConsts.ACTION_ToggleCommandField_Disabled), true);
+
+               TabCommandFieldHandler handler = getCommandFieldHandler();
+               setChecked(handler != null && handler.hasCommandInputField());
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.action.IAction#run()
+        */
+       @Override
+    public void run() {
+               TabCommandFieldHandler handler = getCommandFieldHandler();
+               if (handler != null) {
+                       handler.setCommandInputField(!handler.hasCommandInputField());
+               }
+               setChecked(handler != null && handler.hasCommandInputField());
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#updateAction(boolean)
+        */
+       @Override
+       public void updateAction(boolean aboutToShow) {
+               TabCommandFieldHandler handler = getCommandFieldHandler();
+               ITerminalViewControl target = getTarget();
+               setEnabled(aboutToShow && handler != null
+                                               && target != null && target.getState() == TerminalState.CONNECTED);
+               setChecked(handler != null && handler.hasCommandInputField());
+       }
+
+       /**
+        * Returns the command input field handler for the active tab.
+        *
+        * @return The command input field handler or <code>null</code>.
+        */
+       @SuppressWarnings("cast")
+       protected TabCommandFieldHandler getCommandFieldHandler() {
+               TabCommandFieldHandler handler = null;
+               // Get the active tab item from the tab folder manager
+               TabFolderManager manager = (TabFolderManager)view.getAdapter(TabFolderManager.class);
+               if (manager != null) {
+                       // If we have the active tab item, we can get the active terminal control
+                       CTabItem activeTabItem = manager.getActiveTabItem();
+                       if (activeTabItem != null && !activeTabItem.isDisposed()) {
+                               handler = manager.getTabCommandFieldHandler(activeTabItem);
+                       }
+               }
+               return handler;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/activator/UIPlugin.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/activator/UIPlugin.java
new file mode 100644 (file)
index 0000000..d692c59
--- /dev/null
@@ -0,0 +1,260 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.activator;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.view.core.preferences.ScopedEclipsePreferences;
+import org.eclipse.tm.terminal.view.core.tracing.TraceHandler;
+import org.eclipse.tm.terminal.view.ui.interfaces.ImageConsts;
+import org.eclipse.tm.terminal.view.ui.listeners.WorkbenchWindowListener;
+import org.eclipse.tm.terminal.view.ui.view.TerminalsView;
+import org.eclipse.tm.terminal.view.ui.view.TerminalsViewMementoHandler;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IWindowListener;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchListener;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class UIPlugin extends AbstractUIPlugin {
+       // The shared instance
+       private static UIPlugin plugin;
+       // The scoped preferences instance
+       private static volatile ScopedEclipsePreferences scopedPreferences;
+       // The trace handler instance
+       private static volatile TraceHandler traceHandler;
+       // The workbench listener instance
+       private IWorkbenchListener listener;
+       // The global window listener instance
+       private IWindowListener windowListener;
+
+       /**
+        * The constructor
+        */
+       public UIPlugin() {
+       }
+
+       /**
+        * Returns the shared instance
+        *
+        * @return the shared instance
+        */
+       public static UIPlugin getDefault() {
+               return plugin;
+       }
+
+       /**
+        * Convenience method which returns the unique identifier of this plug-in.
+        */
+       public static String getUniqueIdentifier() {
+               if (getDefault() != null && getDefault().getBundle() != null) {
+                       return getDefault().getBundle().getSymbolicName();
+               }
+               return "org.eclipse.tm.terminal.view.ui"; //$NON-NLS-1$
+       }
+
+       /**
+        * Return the scoped preferences for this plug-in.
+        */
+       public static ScopedEclipsePreferences getScopedPreferences() {
+               if (scopedPreferences == null) {
+                       scopedPreferences = new ScopedEclipsePreferences(getUniqueIdentifier());
+               }
+               return scopedPreferences;
+       }
+
+       /**
+        * Returns the bundles trace handler.
+        *
+        * @return The bundles trace handler.
+        */
+       public static TraceHandler getTraceHandler() {
+               if (traceHandler == null) {
+                       traceHandler = new TraceHandler(getUniqueIdentifier());
+               }
+               return traceHandler;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+        */
+       @Override
+       public void start(BundleContext context) throws Exception {
+               super.start(context);
+               plugin = this;
+
+               // Create and register the workbench listener instance
+               listener = new IWorkbenchListener() {
+
+                       @Override
+                       public boolean preShutdown(IWorkbench workbench, boolean forced) {
+                               if (workbench != null && workbench.getActiveWorkbenchWindow() != null && workbench.getActiveWorkbenchWindow().getActivePage() != null) {
+                                       // Find all "Terminal" views
+                                       IViewReference[] refs = workbench.getActiveWorkbenchWindow().getActivePage().getViewReferences();
+                                       for (IViewReference ref : refs) {
+                                               IViewPart part = ref.getView(false);
+                                               if (part instanceof TerminalsView) {
+                                                       /*
+                                                        * The terminal tabs to save to the views memento on shutdown can
+                                                        * be determined only _before_ the saveState(memento) method of the
+                                                        * view is called. Within saveState, it is already to late and the
+                                                        * terminals might be in CLOSED state already. This depends on the
+                                                        * terminal type and the corresponding connector implementation.
+                                                        *
+                                                        * To be safe, we determine the still opened terminals on shutdown
+                                                        * separately here in the preShutdown.
+                                                        */
+                                                       final List<CTabItem> saveables = new ArrayList<CTabItem>();
+
+                                                       // Get the tab folder
+                                                       CTabFolder tabFolder = (CTabFolder)((TerminalsView)part).getAdapter(CTabFolder.class);
+                                                       if (tabFolder != null && !tabFolder.isDisposed()) {
+                                                               // Get the list of tab items
+                                                               CTabItem[] items = tabFolder.getItems();
+                                                               // Loop the tab items and find the still connected ones
+                                                               for (CTabItem item : items) {
+                                                                       // Ignore disposed items
+                                                                       if (item.isDisposed()) continue;
+                                                                       // Get the terminal view control
+                                                                       ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
+                                                                       if (terminal == null || terminal.getState() != TerminalState.CONNECTED) {
+                                                                               continue;
+                                                                       }
+                                                                       // Still connected -> Add to the list
+                                                                       saveables.add(item);
+                                                               }
+                                                       }
+
+                                                       // Push the determined saveable items to the memento handler
+                                                       TerminalsViewMementoHandler mementoHandler = (TerminalsViewMementoHandler)((TerminalsView)part).getAdapter(TerminalsViewMementoHandler.class);
+                                                       if (mementoHandler != null) mementoHandler.setSaveables(saveables);
+                                               }
+                                       }
+                               }
+
+                               return true;
+                       }
+
+                       @Override
+                       public void postShutdown(IWorkbench workbench) {
+                       }
+               };
+               PlatformUI.getWorkbench().addWorkbenchListener(listener);
+
+               if (windowListener == null && PlatformUI.getWorkbench() != null) {
+                       windowListener = new WorkbenchWindowListener();
+                       PlatformUI.getWorkbench().addWindowListener(windowListener);
+                       activateContexts();
+               }
+       }
+
+       void activateContexts() {
+               if (Display.getCurrent() != null) {
+                       IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+                       if (window != null && windowListener != null) windowListener.windowOpened(window);
+               }
+               else {
+                       PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable(){
+                               @Override
+                               public void run() {
+                                       activateContexts();
+                               }});
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+        */
+       @Override
+       public void stop(BundleContext context) throws Exception {
+               if (windowListener != null && PlatformUI.getWorkbench() != null) {
+                       PlatformUI.getWorkbench().removeWindowListener(windowListener);
+                       windowListener = null;
+               }
+
+               plugin = null;
+               scopedPreferences = null;
+               traceHandler = null;
+               if (listener != null) { PlatformUI.getWorkbench().removeWorkbenchListener(listener); listener = null; }
+               super.stop(context);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)
+        */
+       @Override
+       protected void initializeImageRegistry(ImageRegistry registry) {
+               Bundle bundle = getBundle();
+               URL url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_EVIEW + "console_view.png"); //$NON-NLS-1$
+               registry.put(ImageConsts.VIEW_Terminals, ImageDescriptor.createFromURL(url));
+
+               url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_CLCL + "lock_co.png"); //$NON-NLS-1$
+               registry.put(ImageConsts.ACTION_ScrollLock_Hover, ImageDescriptor.createFromURL(url));
+               url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_ELCL + "lock_co.png"); //$NON-NLS-1$
+               registry.put(ImageConsts.ACTION_ScrollLock_Enabled, ImageDescriptor.createFromURL(url));
+               url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_DLCL + "lock_co.png"); //$NON-NLS-1$
+               registry.put(ImageConsts.ACTION_ScrollLock_Disabled, ImageDescriptor.createFromURL(url));
+
+               url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_CLCL + "command_input_field.gif"); //$NON-NLS-1$
+               registry.put(ImageConsts.ACTION_ToggleCommandField_Hover, ImageDescriptor.createFromURL(url));
+               url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_ELCL + "command_input_field.gif"); //$NON-NLS-1$
+               registry.put(ImageConsts.ACTION_ToggleCommandField_Enabled, ImageDescriptor.createFromURL(url));
+               url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_DLCL + "command_input_field.gif"); //$NON-NLS-1$
+               registry.put(ImageConsts.ACTION_ToggleCommandField_Disabled, ImageDescriptor.createFromURL(url));
+
+               url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_CLCL + "new_terminal_view.gif"); //$NON-NLS-1$
+               registry.put(ImageConsts.ACTION_NewTerminalView_Hover, ImageDescriptor.createFromURL(url));
+               url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_ELCL + "new_terminal_view.gif"); //$NON-NLS-1$
+               registry.put(ImageConsts.ACTION_NewTerminalView_Enabled, ImageDescriptor.createFromURL(url));
+               url = bundle.getEntry(ImageConsts.IMAGE_DIR_ROOT + ImageConsts.IMAGE_DIR_DLCL + "new_terminal_view.gif"); //$NON-NLS-1$
+               registry.put(ImageConsts.ACTION_NewTerminalView_Disabled, ImageDescriptor.createFromURL(url));
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>Image</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>Image</code> object instance or <code>null</code>.
+        */
+       public static Image getImage(String key) {
+               return getDefault().getImageRegistry().get(key);
+       }
+
+       /**
+        * Loads the image registered under the specified key from the image
+        * registry and returns the <code>ImageDescriptor</code> object instance.
+        *
+        * @param key The key the image is registered with.
+        * @return The <code>ImageDescriptor</code> object instance or <code>null</code>.
+        */
+       public static ImageDescriptor getImageDescriptor(String key) {
+               return getDefault().getImageRegistry().getDescriptor(key);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/controls/ConfigurationPanelControl.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/controls/ConfigurationPanelControl.java
new file mode 100644 (file)
index 0000000..1a3e70d
--- /dev/null
@@ -0,0 +1,421 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.controls;
+
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel;
+
+/**
+ * Base control to deal with wizard or property page controls
+ * which should share the same UI space.
+ */
+public class ConfigurationPanelControl implements IConfigurationPanelContainer, IMessageProvider {
+       private final Map<String, IConfigurationPanel> configurationPanels = new Hashtable<String, IConfigurationPanel>();
+
+       private String message = null;
+       private int messageType = IMessageProvider.NONE;
+
+       private boolean isGroup;
+
+       private Composite panel;
+       private StackLayout panelLayout;
+
+       private String activeConfigurationPanelKey = null;
+       private IConfigurationPanel activeConfigurationPanel = null;
+
+       private final AbstractConfigurationPanel EMPTY_PANEL;
+
+       /**
+        * An empty configuration panel implementation.
+        */
+       private static final class EmptySettingsPanel extends AbstractConfigurationPanel {
+
+               /**
+                * Constructor.
+                *
+                * @param container The configuration panel container or <code>null</code>.
+            */
+           public EmptySettingsPanel(IConfigurationPanelContainer container) {
+                   super(container);
+           }
+
+           /* (non-Javadoc)
+            * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
+            */
+        @Override
+           public void setupPanel(Composite parent) {
+               Composite panel = new Composite(parent, SWT.NONE);
+               panel.setLayout(new GridLayout());
+               panel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+               panel.setBackground(parent.getBackground());
+
+               setControl(panel);
+           }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#isValid()
+         */
+           @Override
+           public boolean isValid() {
+               return false;
+           }
+       }
+
+       /**
+        * Cleanup all resources the control might have been created.
+        */
+       public void dispose() {
+               EMPTY_PANEL.dispose();
+       }
+
+       /**
+        * Constructor.
+        */
+       public ConfigurationPanelControl() {
+               EMPTY_PANEL = new EmptySettingsPanel(this);
+               clear();
+               setPanelIsGroup(false);
+       }
+
+       /**
+        * Sets if or if not the controls panel is a <code>Group</code>.
+        *
+        * @param isGroup <code>True</code> if the controls panel is a group, <code>false</code> otherwise.
+        */
+       public void setPanelIsGroup(boolean isGroup) {
+               this.isGroup = isGroup;
+       }
+
+       /**
+        * Returns if or if not the controls panel is a <code>Group</code>.
+        *
+        * @return <code>True</code> if the controls panel is a group, <code>false</code> otherwise.
+        */
+       public boolean isPanelIsGroup() {
+               return isGroup;
+       }
+
+       /**
+        * Returns the controls panel.
+        *
+        * @return The controls panel or <code>null</code>.
+        */
+       public Composite getPanel() {
+               return panel;
+       }
+
+       /**
+        * Returns the label text to set for the group (if the panel is a group).
+        *
+        * @return The label text to apply or <code>null</code>.
+        */
+       public String getGroupLabel() {
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer#validate()
+        */
+       @Override
+       public void validate() {
+       }
+
+       /**
+        * To be called from the embedding control to setup the controls UI elements.
+        *
+        * @param parent The parent control. Must not be <code>null</code>!
+        */
+       public void setupPanel(Composite parent, String[] configurationPanelKeys) {
+               Assert.isNotNull(parent);
+
+               if (isPanelIsGroup()) {
+                       panel = new Group(parent, SWT.NONE);
+                       if (getGroupLabel() != null) ((Group)panel).setText(getGroupLabel());
+               } else {
+                       panel = new Composite(parent, SWT.NONE);
+               }
+               Assert.isNotNull(panel);
+               panel.setFont(parent.getFont());
+               panel.setBackground(parent.getBackground());
+
+               panelLayout = new StackLayout();
+               panel.setLayout(panelLayout);
+
+               setupConfigurationPanels(panel, configurationPanelKeys);
+               EMPTY_PANEL.setupPanel(panel);
+       }
+
+       /**
+        * Removes all configuration panels.
+        */
+       public void clear() {
+               configurationPanels.clear();
+       }
+
+       /**
+        * Returns a unsorted list of all registered configuration panel id's.
+        *
+        * @return A list of registered configuration panel id's.
+        */
+       public String[] getConfigurationPanelIds() {
+               return configurationPanels.keySet().toArray(new String[configurationPanels.keySet().size()]);
+       }
+
+       /**
+        * Returns the configuration panel instance registered for the given configuration panel key.
+        *
+        * @param key The key to get the configuration panel for. Must not be <code>null</code>!
+        * @return The configuration panel instance or an empty configuration panel if the key is unknown.
+        */
+       public IConfigurationPanel getConfigurationPanel(String key) {
+               IConfigurationPanel panel = key != null ? configurationPanels.get(key) : null;
+               return panel != null ? panel : EMPTY_PANEL;
+       }
+
+       /**
+        * Returns if or if not the given configuration panel is equal to the
+        * empty configuration panel.
+        *
+        * @param panel The configuration panel or <code>null</code>.
+        * @return <code>True</code> if the configuration panel is equal to the empty configuration panel.
+        */
+       public final boolean isEmptyConfigurationPanel(IConfigurationPanel panel) {
+               return EMPTY_PANEL == panel;
+       }
+
+       /**
+        * Adds the given configuration panel under the given configuration panel key to the
+        * list of known panels. If the given configuration panel is <code>null</code>, any
+        * configuration panel stored under the given key is removed from the list of known panels.
+        *
+        * @param key The key to get the configuration panel for. Must not be <code>null</code>!
+        * @param panel The configuration panel instance or <code>null</code>.
+        */
+       public void addConfigurationPanel(String key, IConfigurationPanel panel) {
+               if (key == null) return;
+               if (panel != null) {
+                       configurationPanels.put(key, panel);
+               } else {
+                       configurationPanels.remove(key);
+               }
+       }
+
+       /**
+        * Setup the configuration panels for being presented to the user. This method is called by the
+        * controls <code>doSetupPanel(...)</code> and initialize all possible configuration panels to show.
+        * The default implementation iterates over the given list of configuration panel keys and calls
+        * <code>setupPanel(...)</code> for each of them.
+        *
+        * @param parent The parent composite to use for the configuration panels. Must not be <code>null</code>!
+        * @param configurationPanelKeys The list of configuration panels to initialize. Might be <code>null</code> or empty!
+        */
+       public void setupConfigurationPanels(Composite parent, String[] configurationPanelKeys) {
+               Assert.isNotNull(parent);
+
+               if (configurationPanelKeys != null) {
+                       for (int i = 0; i < configurationPanelKeys.length; i++) {
+                               IConfigurationPanel configPanel = getConfigurationPanel(configurationPanelKeys[i]);
+                               Assert.isNotNull(configPanel);
+                               configPanel.setupPanel(parent);
+                       }
+               }
+       }
+
+       /**
+        * Make the wizard configuration panel registered under the given configuration panel key the
+        * most top configuration panel. If no configuration panel is registered under the given key,
+        * nothing will happen.
+        *
+        * @param key The key to get the wizard configuration panel for. Must not be <code>null</code>!
+        */
+       public void showConfigurationPanel(String key) {
+               String activeKey = getActiveConfigurationPanelKey();
+               if (key != null && key.equals(activeKey) && activeConfigurationPanel != null) {
+                       return;
+               }
+               IConfigurationPanel configPanel = getActiveConfigurationPanel();
+               Map<String, Object> data = new HashMap<String, Object>();
+               if (configPanel != null) configPanel.extractData(data);
+               configPanel = getConfigurationPanel(key);
+               Assert.isNotNull(configPanel);
+               if (configPanel.getControl() != null) {
+                       activeConfigurationPanel = configPanel;
+                       activeConfigurationPanelKey = key;
+                       panelLayout.topControl = configPanel.getControl();
+                       panel.layout();
+                       if (!data.isEmpty()) configPanel.updateData(data);
+                       configPanel.activate();
+               }
+               else {
+                       activeConfigurationPanelKey = key;
+               }
+       }
+
+       /**
+        * Returns the currently active configuration panel.
+        *
+        * @return The active configuration panel or <code>null</code>.
+        */
+       public IConfigurationPanel getActiveConfigurationPanel() {
+               return activeConfigurationPanel;
+       }
+
+       /**
+        * Returns the currently active configuration panel key.
+        *
+        * @return The active configuration panel key or <code>null</code>.
+        */
+       public String getActiveConfigurationPanelKey() {
+               return activeConfigurationPanelKey;
+       }
+
+       /**
+        * Returns the dialog settings to use to save and restore control specific
+        * widget values.
+        *
+        * @param settings The parent dialog settings. Must not be <code>null</code>.
+        * @return The dialog settings to use.
+        */
+       public final IDialogSettings getDialogSettings(IDialogSettings settings) {
+               Assert.isNotNull(settings);
+
+               // Store the settings of the control within it's own section.
+               String sectionName = this.getClass().getSimpleName();
+               Assert.isNotNull(sectionName);
+
+               IDialogSettings section = settings.getSection(sectionName);
+               if (section == null) {
+                       section = settings.addNewSection(sectionName);
+               }
+
+        return section;
+       }
+
+       /**
+        * Restore the widget values from the dialog settings store to recreate the control history.
+        * <p>
+        * <b>Note:</b>
+        * The control is saving the widget values into a section equal to the class name {@link Class#getName()}.
+        * After the sections has been created, the method calls <code>doRestoreWidgetValues</code> for restoring
+        * the single properties from the dialog settings. Subclasses may override <code>doRestoreWidgetValues</code>
+        * only to deal with the single properties only or <code>restoreWidgetValues</code> when to override the
+        * creation of the subsections.
+        *
+        * @param settings The dialog settings object instance to restore the widget values from. Must not be <code>null</code>!
+        * @param idPrefix The prefix to use for every dialog settings slot keys. If <code>null</code>, the dialog settings slot keys are not to prefix.
+        */
+       public final void restoreWidgetValues(IDialogSettings settings, String idPrefix) {
+               Assert.isNotNull(settings);
+
+               // now, call the hook for actually reading the single properties from the dialog settings.
+               doRestoreWidgetValues(getDialogSettings(settings), idPrefix);
+       }
+
+       /**
+        * Hook to restore the widget values finally plain from the given dialog settings. This method should
+        * not fragment the given dialog settings any further.
+        *
+        * @param settings The dialog settings to restore the widget values from. Must not be <code>null</code>!
+        * @param idPrefix The prefix to use for every dialog settings slot keys. If <code>null</code>, the dialog settings slot keys are not to prefix.
+        */
+       public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) {
+               Assert.isNotNull(settings);
+
+               for (String panelKey : configurationPanels.keySet()) {
+                       IConfigurationPanel configPanel = getConfigurationPanel(panelKey);
+                       if (configPanel != null && !isEmptyConfigurationPanel(configPanel)) {
+                               IDialogSettings configPanelSettings = settings.getSection(panelKey);
+                               if (configPanelSettings == null) configPanelSettings = settings.addNewSection(panelKey);
+                               configPanel.doRestoreWidgetValues(configPanelSettings, idPrefix);
+                       }
+               }
+       }
+
+       /**
+        * Saves the widget values to the dialog settings store for remembering the history. The control might
+        * be embedded within multiple pages multiple times handling different properties. Because the single
+        * controls should not mix up the history, we create subsections within the given dialog settings if
+        * they do not already exist. After the sections has been created, the method calls <code>doSaveWidgetValues</code>
+        * for saving the single properties to the dialog settings. Subclasses may override <code>doSaveWidgetValues</code>
+        * only to deal with the single properties only or <code>saveWidgetValues</code> when to override the
+        * creation of the subsections.
+        *
+        * @param settings The dialog settings object instance to save the widget values to. Must not be <code>null</code>!
+        * @param idPrefix The prefix to use for every dialog settings slot keys. If <code>null</code>, the dialog settings slot keys are not to prefix.
+        */
+       public final void saveWidgetValues(IDialogSettings settings, String idPrefix) {
+               Assert.isNotNull(settings);
+
+               // now, call the hook for actually writing the single properties to the dialog settings.
+               doSaveWidgetValues(getDialogSettings(settings), idPrefix);
+       }
+
+       /**
+        * Hook to save the widget values finally plain to the given dialog settings. This method should
+        * not fragment the given dialog settings any further.
+        *
+        * @param settings The dialog settings to save the widget values to. Must not be <code>null</code>!
+        * @param idPrefix The prefix to use for every dialog settings slot keys. If <code>null</code>, the dialog settings slot keys are not to prefix.
+        */
+       public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
+               Assert.isNotNull(settings);
+
+               IConfigurationPanel configPanel = getActiveConfigurationPanel();
+               if (configPanel != null && !isEmptyConfigurationPanel(configPanel)) {
+                       String key = getActiveConfigurationPanelKey();
+                       IDialogSettings configPanelSettings = settings.getSection(key);
+                       if (configPanelSettings == null) configPanelSettings = settings.addNewSection(key);
+                       configPanel.doSaveWidgetValues(configPanelSettings, idPrefix);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.IMessageProvider#getMessage()
+        */
+       @Override
+       public final String getMessage() {
+               return message;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.IMessageProvider#getMessageType()
+        */
+       @Override
+       public final int getMessageType() {
+               return messageType;
+       }
+
+       /**
+        * Set the message and the message type to display.
+        *
+        * @param message The message or <code>null</code>.
+        * @param messageType The message type or <code>IMessageProvider.NONE</code>.
+        */
+       @Override
+    public final void setMessage(String message, int messageType) {
+               this.message = message;
+               this.messageType = messageType;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/controls/NoteCompositeHelper.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/controls/NoteCompositeHelper.java
new file mode 100644 (file)
index 0000000..a861234
--- /dev/null
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.controls;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+
+/**
+ * A helper class to create a composite with a highlighted note
+ * entry and a message text.
+ */
+public class NoteCompositeHelper {
+
+       /**
+        * The common label text to show on a note. Defaults to &quot;Note:&quot;.
+        */
+       public static final String NOTE_LABEL = Messages.NoteCompositeHelper_note_label;
+
+       private static class NoteComposite extends Composite {
+
+               public NoteComposite(Composite parent, int style) {
+                       super(parent, style);
+               }
+
+               @Override
+               public void setEnabled(boolean enabled) {
+                       super.setEnabled(enabled);
+                       Control[] childs = getChildren();
+                       for (int iChild = 0; iChild < childs.length; iChild++) {
+                               Control child = childs[iChild];
+                               child.setEnabled(enabled);
+                       }
+               }
+       }
+
+       /**
+        * Creates a composite with a highlighted Note entry and a message text.
+        * This is designed to take up the full width of the page.
+        *
+        * @see PreferencePage#createNoteComposite, this is a plain copy of that!
+        * @param font
+        *            the font to use
+        * @param composite
+        *            the parent composite
+        * @param title
+        *            the title of the note
+        * @param message
+        *            the message for the note
+        *
+        * @return the composite for the note
+        */
+       public static Composite createNoteComposite(Font font, Composite composite, String title, String message) {
+               return createNoteComposite(font, composite, title, message, SWT.DEFAULT);
+       }
+
+       /**
+        * Creates a composite with a highlighted Note entry and a message text.
+        * This is designed to take up the full width of the page.
+        *
+        * @see PreferencePage#createNoteComposite, this is a plain copy of that!
+        * @param font
+        *            the font to use
+        * @param composite
+        *            the parent composite
+        * @param title
+        *            the title of the note
+        * @param message
+        *            the message for the note
+        * @param minCharsPerLine
+        *            the minimum number of characters per line. Defaults to '65' if less than '20'.
+        *
+        * @return the composite for the note
+        */
+       public static Composite createNoteComposite(Font font, Composite composite, String title, String message, int minCharsPerLine) {
+               final GC gc = new GC(composite);
+               gc.setFont(font);
+
+               Composite messageComposite = new NoteComposite(composite, SWT.NONE);
+
+               GridLayout messageLayout = new GridLayout();
+               messageLayout.numColumns = 2;
+               messageLayout.marginWidth = 0;
+               messageLayout.marginHeight = 0;
+               messageComposite.setLayout(messageLayout);
+
+               GridData layoutData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+               if (composite.getLayout() instanceof GridLayout) {
+                       layoutData.horizontalSpan = ((GridLayout) composite.getLayout()).numColumns;
+               }
+               messageComposite.setLayoutData(layoutData);
+               messageComposite.setFont(font);
+
+               final Label noteLabel = new Label(messageComposite, SWT.BOLD);
+               noteLabel.setText(title);
+               noteLabel.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT));
+               noteLabel.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+
+               final IPropertyChangeListener fontListener = new IPropertyChangeListener() {
+                       @Override
+                       public void propertyChange(PropertyChangeEvent event) {
+                               // Note: This is actually wrong but the same as in platforms
+                               // PreferencePage
+                               if (JFaceResources.BANNER_FONT.equals(event.getProperty())) {
+                                       noteLabel.setFont(JFaceResources.getFont(JFaceResources.BANNER_FONT));
+                               }
+                       }
+               };
+               JFaceResources.getFontRegistry().addListener(fontListener);
+               noteLabel.addDisposeListener(new DisposeListener() {
+                       @Override
+                       public void widgetDisposed(DisposeEvent event) {
+                               JFaceResources.getFontRegistry().removeListener(fontListener);
+                       }
+               });
+
+               Label messageLabel = new Label(messageComposite, SWT.WRAP);
+               messageLabel.setText(message);
+               messageLabel.setFont(font);
+
+               /**
+                * Set the controls style to FILL_HORIZONTAL making it multi-line if
+                * needed
+                */
+               layoutData = new GridData(GridData.FILL_HORIZONTAL);
+               layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), minCharsPerLine >= 20 ? minCharsPerLine : 65);
+               messageLabel.setLayoutData(layoutData);
+
+               gc.dispose();
+
+               return messageComposite;
+       }
+
+       /**
+        * change the text of the second label
+        *
+        * @param messageComposite
+        *            the NoteComposite that gets returned from createNoteComposite
+        * @param msg
+        *            the new text
+        */
+       public static void setMessage(Composite messageComposite, String msg) {
+               if (messageComposite instanceof NoteComposite) {
+                       Control[] children = messageComposite.getChildren();
+                       if (children.length == 2) {
+                               Control c = children[1];
+                               if (c instanceof Label) {
+                                       ((Label) c).setText(msg);
+                                       messageComposite.pack();
+                               }
+                       }
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/help/IContextHelpIds.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/help/IContextHelpIds.java
new file mode 100644 (file)
index 0000000..f4f2a07
--- /dev/null
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.help;
+
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+
+
+/**
+ * UI Context help id definitions.
+ *
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IContextHelpIds {
+
+       /**
+        * UI plug-in common context help id prefix.
+        */
+       public final static String PREFIX = UIPlugin.getUniqueIdentifier() + "."; //$NON-NLS-1$
+
+       /**
+        * Launch terminal settings dialog.
+        */
+       public final static String LAUNCH_TERMINAL_SETTINGS_DIALOG = PREFIX + "LaunchTerminalSettingsDialog"; //$NON-NLS-1$
+
+       /**
+        * Terminal control encoding selection dialog.
+        */
+       public final static String ENCODING_SELECTION_DIALOG = PREFIX + "EncodingSelectionDialog"; //$NON-NLS-1$
+
+       /**
+        * External executables dialog.
+        * @since 4.1
+        */
+       public final static String EXTERNAL_EXECUTABLES_DIALOG = PREFIX + "ExternalExecutablesDialog"; //$NON-NLS-1$
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IConfigurationPanel.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IConfigurationPanel.java
new file mode 100644 (file)
index 0000000..dcdfc67
--- /dev/null
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.interfaces;
+
+import java.util.Map;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel;
+
+/**
+ * Terminal launcher configuration panel.
+ *
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * Clients should extend {@link AbstractConfigurationPanel} instead.
+ */
+public interface IConfigurationPanel extends IMessageProvider {
+
+       /**
+        * Returns the configuration panel container.
+        *
+        * @return The configuration panel container or <code>null</code>.
+        */
+       public IConfigurationPanelContainer getContainer();
+
+       /**
+        * Creates the terminal launcher configuration panel UI elements within the
+        * given parent composite. Terminal launcher configuration panels should always
+        * create another composite within the given composite, which is the panel top
+        * control. The top control is queried later from the stack layout to show the
+        * different panels if the selected terminal launcher changed.
+        *
+        * @param parent The parent composite to create the UI elements in. Must not be <code>null</code>.
+        */
+       public void setupPanel(Composite parent);
+
+       /**
+        * Cleanup all resources the wizard configuration panel might have been created.
+        */
+       public void dispose();
+
+       /**
+        * Returns the terminal launcher configuration panels top control, typically a
+        * composite control. This control is requested every time the stack layout is
+        * required to set a new top control because the selected terminal launcher changed.
+        *
+        * @return The top control or <code>null</code> if the configuration panel has been not setup yet.
+        */
+       public Composite getControl();
+
+       /**
+        * Validates the control and sets the message text and type so the parent
+        * page or control is able to display validation result informations.
+        * The default implementation of this method does nothing.
+        *
+        * @return Result of validation.
+        */
+       public boolean isValid();
+
+       /**
+        * Restore the widget values plain from the given dialog settings. This method should
+        * not fragment the given dialog settings any further.
+        *
+        * @param settings The dialog settings to restore the widget values from. Must not be <code>null</code>!
+        * @param idPrefix The prefix to use for every dialog settings slot keys. If <code>null</code>, the dialog settings slot keys are not to prefix.
+        */
+       public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix);
+
+       /**
+        * Save the widget values plain to the given dialog settings. This method should
+        * not fragment the given dialog settings any further.
+        *
+        * @param settings The dialog settings to save the widget values to. Must not be <code>null</code>!
+        * @param idPrefix The prefix to use for every dialog settings slot keys. If <code>null</code>, the dialog settings slot keys are not to prefix.
+        */
+       public void doSaveWidgetValues(IDialogSettings settings, String idPrefix);
+
+       /**
+        * Enables or disables all UI elements belonging to the wizard configuration panel.
+        *
+        * @param enabled <code>True</code> to enable the UI elements, <code>false</code> otherwise.
+        */
+       public void setEnabled(boolean enabled);
+
+       /**
+        * Called when the panel gets the active panel.
+        */
+       public void activate();
+
+       /**
+        * Initialize the widgets based of the data from the given map.
+        * <p>
+        * This method may called multiple times during the lifetime of the panel and the given
+        * map might be even <code>null</code>.
+        *
+        * @param data The map or <code>null</code>.
+        */
+       public void setupData(Map<String, Object> data);
+
+       /**
+        * Extract the data from the widgets and write it back to the given map.
+        * <p>
+        * This method may called multiple times during the lifetime of the panel and the given
+        * map might be even <code>null</code>.
+        *
+        * @param data The map or <code>null</code>.
+        */
+       public void extractData(Map<String, Object> data);
+
+       /**
+        * Update the data from the given properties container which contains the current
+        * working data.
+        * <p>
+        * This method may called multiple times during the lifetime of the panel and the given
+        * map might be even <code>null</code>.
+        *
+        * @param data The map or <code>null</code>.
+        */
+       public void updateData(Map<String, Object> data);
+
+       /**
+        * Set the selection to the terminal launcher configuration panel.
+        *
+        * @param selection The selection or <code>null</code>.
+        */
+       public void setSelection(ISelection selection);
+
+       /**
+        * Returns the selection associated with the terminal launcher configuration panel.
+        *
+        * @return The selection or <code>null</code>.
+        */
+       public ISelection getSelection();
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IConfigurationPanelContainer.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IConfigurationPanelContainer.java
new file mode 100644 (file)
index 0000000..9be4adf
--- /dev/null
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.interfaces;
+
+
+
+/**
+ * A container to deal with configuration panels.
+ *
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IConfigurationPanelContainer {
+
+       /**
+        * Validates the container status.
+        * <p>
+        * If necessary, set the corresponding messages and message types to signal when some sub
+        * elements of the container needs user attention.
+        */
+       public void validate();
+
+       /**
+        * Set the message and the message type to display.
+        *
+        * @param message The message or <code>null</code>.
+        * @param messageType The message type or <code>IMessageProvider.NONE</code>.
+        */
+       public void setMessage(String message, int messageType);
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IExternalExecutablesProperties.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IExternalExecutablesProperties.java
new file mode 100644 (file)
index 0000000..78fcc4b
--- /dev/null
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Dirk Fauth - [460496] Moved from o.e.tm.t.connector.local.showin.interfaces
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.interfaces;
+
+/**
+ * External executables data property names.
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @since 4.1
+ */
+public interface IExternalExecutablesProperties {
+
+       /**
+        * The name/label of the external executable.
+        */
+       public final String PROP_NAME = "Name"; //$NON-NLS-1$
+
+       /**
+        * The absolute path of the external executable.
+        */
+       public final String PROP_PATH = "Path"; //$NON-NLS-1$
+
+       /**
+        * The arguments to pass to the external executable.
+        */
+       public final String PROP_ARGS = "Args"; //$NON-NLS-1$
+
+       /**
+        * The absolute path to the icon representing the external executable.
+        */
+       public final String PROP_ICON = "Icon"; //$NON-NLS-1$
+
+       /**
+        * If set, backslashes are translated to forward slashes on paste.
+        */
+       public final String PROP_TRANSLATE = "Translate"; //$NON-NLS-1$
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/ILauncherDelegate.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/ILauncherDelegate.java
new file mode 100644 (file)
index 0000000..c7b7be3
--- /dev/null
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.interfaces;
+
+import java.util.Map;
+
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
+import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate;
+
+/**
+ * Terminal launcher delegate.
+ *
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * Clients should extend {@link AbstractLauncherDelegate} instead.
+ */
+public interface ILauncherDelegate extends IExecutableExtension, IAdaptable {
+
+       /**
+        * Returns the unique id of the launcher delegate. The returned
+        * id must be never <code>null</code> or an empty string.
+        *
+        * @return The unique id.
+        */
+       public String getId();
+
+       /**
+        * Returns the label or UI name of the launcher delegate.
+        *
+        * @return The label or UI name. An empty string if not set.
+        */
+       public String getLabel();
+
+       /**
+        * Returns if or if not the launcher delegate is hidden for the user.
+        *
+        * @return <code>True</code> if the launcher delegate is hidden, <code>false</code> otherwise.
+        */
+       public boolean isHidden();
+
+       /**
+        * Returns the enablement expression.
+        *
+        * @return The enablement expression or <code>null</code>.
+        */
+       public Expression getEnablement();
+
+       /**
+        * Returns if or if not the user needs to set configuration details for this launcher to work.
+        * The settings to configure are provided to the user through the configuration panel returned
+        * by {@link #getPanel(BaseDialogPageControl)}.
+        *
+        * @return <code>True</code> if a user configuration is required, <code>false</code> otherwise.
+        */
+       public boolean needsUserConfiguration();
+
+       /**
+        * Returns the configuration panel instance to present to the user. The instance must be always
+        * the same on subsequent calls until disposed.
+        * <p>
+        * The method may return <code>null</code> if the launcher does not provide any user
+        * configurable settings. In this case, {@link #needsUserConfiguration()} should return
+        * <code>false</code>.
+        *
+        * @param container The configuration panel container or <code>null</code>.
+        * @return The configuration panel instance or <code>null</code>
+        */
+       public IConfigurationPanel getPanel(IConfigurationPanelContainer container);
+
+       /**
+        * Execute the terminal launch.
+        *
+        * @param properties The properties. Must not be <code>null</code>.
+        * @param done The callback or <code>null</code>.
+        */
+       public void execute(Map<String, Object> properties, ITerminalService.Done done);
+
+       /**
+        * Creates the terminal connector for this launcher delegate based on
+        * the given properties.
+        *
+        * @param properties The terminal properties. Must not be <code>null</code>.
+        * @return The terminal connector or <code>null</code>.
+        */
+    public ITerminalConnector createTerminalConnector(Map<String, Object> properties);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IMementoHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IMementoHandler.java
new file mode 100644 (file)
index 0000000..5afbf66
--- /dev/null
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.interfaces;
+
+import java.util.Map;
+
+import org.eclipse.ui.IMemento;
+
+/**
+ * Terminal properties memento handler.
+ */
+public interface IMementoHandler {
+
+    /**
+     * Saves the terminal properties in the given memento.
+     *
+     * @param memento The memento. Must not be <code>null</code>.
+     * @param properties The map containing the terminal properties to save. Must not be <code>null</code>.
+     */
+    public void saveState(IMemento memento, Map<String, Object> properties);
+
+    /**
+     * Restore the terminal properties from the given memento.
+     *
+     * @param memento The memento. Must not be <code>null</code>.
+     * @param properties The map receiving the restored terminal properties. Must not be <code>null</code>.
+     */
+    public void restoreState(IMemento memento, Map<String, Object> properties);
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IPreferenceKeys.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IPreferenceKeys.java
new file mode 100644 (file)
index 0000000..c4df89d
--- /dev/null
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.interfaces;
+
+/**
+ * Terminal plug-in preference key definitions.
+ *
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IPreferenceKeys {
+       /**
+        * Preference keys family prefix.
+        */
+       public final String PREF_TERMINAL = "terminals"; //$NON-NLS-1$
+
+       /**
+        * Preference key: Remove terminated terminals when a new terminal is created.
+        */
+       public final String PREF_REMOVE_TERMINATED_TERMINALS = PREF_TERMINAL + ".removeTerminatedTerminals"; //$NON-NLS-1$
+
+       // showin preferences
+
+       /**
+        * Preference key: Local terminal initial working directory.
+        * @since 4.1
+        */
+       public final String PREF_LOCAL_TERMINAL_INITIAL_CWD = PREF_TERMINAL + ".localTerminalInitialCwd"; //$NON-NLS-1$
+
+       /**
+        * Preference value: Local terminal initial working directory is "User home"
+        * @since 4.1
+        */
+       public final String PREF_INITIAL_CWD_USER_HOME = "userhome"; //$NON-NLS-1$
+
+       /**
+        * Preference value: Local terminal initial working directory is "Eclipse home"
+        * @since 4.1
+        */
+       public final String PREF_INITIAL_CWD_ECLIPSE_HOME = "eclipsehome"; //$NON-NLS-1$
+
+       /**
+        * Preference value: Local terminal initial working directory is "Eclipse workspace"
+        * @since 4.1
+        */
+       public final String PREF_INITIAL_CWD_ECLIPSE_WS = "eclipsews"; //$NON-NLS-1$
+
+       /**
+        * Preference key: Local terminal default shell command on Unix hosts.
+        * @since 4.1
+        */
+       public final String PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX = PREF_TERMINAL + ".localTerminalDefaultShellUnix"; //$NON-NLS-1$
+
+       /**
+        * Preference key: Local terminal default shell command arguments on Unix hosts.
+        * @since 4.1
+        */
+       public final String PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX_ARGS = PREF_TERMINAL + ".localTerminalDefaultShellUnixArgs"; //$NON-NLS-1$
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/ITerminalsView.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/ITerminalsView.java
new file mode 100644 (file)
index 0000000..c3a5ec8
--- /dev/null
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.interfaces;
+
+import org.eclipse.ui.IViewPart;
+
+/**
+ * Terminal view public interface.
+ *
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface ITerminalsView extends IViewPart {
+
+       /**
+        * Switch to the empty page control.
+        */
+       public void switchToEmptyPageControl();
+
+       /**
+        * Switch to the tab folder control.
+        */
+       public void switchToTabFolderControl();
+
+       /**
+        * Returns the context help id associated with the terminal
+        * console view instance.
+        *
+        * @return The context help id or <code>null</code> if none is associated.
+        */
+       public String getContextHelpId();
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IUIConstants.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/IUIConstants.java
new file mode 100644 (file)
index 0000000..dcaaddd
--- /dev/null
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.interfaces;
+
+/**
+ * Terminal common UI constants.
+ *
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IUIConstants {
+       /**
+        * The view id of the terminals view.
+        */
+       public static final String ID = "org.eclipse.tm.terminal.view.ui.TerminalsView"; //$NON-NLS-1$
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/ImageConsts.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/ImageConsts.java
new file mode 100644 (file)
index 0000000..dd43cb7
--- /dev/null
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.interfaces;
+
+/**
+ * Image registry constants.
+ *
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface ImageConsts {
+       /**
+        * The root directory where to load the images from, relative to
+        * the bundle directory.
+        */
+    public final static String IMAGE_DIR_ROOT = "icons/"; //$NON-NLS-1$
+
+    /**
+     * The directory where to load colored local toolbar images from,
+     * relative to the image root directory.
+     */
+    public final static String  IMAGE_DIR_CLCL = "clcl16/"; //$NON-NLS-1$
+
+    /**
+     * The directory where to load disabled local toolbar images from,
+     * relative to the image root directory.
+     */
+    public final static String  IMAGE_DIR_DLCL = "dlcl16/"; //$NON-NLS-1$
+
+    /**
+     * The directory where to load enabled local toolbar images from,
+     * relative to the image root directory.
+     */
+    public final static String  IMAGE_DIR_ELCL = "elcl16/"; //$NON-NLS-1$
+
+    /**
+     * The directory where to load view related images from, relative to
+     * the image root directory.
+     */
+    public final static String  IMAGE_DIR_EVIEW = "eview16/"; //$NON-NLS-1$
+
+    /**
+     * The key to access the terminals console view image.
+     */
+    public static final String VIEW_Terminals = "TerminalsView"; //$NON-NLS-1$
+
+    /**
+     * The key to access the scroll lock action image (enabled).
+     */
+    public static final String  ACTION_ScrollLock_Enabled = "ScrollLockAction_enabled"; //$NON-NLS-1$
+
+    /**
+     * The key to access the scroll lock action image (disabled).
+     */
+    public static final String  ACTION_ScrollLock_Disabled = "ScrollLockAction_disabled"; //$NON-NLS-1$
+
+    /**
+     * The key to access the scroll lock action image (hover).
+     */
+    public static final String  ACTION_ScrollLock_Hover = "ScrollLockAction_hover"; //$NON-NLS-1$
+
+    /**
+     * The key to access the new terminal view action image (enabled).
+     * @since 4.1
+     */
+    public static final String  ACTION_NewTerminalView_Enabled = "NewTerminalViewAction_enabled"; //$NON-NLS-1$
+
+    /**
+     * The key to access the new terminal view action image (disabled).
+     * @since 4.1
+     */
+    public static final String  ACTION_NewTerminalView_Disabled = "NewTerminalViewAction_disabled"; //$NON-NLS-1$
+
+    /**
+     * The key to access the new terminal view action image (hover).
+     * @since 4.1
+     */
+    public static final String  ACTION_NewTerminalView_Hover = "NewTerminalViewAction_hover"; //$NON-NLS-1$
+
+    /**
+     * The key to access the toggle command field action image (enabled).
+     */
+    public static final String  ACTION_ToggleCommandField_Enabled = "ToggleCommandField_enabled"; //$NON-NLS-1$
+
+    /**
+     * The key to access the toggle command field action image (disabled).
+     */
+    public static final String  ACTION_ToggleCommandField_Disabled = "ToggleCommandField_disabled"; //$NON-NLS-1$
+
+    /**
+     * The key to access the toggle command field action image (hover).
+     */
+    public static final String  ACTION_ToggleCommandField_Hover = "ToggleCommandField_hover"; //$NON-NLS-1$
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/tracing/ITraceIds.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/interfaces/tracing/ITraceIds.java
new file mode 100644 (file)
index 0000000..d0e4d4d
--- /dev/null
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.interfaces.tracing;
+
+/**
+ * Core plug-in trace slot identifiers.
+ *
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface ITraceIds {
+
+       /**
+        * If activated, tracing information about the terminals output stream monitor is printed out.
+        */
+       public static final String TRACE_OUTPUT_STREAM_MONITOR = "trace/outputStreamMonitor"; //$NON-NLS-1$
+
+       /**
+        * If activated, tracing information about the launch terminal command handler is printed out.
+        */
+       public static final String TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER = "trace/launchTerminalCommandHandler"; //$NON-NLS-1$
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/ExternalExecutablesState.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/ExternalExecutablesState.java
new file mode 100644 (file)
index 0000000..83e009c
--- /dev/null
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Dirk Fauth and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Dirk Fauth <dirk.fauth@googlemail.com> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.internal;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.tm.terminal.view.ui.local.showin.ExternalExecutablesManager;
+import org.eclipse.ui.AbstractSourceProvider;
+import org.eclipse.ui.ISources;
+
+/**
+ * SourceProvider that provides a state to determine whether external executables are configured or not.
+ */
+public class ExternalExecutablesState extends AbstractSourceProvider {
+       public final static String CONFIGURED_STATE = "org.eclipse.tm.terminal.external.executable.configured"; //$NON-NLS-1$
+       private boolean enabled;
+
+       public ExternalExecutablesState() {
+               List<Map<String, String>> externals = ExternalExecutablesManager.load();
+               this.enabled = (externals != null && !externals.isEmpty());
+       }
+
+       @Override
+       public String[] getProvidedSourceNames() {
+               return new String[] { CONFIGURED_STATE };
+       }
+
+       @Override
+       public Map getCurrentState() {
+               Map<String, String> map = new HashMap<String, String>(1);
+               map.put(CONFIGURED_STATE, Boolean.valueOf(enabled).toString().toUpperCase());
+               return map;
+       }
+
+       public void enable() {
+               fireSourceChanged(ISources.WORKBENCH, CONFIGURED_STATE, "TRUE");                 //$NON-NLS-1$
+       }
+
+       public void disable() {
+               fireSourceChanged(ISources.WORKBENCH, CONFIGURED_STATE, "FALSE");                //$NON-NLS-1$
+       }
+
+       @Override
+       public void dispose() {
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/PropertyTester.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/PropertyTester.java
new file mode 100644 (file)
index 0000000..ea40411
--- /dev/null
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.internal;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
+import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
+import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
+
+
+/**
+ * Terminal property tester implementation.
+ */
+public class PropertyTester extends org.eclipse.core.expressions.PropertyTester {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
+        */
+       @SuppressWarnings("cast")
+       @Override
+       public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+
+               if ("hasApplicableLauncherDelegates".equals(property)) { //$NON-NLS-1$
+                       ISelection selection = receiver instanceof ISelection ? (ISelection)receiver : new StructuredSelection(receiver);
+                       return expectedValue.equals(Boolean.valueOf(LauncherDelegateManager.getInstance().getApplicableLauncherDelegates(selection).length > 0));
+               }
+
+               if ("canDisconnect".equals(property) && receiver instanceof ITerminalsView) { //$NON-NLS-1$
+                       CTabItem tabItem = null;
+
+                       TabFolderManager manager = (TabFolderManager) ((ITerminalsView)receiver).getAdapter(TabFolderManager.class);
+                       if (manager != null) {
+                               tabItem = manager.getActiveTabItem();
+                       }
+
+                       if (tabItem != null && !tabItem.isDisposed() && tabItem.getData() instanceof ITerminalViewControl) {
+                   ITerminalViewControl terminal = (ITerminalViewControl)tabItem.getData();
+                   TerminalState state = terminal.getState();
+                   return expectedValue.equals(Boolean.valueOf(state != TerminalState.CLOSED));
+                       }
+                       return false;
+               }
+
+               return false;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/SettingsStore.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/SettingsStore.java
new file mode 100644 (file)
index 0000000..3d92a2a
--- /dev/null
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.internal;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+
+/**
+ * Simple default Terminal settings store implementation keeping the settings
+ * within memory.
+ */
+public class SettingsStore implements ISettingsStore {
+       private final Map<String, Object> settings = new HashMap<String, Object>();
+
+       /**
+        * Constructor.
+        */
+       public SettingsStore() {
+       }
+
+       /**
+        * Returns the map containing the settings.
+        *
+        * @return The map containing the settings.
+        */
+       public final Map<String, Object> getSettings() {
+               return settings;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore#get(java.lang.String, java.lang.String)
+        */
+       @Override
+       public final String get(String key, String defaultValue) {
+               Assert.isNotNull(key);
+               String value = settings.get(key) instanceof String ? (String) settings.get(key) : null;
+               return value != null ? value : defaultValue;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore#get(java.lang.String)
+        */
+       @Override
+       public final String get(String key) {
+               Assert.isNotNull(key);
+               return settings.get(key) instanceof String ? (String) settings.get(key) : null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore#put(java.lang.String, java.lang.String)
+        */
+       @Override
+       public final void put(String key, String value) {
+               Assert.isNotNull(key);
+               if (value == null) settings.remove(key);
+               else settings.put(key, value);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/EncodingSelectionDialog.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/EncodingSelectionDialog.java
new file mode 100644 (file)
index 0000000..b129b5a
--- /dev/null
@@ -0,0 +1,230 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.internal.dialogs;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.tm.terminal.view.ui.help.IContextHelpIds;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Encoding selection dialog implementation.
+ */
+public class EncodingSelectionDialog extends TrayDialog {
+       private String contextHelpId = null;
+
+       // The selected encoding or null
+       /* default */ String encoding = null;
+
+       // Reference to the encodings panel
+       private EncodingPanel encodingPanel = null;
+
+       /**
+        * Encodings panel implementation
+        */
+       protected class EncodingPanel extends AbstractExtendedConfigurationPanel {
+
+               /**
+                * Constructor
+                *
+                * @param container The configuration panel container or <code>null</code>.
+                */
+        public EncodingPanel(IConfigurationPanelContainer container) {
+               super(container);
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite)
+         */
+        @Override
+        public void setupPanel(Composite parent) {
+               Composite panel = new Composite(parent, SWT.NONE);
+               panel.setLayout(new GridLayout());
+               GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+               panel.setLayoutData(data);
+
+               // Create the encoding selection combo
+               createEncodingUI(panel, false);
+               if (EncodingSelectionDialog.this.encoding != null) {
+                       setEncoding(EncodingSelectionDialog.this.encoding);
+               }
+
+               setControl(panel);
+        }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean)
+                */
+        @Override
+        protected void saveSettingsForHost(boolean add) {
+        }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String)
+                */
+        @Override
+        protected void fillSettingsForHost(String host) {
+        }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getHostFromSettings()
+                */
+        @Override
+        protected String getHostFromSettings() {
+               return null;
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#getEncoding()
+         */
+        @Override
+        public String getEncoding() {
+            return super.getEncoding();
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#setEncoding(java.lang.String)
+         */
+        @Override
+        public void setEncoding(String encoding) {
+            super.setEncoding(encoding);
+        }
+       }
+
+       /**
+     * Constructor.
+     *
+        * @param shell The parent shell or <code>null</code>.
+     */
+    public EncodingSelectionDialog(Shell shell) {
+           super(shell);
+
+               this.contextHelpId = IContextHelpIds.ENCODING_SELECTION_DIALOG;
+               setHelpAvailable(true);
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       protected final Control createDialogArea(Composite parent) {
+               if (contextHelpId != null) {
+                       PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, contextHelpId);
+               }
+
+               // Let the super implementation create the dialog area control
+               Control control = super.createDialogArea(parent);
+               // Setup the inner panel as scrollable composite
+               if (control instanceof Composite) {
+                       ScrolledComposite sc = new ScrolledComposite((Composite)control, SWT.V_SCROLL);
+
+                       GridLayout layout = new GridLayout(1, true);
+                       layout.marginHeight = 0; layout.marginWidth = 0;
+                       layout.verticalSpacing = 0; layout.horizontalSpacing = 0;
+
+                       sc.setLayout(layout);
+                       sc.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
+
+                       sc.setExpandHorizontal(true);
+                       sc.setExpandVertical(true);
+
+                       Composite composite = new Composite(sc, SWT.NONE);
+                       composite.setLayout(new GridLayout());
+
+                       // Setup the dialog area content
+                       createDialogAreaContent(composite);
+
+                       sc.setContent(composite);
+                       sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+
+                       // Return the scrolled composite as new dialog area control
+                       control = sc;
+               }
+
+               return control;
+       }
+
+       /**
+        * Creates the dialog area content.
+        *
+        * @param parent The parent composite. Must not be <code>null</code>.
+        */
+    protected void createDialogAreaContent(Composite parent) {
+       Assert.isNotNull(parent);
+
+       setDialogTitle(Messages.EncodingSelectionDialog_title);
+
+        Composite panel = new Composite(parent, SWT.NONE);
+        GridLayout layout = new GridLayout(2, false);
+        layout.marginHeight = 0; layout.marginWidth = 0;
+        panel.setLayout(layout);
+        panel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
+
+        encodingPanel = new EncodingPanel(null);
+        encodingPanel.setupPanel(panel);
+
+        applyDialogFont(panel);
+    }
+
+       /**
+        * Sets the title for this dialog.
+        *
+        * @param title The title.
+        */
+       public void setDialogTitle(String title) {
+               if (getShell() != null && !getShell().isDisposed()) {
+                       getShell().setText(title);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+        */
+    @Override
+    protected void okPressed() {
+       // Save the selected encoding
+       if (encodingPanel != null) encoding = encodingPanel.getEncoding();
+        super.okPressed();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
+     */
+    @Override
+    protected void cancelPressed() {
+       // Reset the encoding
+       encoding = null;
+        super.cancelPressed();
+    }
+
+    /**
+     * Set the encoding to default to on creating the dialog.
+     */
+    public final void setEncoding(String encoding) {
+       this.encoding = encoding;
+    }
+
+    /**
+     * Returns the selected encoding or <code>null</code>.
+     */
+    public final String getEncoding() {
+       return encoding;
+    }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/LaunchTerminalSettingsDialog.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/dialogs/LaunchTerminalSettingsDialog.java
new file mode 100644 (file)
index 0000000..af52d93
--- /dev/null
@@ -0,0 +1,647 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [361352] [TERMINALS][SSH] Add SSH terminal support
+ * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.internal.dialogs;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.controls.ConfigurationPanelControl;
+import org.eclipse.tm.terminal.view.ui.help.IContextHelpIds;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
+import org.eclipse.tm.terminal.view.ui.interfaces.IExternalExecutablesProperties;
+import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
+import org.eclipse.tm.terminal.view.ui.interfaces.tracing.ITraceIds;
+import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
+import org.eclipse.tm.terminal.view.ui.local.showin.ExternalExecutablesManager;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Launch terminal settings dialog implementation.
+ */
+public class LaunchTerminalSettingsDialog extends TrayDialog {
+       private String contextHelpId = null;
+
+       // The parent selection
+       private ISelection selection = null;
+
+       // The sub controls
+       /* default */ Combo terminals;
+       /* default */ SettingsPanelControl settings;
+
+       // Map the label added to the combo box to the corresponding launcher delegate.
+       /* default */ final Map<String, ILauncherDelegate> label2delegate = new HashMap<String, ILauncherDelegate>();
+
+       // Map the label added to the combo box to the corresponding launcher properties for external executables.
+       /* default */ final Map<String, Map<String, Object>> label2properties = new HashMap<String, Map<String, Object>>();
+
+       // The data object containing the currently selected settings
+       private Map<String, Object> data = null;
+
+       // The dialog settings storage
+       private IDialogSettings dialogSettings;
+
+       // In case of a single available terminal launcher delegate, the label of that delegate
+       private String singleDelegateLabel = null;
+
+       /**
+        * The control managing the terminal setting panels.
+        */
+       protected class SettingsPanelControl extends ConfigurationPanelControl {
+
+               /**
+                * Constructor.
+                */
+        public SettingsPanelControl() {
+               setPanelIsGroup(true);
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.tm.terminal.view.ui.controls.ConfigurationPanelControl#getGroupLabel()
+         */
+        @Override
+        public String getGroupLabel() {
+            return Messages.LaunchTerminalSettingsDialog_group_label;
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.tm.terminal.view.ui.controls.ConfigurationPanelControl#showConfigurationPanel(java.lang.String)
+         */
+        @Override
+        public void showConfigurationPanel(String key) {
+               // Check if we have to create the panel first
+               IConfigurationPanel configPanel = getConfigurationPanel(key);
+               if (isEmptyConfigurationPanel(configPanel)) {
+                       // Get the corresponding delegate
+                       ILauncherDelegate delegate = label2delegate.get(key);
+                       Assert.isNotNull(delegate);
+                       // Create the wizard configuration panel instance
+                       configPanel = delegate.getPanel(this);
+                       if (configPanel != null) {
+                               // Add it to the settings panel control
+                               settings.addConfigurationPanel(key, configPanel);
+                       // Push the selection to the configuration panel
+                       configPanel.setSelection(getSelection());
+                       // Create the panel controls
+                       configPanel.setupPanel(getPanel());
+                       // Restore widget values
+                       IDialogSettings dialogSettings = LaunchTerminalSettingsDialog.this.settings.getDialogSettings(LaunchTerminalSettingsDialog.this.getDialogSettings());
+                       IDialogSettings configPanelSettings = dialogSettings != null ? dialogSettings.getSection(key) : null;
+                       if (configPanelSettings != null) configPanel.doRestoreWidgetValues(configPanelSettings, null);
+                       }
+               }
+
+            super.showConfigurationPanel(key);
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer#validate()
+         */
+        @Override
+        public void validate() {
+               LaunchTerminalSettingsDialog.this.validate();
+        }
+       }
+
+       /**
+     * Constructor.
+     *
+        * @param shell The parent shell or <code>null</code>.
+     */
+    public LaunchTerminalSettingsDialog(Shell shell) {
+           this(shell, 0);
+    }
+
+    private long start = 0;
+
+       /**
+     * Constructor.
+     *
+        * @param shell The parent shell or <code>null</code>.
+     */
+    public LaunchTerminalSettingsDialog(Shell shell, long start) {
+           super(shell);
+           this.start = start;
+
+           initializeDialogSettings();
+
+               this.contextHelpId = IContextHelpIds.LAUNCH_TERMINAL_SETTINGS_DIALOG;
+               setHelpAvailable(true);
+    }
+
+    /**
+     * Sets the parent selection.
+     *
+     * @param selection The parent selection or <code>null</code>.
+     */
+    public void setSelection(ISelection selection) {
+       this.selection = selection;
+    }
+
+    /**
+     * Returns the parent selection.
+     *
+     * @return The parent selection or <code>null</code>.
+     */
+    public ISelection getSelection() {
+       return selection;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.Dialog#close()
+     */
+       @Override
+       public boolean close() {
+               dispose();
+               return super.close();
+       }
+
+    /**
+     * Dispose the dialog resources.
+     */
+    protected void dispose() {
+       if (settings != null) { settings.dispose(); settings = null; }
+       dialogSettings = null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.Dialog#isResizable()
+     */
+    @Override
+    protected boolean isResizable() {
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.Dialog#createContents(org.eclipse.swt.widgets.Composite)
+     */
+    @Override
+    protected Control createContents(Composite parent) {
+        Control composite = super.createContents(parent);
+
+        // Validate the dialog after having created all the content
+        validate();
+
+        return composite;
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       protected final Control createDialogArea(Composite parent) {
+               if (contextHelpId != null) {
+                       PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, contextHelpId);
+               }
+
+               // Let the super implementation create the dialog area control
+               Control control = super.createDialogArea(parent);
+               // Setup the inner panel as scrollable composite
+               if (control instanceof Composite) {
+                       ScrolledComposite sc = new ScrolledComposite((Composite)control, SWT.V_SCROLL);
+
+                       GridLayout layout = new GridLayout(1, true);
+                       layout.marginHeight = 0; layout.marginWidth = 0;
+                       layout.verticalSpacing = 0; layout.horizontalSpacing = 0;
+
+                       sc.setLayout(layout);
+                       sc.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
+
+                       sc.setExpandHorizontal(true);
+                       sc.setExpandVertical(true);
+
+                       Composite composite = new Composite(sc, SWT.NONE);
+                       composite.setLayout(new GridLayout());
+
+                       // Setup the dialog area content
+                       createDialogAreaContent(composite);
+
+                       sc.setContent(composite);
+                       sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+
+                       // Return the scrolled composite as new dialog area control
+                       control = sc;
+               }
+
+               return control;
+       }
+
+       /**
+        * Sets the title for this dialog.
+        *
+        * @param title The title.
+        */
+       public void setDialogTitle(String title) {
+               if (getShell() != null && !getShell().isDisposed()) {
+                       getShell().setText(title);
+               }
+       }
+
+       /**
+        * Creates the dialog area content.
+        *
+        * @param parent The parent composite. Must not be <code>null</code>.
+        */
+    protected void createDialogAreaContent(Composite parent) {
+       Assert.isNotNull(parent);
+
+        if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
+                       UIPlugin.getTraceHandler().trace("Creating dialog area after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
+                                                                                               ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
+               }
+
+       setDialogTitle(Messages.LaunchTerminalSettingsDialog_title);
+
+       final List<String> items = getTerminals();
+
+        Composite panel = new Composite(parent, SWT.NONE);
+        GridLayout layout = new GridLayout(2, false);
+        layout.marginHeight = 0; layout.marginWidth = 0;
+        panel.setLayout(layout);
+        panel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
+
+        if (items.size() != 1) {
+               Label label = new Label(panel, SWT.HORIZONTAL);
+               label.setText(Messages.LaunchTerminalSettingsDialog_combo_label);
+
+               terminals = new Combo(panel, SWT.READ_ONLY);
+               terminals.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+               terminals.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               // Get the old panel
+                               IConfigurationPanel oldPanel = settings.getActiveConfigurationPanel();
+                               // Extract the current settings in an special properties container
+                               Map<String, Object> data = new HashMap<String, Object>();
+                               if (oldPanel != null) oldPanel.extractData(data);
+                               // Clean out settings which are never passed between the panels
+                               data.remove(ITerminalsConnectorConstants.PROP_IP_PORT);
+                               data.remove(ITerminalsConnectorConstants.PROP_TIMEOUT);
+                               data.remove(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
+                               data.remove(ITerminalsConnectorConstants.PROP_ENCODING);
+                               // Switch to the new panel
+                               settings.showConfigurationPanel(terminals.getText());
+                               // Get the new panel
+                               IConfigurationPanel newPanel = settings.getActiveConfigurationPanel();
+                               // Re-setup the relevant data
+                               if (newPanel != null) newPanel.setupData(data);
+
+                               // resize the dialog if needed to show the complete panel
+                               getShell().pack();
+                               // validate the settings dialog
+                               validate();
+                       }
+               });
+
+            // fill the combo with content
+            fillCombo(terminals, items);
+        } else {
+               Assert.isTrue(items.size() == 1);
+               singleDelegateLabel = items.get(0);
+        }
+
+        // Create the settings panel control
+        settings = new SettingsPanelControl();
+
+               // Create, initialize and add the first visible panel. All
+        // other panels are created on demand only.
+        String terminalLabel = terminals != null ? terminals.getItem(0) : singleDelegateLabel;
+        if (terminalLabel != null) {
+                       // Get the corresponding delegate
+                       ILauncherDelegate delegate = label2delegate.get(terminalLabel);
+                       Assert.isNotNull(delegate);
+                       // Create the wizard configuration panel instance
+                       IConfigurationPanel configPanel = delegate.getPanel(settings);
+                       if (configPanel != null) {
+                               // Add it to the settings panel control
+                       settings.addConfigurationPanel(terminalLabel, configPanel);
+               // Push the selection to the configuration panel
+               configPanel.setSelection(getSelection());
+                       }
+        }
+
+               // Setup the panel control
+               settings.setupPanel(panel, terminals != null ? terminals.getItems() : new String[] { singleDelegateLabel });
+               GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
+               layoutData.horizontalSpan = 2;
+               settings.getPanel().setLayoutData(layoutData);
+
+               // Preselect the first terminal launcher
+               if (terminals != null) {
+                       terminals.select(0);
+                       settings.showConfigurationPanel(terminals.getText());
+
+                       terminals.setEnabled(terminals.getItemCount() > 1);
+               } else {
+                       settings.showConfigurationPanel(singleDelegateLabel);
+               }
+
+               restoreWidgetValues();
+
+        applyDialogFont(panel);
+
+               if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
+                       UIPlugin.getTraceHandler().trace("Created dialog area after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
+                                                                                               ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
+               }
+    }
+
+    /**
+     * Fill the given combo with the given list of terminal launcher delegate labels.
+     *
+     * @param combo The combo. Must not be <code>null</code>.
+     * @param items The list of terminal launcher delegates. Must not be <code>null</code>.
+     */
+    protected void fillCombo(Combo combo, List<String> items) {
+       Assert.isNotNull(combo);
+       Assert.isNotNull(items);
+
+               if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
+                       UIPlugin.getTraceHandler().trace("Filling combo after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
+                                                                                               ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
+               }
+
+       Collections.sort(items);
+       combo.setItems(items.toArray(new String[items.size()]));
+    }
+
+    /**
+     * Returns the list of terminal launcher delegate labels. The method queries the
+     * terminal launcher delegates and initialize the <code>label2delegate</code> map.
+     *
+     * @return The list of terminal launcher delegate labels or an empty list.
+     */
+    protected List<String> getTerminals() {
+       List<String> items = new ArrayList<String>();
+
+       ILauncherDelegate localLauncher = null;
+
+       if(selection==null || selection.isEmpty()){
+               if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
+                       UIPlugin.getTraceHandler().trace("Getting launcher delegates after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
+                                                                                               ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
+               }
+
+                       ILauncherDelegate[] delegates = LauncherDelegateManager.getInstance().getLauncherDelegates(false);
+
+               if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
+                       UIPlugin.getTraceHandler().trace("Got launcher delegates after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
+                                                                                               ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
+               }
+
+               for (ILauncherDelegate delegate : delegates) {
+                       if (delegate.isHidden() || isFiltered(selection, delegate)) continue;
+                       String label = delegate.getLabel();
+                       if (label == null || "".equals(label.trim())) label = delegate.getId(); //$NON-NLS-1$
+                       label2delegate.put(label, delegate);
+                       items.add(label);
+
+                       if ("org.eclipse.tm.terminal.connector.local.launcher.local".equals(delegate.getId())) { //$NON-NLS-1$
+                               localLauncher = delegate;
+                       }
+               }
+       } else {
+               if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
+                       UIPlugin.getTraceHandler().trace("Getting applicable launcher delegates after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
+                                                                                               ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
+               }
+
+               ILauncherDelegate[] delegates = LauncherDelegateManager.getInstance().getApplicableLauncherDelegates(selection);
+
+               if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
+                       UIPlugin.getTraceHandler().trace("Got applicable launcher delegates after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
+                                                                                               ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalSettingsDialog.this);
+               }
+
+               for (ILauncherDelegate delegate : delegates) {
+                       if (delegate.isHidden() || isFiltered(selection, delegate)) continue;
+                       String label = delegate.getLabel();
+                       if (label == null || "".equals(label.trim())) label = delegate.getId(); //$NON-NLS-1$
+                       label2delegate.put(label, delegate);
+                       items.add(label);
+
+                       if ("org.eclipse.tm.terminal.connector.local.launcher.local".equals(delegate.getId())) { //$NON-NLS-1$
+                               localLauncher = delegate;
+                       }
+               }
+       }
+
+       // if the local launcher was found, check for configured external executables
+       if (localLauncher != null) {
+                       List<Map<String, String>> l = ExternalExecutablesManager.load();
+                       if (l != null && !l.isEmpty()) {
+                               for (Map<String, String> executableData : l) {
+                                       String name = executableData.get(IExternalExecutablesProperties.PROP_NAME);
+                                       String path = executableData.get(IExternalExecutablesProperties.PROP_PATH);
+                                       String args = executableData.get(IExternalExecutablesProperties.PROP_ARGS);
+
+                                       String strTranslate = executableData.get(IExternalExecutablesProperties.PROP_TRANSLATE);
+                                       boolean translate = strTranslate != null ? Boolean.parseBoolean(strTranslate) : false;
+
+                                       if (name != null && !"".equals(name) && path != null && !"".equals(path)) { //$NON-NLS-1$ //$NON-NLS-2$
+                                               ISelectionService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
+                                               ISelection selection = service != null ? service.getSelection() : null;
+                                               if (selection != null && selection.isEmpty()) selection = null;
+
+                                               Map<String, Object> properties = new HashMap<String, Object>();
+                                       properties.put(ITerminalsConnectorConstants.PROP_PROCESS_PATH, path);
+                                       properties.put(ITerminalsConnectorConstants.PROP_PROCESS_ARGS, args);
+                                       properties.put(ITerminalsConnectorConstants.PROP_TRANSLATE_BACKSLASHES_ON_PASTE, Boolean.valueOf(translate));
+
+                                       // store external executable and properties
+                                       label2delegate.put(name, localLauncher);
+                                       label2properties.put(name, properties);
+                                       items.add(name);
+                                       }
+                               }
+                       }
+
+       }
+
+       return items;
+    }
+
+    /**
+     * Hook to allow additional filtering of the applicable launcher delegates.
+     * <p>
+     * <b>Note:</b> The default implementation always returns <code>false</code>.
+     *
+     * @param selection The selection or <code>null</code>.
+     * @param delegate The launcher delegate. Must not be <code>null</code>.
+     *
+     * @return <code>True</code> if the launcher delegate is filtered based on the given selection, <code>false</code> otherwise.
+     */
+    protected boolean isFiltered(ISelection selection, ILauncherDelegate delegate) {
+       return false;
+    }
+
+    /**
+     * Validate the dialog.
+     */
+    public void validate() {
+       IConfigurationPanel panel = this.settings.getActiveConfigurationPanel();
+       Button okButton = getButton(IDialogConstants.OK_ID);
+       if (okButton != null) okButton.setEnabled(panel.isValid());
+    }
+
+    /**
+     * Set the given message and message type.
+     *
+     * @param message The message or <code>null</code>.
+     * @param messageType The message type or <code>IMessageProvider.NONE</code>.
+     */
+    public void setMessage(String message, int messageType) {
+       if (settings != null) {
+               settings.setMessage(message, messageType);
+       }
+    }
+
+    /**
+     * Save the dialog's widget values.
+     */
+    protected void saveWidgetValues() {
+       IDialogSettings settings = getDialogSettings();
+       if (settings != null && terminals != null) {
+               settings.put("terminalLabel", terminals.getText()); //$NON-NLS-1$
+               this.settings.saveWidgetValues(settings, null);
+       }
+    }
+
+    /**
+     * Restore the dialog's widget values.
+     */
+    protected void restoreWidgetValues() {
+       IDialogSettings settings = getDialogSettings();
+       if (settings != null) {
+               String terminalLabel = settings.get("terminalLabel"); //$NON-NLS-1$
+               int index = terminalLabel != null && terminals != null ? Arrays.asList(terminals.getItems()).indexOf(terminalLabel) : -1;
+               if (index != -1) {
+                       terminals.select(index);
+                       this.settings.showConfigurationPanel(terminals.getText());
+               }
+
+               this.settings.restoreWidgetValues(settings, null);
+       }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+     */
+    @Override
+    protected void okPressed() {
+       IConfigurationPanel panel = this.settings.getActiveConfigurationPanel();
+       Assert.isNotNull(panel);
+
+       if (!panel.isValid()) {
+                       MessageBox mb = new MessageBox(getShell(), SWT.ICON_ERROR | SWT.OK);
+                       mb.setText(Messages.LaunchTerminalSettingsDialog_error_title);
+                       mb.setMessage(NLS.bind(Messages.LaunchTerminalSettingsDialog_error_invalidSettings, panel.getMessage() != null ? panel.getMessage() : Messages.LaunchTerminalSettingsDialog_error_unknownReason));
+                       mb.open();
+                       return;
+       }
+       data = new HashMap<String, Object>();
+
+       // Store the id of the selected delegate
+       String terminalLabel = terminals != null ? terminals.getText() : singleDelegateLabel;
+       String delegateId = terminalLabel != null ? label2delegate.get(terminalLabel).getId() : null;
+       if (delegateId != null) data.put(ITerminalsConnectorConstants.PROP_DELEGATE_ID, delegateId);
+       // Store the selection
+       data.put(ITerminalsConnectorConstants.PROP_SELECTION, selection);
+
+       // Add the properties for external executables if there are any
+       if (label2properties.containsKey(terminalLabel)) {
+               data.putAll(label2properties.get(terminalLabel));
+       }
+
+       // Store the delegate specific settings
+               panel.extractData(data);
+
+               // Save the current widget values
+               saveWidgetValues();
+
+               super.okPressed();
+    }
+
+    /**
+     * Returns the configured terminal launcher settings.
+     * <p>
+     * The settings are extracted from the UI widgets once
+     * OK got pressed.
+     *
+     * @return The configured terminal launcher settings or <code>null</code>.
+     */
+    public Map<String, Object> getSettings() {
+       return data;
+    }
+
+       /**
+        * Initialize the dialog settings storage.
+        */
+       protected void initializeDialogSettings() {
+               IDialogSettings settings = UIPlugin.getDefault().getDialogSettings();
+               Assert.isNotNull(settings);
+               IDialogSettings section = settings.getSection(getClass().getSimpleName());
+               if (section == null) {
+                       section = settings.addNewSection(getClass().getSimpleName());
+               }
+               setDialogSettings(section);
+       }
+
+       /**
+        * Returns the associated dialog settings storage.
+        *
+        * @return The dialog settings storage.
+        */
+       public IDialogSettings getDialogSettings() {
+               // The dialog settings may not been initialized here. Initialize first in this case
+               // to be sure that we do have always the correct dialog settings.
+               if (dialogSettings == null) {
+                       initializeDialogSettings();
+               }
+               return dialogSettings;
+       }
+
+       /**
+        * Sets the associated dialog settings storage.
+        *
+        * @return The dialog settings storage.
+        */
+       public void setDialogSettings(IDialogSettings dialogSettings) {
+               this.dialogSettings = dialogSettings;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/AbstractTriggerCommandHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/AbstractTriggerCommandHandler.java
new file mode 100644 (file)
index 0000000..07e36f0
--- /dev/null
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.internal.handler;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.ui.ISources;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
+
+/**
+ * Abstract command handler triggering a command to be executed.
+ */
+public abstract class AbstractTriggerCommandHandler extends AbstractHandler {
+
+       /**
+        * Trigger a command to be executed.
+        *
+        * @param commandId The command id. Must not be <code>null</code>.
+        * @param selection The selection to pass on to the command or <code>null</code>.
+        */
+       @SuppressWarnings("cast")
+       protected void triggerCommand(String commandId, ISelection selection) {
+               Assert.isNotNull(commandId);
+
+               ICommandService service = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class);
+               Command command = service != null ? service.getCommand(commandId) : null;
+               if (command != null && command.isDefined() && command.isEnabled()) {
+                       try {
+                               ParameterizedCommand pCmd = ParameterizedCommand.generateCommand(command, null);
+                               Assert.isNotNull(pCmd);
+                               IHandlerService handlerSvc = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);
+                               Assert.isNotNull(handlerSvc);
+                               IEvaluationContext ctx = handlerSvc.getCurrentState();
+                               if (selection != null) {
+                                       ctx = new EvaluationContext(ctx, selection);
+                                       ctx.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection);
+                               }
+                               handlerSvc.executeCommandInContext(pCmd, null, ctx);
+                       } catch (Exception e) {
+                               // If the platform is in debug mode, we print the exception to the log view
+                               if (Platform.inDebugMode()) {
+                                       IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
+                                                                                               Messages.AbstractTriggerCommandHandler_error_executionFailed, e);
+                                       UIPlugin.getDefault().getLog().log(status);
+                               }
+                       }
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/DisconnectTerminalCommandHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/DisconnectTerminalCommandHandler.java
new file mode 100644 (file)
index 0000000..142973b
--- /dev/null
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.internal.handler;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
+import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Disconnect terminal connection command handler implementation.
+ */
+public class DisconnectTerminalCommandHandler extends AbstractHandler {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+        */
+       @SuppressWarnings("cast")
+    @Override
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               CTabItem item = null;
+
+               ISelection selection = HandlerUtil.getCurrentSelection(event);
+               if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+                       Object element = ((IStructuredSelection)selection).getFirstElement();
+                       if (element instanceof CTabItem && ((CTabItem)element).getData() instanceof ITerminalViewControl) {
+                               item = (CTabItem)element;
+                       }
+               }
+
+               if (item == null && HandlerUtil.getActivePart(event) instanceof ITerminalsView) {
+                       ITerminalsView view = (ITerminalsView)HandlerUtil.getActivePart(event);
+                       TabFolderManager mgr = (TabFolderManager)view.getAdapter(TabFolderManager.class);
+                       if (mgr != null && mgr.getActiveTabItem() != null) {
+                               item = mgr.getActiveTabItem();
+                       }
+               }
+
+               if (item != null && item.getData() instanceof ITerminalViewControl) {
+                       ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
+                       if (terminal != null && !terminal.isDisposed()) {
+                               terminal.disconnectTerminal();
+                       }
+               }
+
+               return null;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/LaunchTerminalCommandHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/LaunchTerminalCommandHandler.java
new file mode 100644 (file)
index 0000000..46c34b6
--- /dev/null
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.internal.handler;
+
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.tm.terminal.view.core.TerminalContextPropertiesProviderFactory;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.IContextPropertiesConstants;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
+import org.eclipse.tm.terminal.view.ui.interfaces.tracing.ITraceIds;
+import org.eclipse.tm.terminal.view.ui.internal.dialogs.LaunchTerminalSettingsDialog;
+import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Launch terminal command handler implementation.
+ */
+public class LaunchTerminalCommandHandler extends AbstractHandler {
+
+       /*
+        * (non-Javadoc)
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+        */
+       @Override
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               String commandId = event.getCommand().getId();
+               // "org.eclipse.tm.terminal.view.ui.command.launchToolbar"
+               // "org.eclipse.tm.terminal.view.ui.command.launch"
+
+               long start = System.currentTimeMillis();
+
+               if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
+                       DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
+                       String date = format.format(new Date(start));
+
+                       UIPlugin.getTraceHandler().trace("Started at " + date + " (" + start + ")", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+                                                                                               ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalCommandHandler.this);
+               }
+
+               // Get the active shell
+               Shell shell = HandlerUtil.getActiveShell(event);
+               // Get the current selection
+               ISelection selection = HandlerUtil.getCurrentSelection(event);
+
+               if (commandId.equals("org.eclipse.tm.terminal.view.ui.command.launchToolbar")) { //$NON-NLS-1$
+                       if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
+                               UIPlugin.getTraceHandler().trace("(a) Attempt to open launch terminal settings dialog after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
+                                                                                                       ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalCommandHandler.this);
+                       }
+
+                       LaunchTerminalSettingsDialog dialog = new LaunchTerminalSettingsDialog(shell, start);
+
+                       if(isValidSelection(selection)){
+                               dialog.setSelection(selection);
+                       }
+                       if (dialog.open() == Window.OK) {
+                               // Get the terminal settings from the dialog
+                               Map<String, Object> properties = dialog.getSettings();
+                               if (properties != null) {
+                                       String delegateId = (String)properties.get(ITerminalsConnectorConstants.PROP_DELEGATE_ID);
+                                       Assert.isNotNull(delegateId);
+                                       ILauncherDelegate delegate = LauncherDelegateManager.getInstance().getLauncherDelegate(delegateId, false);
+                                       Assert.isNotNull(delegateId);
+                                       delegate.execute(properties, null);
+                               }
+                       }
+               }
+               else {
+                       if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
+                               UIPlugin.getTraceHandler().trace("Getting applicable launcher delegates after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
+                                                                                                       ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalCommandHandler.this);
+                       }
+
+                       // Check if the dialog needs to be shown at all
+                       ILauncherDelegate[] delegates = LauncherDelegateManager.getInstance().getApplicableLauncherDelegates(selection);
+
+                       if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
+                               UIPlugin.getTraceHandler().trace("Got applicable launcher delegates after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
+                                                                                                       ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalCommandHandler.this);
+                       }
+
+                       if (delegates.length > 1 || (delegates.length == 1 && delegates[0].needsUserConfiguration())) {
+                               if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER)) {
+                                       UIPlugin.getTraceHandler().trace("(b) Attempt to open launch terminal settings dialog after " + (System.currentTimeMillis() - start) + " ms.", //$NON-NLS-1$ //$NON-NLS-2$
+                                                                                                               ITraceIds.TRACE_LAUNCH_TERMINAL_COMMAND_HANDLER, LaunchTerminalCommandHandler.this);
+                               }
+
+                               // Create the launch terminal settings dialog
+                               LaunchTerminalSettingsDialog dialog = new LaunchTerminalSettingsDialog(shell, start);
+                               if(isValidSelection(selection)){
+                                       dialog.setSelection(selection);
+                               }
+                               if (dialog.open() == Window.OK) {
+                                       // Get the terminal settings from the dialog
+                                       Map<String, Object> properties = dialog.getSettings();
+                                       if (properties != null) {
+                                               String delegateId = (String)properties.get(ITerminalsConnectorConstants.PROP_DELEGATE_ID);
+                                               Assert.isNotNull(delegateId);
+                                               ILauncherDelegate delegate = LauncherDelegateManager.getInstance().getLauncherDelegate(delegateId, false);
+                                               Assert.isNotNull(delegateId);
+                                               delegate.execute(properties, null);
+                                       }
+                               }
+                       }
+                       else if (delegates.length == 1) {
+                               ILauncherDelegate delegate = delegates[0];
+                               Map<String, Object> properties = new HashMap<String, Object>();
+
+                               // Store the id of the selected delegate
+                               properties.put(ITerminalsConnectorConstants.PROP_DELEGATE_ID, delegate.getId());
+                               // Store the selection
+                               properties.put(ITerminalsConnectorConstants.PROP_SELECTION, selection);
+
+                               // Execute
+                               delegate.execute(properties, null);
+                       }
+               }
+
+               return null;
+       }
+
+       private boolean isValidSelection(ISelection selection) {
+               if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+                       Object element = ((IStructuredSelection) selection).getFirstElement();
+                       ITerminalContextPropertiesProvider provider = TerminalContextPropertiesProviderFactory.getProvider(element);
+                       if (provider != null) {
+                               Map<String, String> props = provider.getTargetAddress(element);
+                               if (props != null && props.containsKey(IContextPropertiesConstants.PROP_ADDRESS)) {
+                                       return true;
+                               }
+                       }
+               }
+
+               return false;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/MaximizeViewHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/MaximizeViewHandler.java
new file mode 100644 (file)
index 0000000..5803e00
--- /dev/null
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.internal.handler;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+/**
+ * Maximize view handler implementation.
+ */
+public class MaximizeViewHandler extends AbstractTriggerCommandHandler {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+        */
+       @Override
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               triggerCommand("org.eclipse.ui.window.maximizePart", null); //$NON-NLS-1$
+               return null;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/NewTerminalViewHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/NewTerminalViewHandler.java
new file mode 100644 (file)
index 0000000..7cf9098
--- /dev/null
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.internal.handler;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.tm.terminal.view.ui.interfaces.IUIConstants;
+import org.eclipse.tm.terminal.view.ui.manager.ConsoleManager;
+
+/**
+ * New Terminal View handler implementation
+ */
+public class NewTerminalViewHandler extends AbstractTriggerCommandHandler {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+        */
+       @Override
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               String secondaryId = ConsoleManager.getInstance().getNextTerminalSecondaryId(IUIConstants.ID);
+               ConsoleManager.getInstance().showConsoleView(IUIConstants.ID, secondaryId);
+
+               triggerCommand("org.eclipse.tm.terminal.view.ui.command.launchToolbar", null); //$NON-NLS-1$
+
+               return null;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/QuickAccessHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/internal/handler/QuickAccessHandler.java
new file mode 100644 (file)
index 0000000..ac63da8
--- /dev/null
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.internal.handler;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+/**
+ * Quick access handler implementation.
+ */
+public class QuickAccessHandler extends AbstractTriggerCommandHandler {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+        */
+       @Override
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               triggerCommand("org.eclipse.ui.window.quickAccess", null); //$NON-NLS-1$
+               return null;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/launcher/AbstractLauncherDelegate.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/launcher/AbstractLauncherDelegate.java
new file mode 100644 (file)
index 0000000..81ed553
--- /dev/null
@@ -0,0 +1,159 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.launcher;
+
+import java.util.Map;
+
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.ExpressionConverter;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+
+/**
+ * Abstract launcher delegate implementation.
+ */
+public abstract class AbstractLauncherDelegate extends PlatformObject implements ILauncherDelegate {
+       // The mandatory id of the extension
+       private String id = null;
+       // The label of the extension
+       private String label = null;
+       // The converted expression
+       private Expression expression;
+       // The hidden attribute
+       private boolean hidden;
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
+        */
+       @Override
+       public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
+           if (config == null) return;
+
+               // Initialize the id field by reading the <id> extension attribute.
+               // Throws an exception if the id is empty or null.
+               id = config.getAttribute("id"); //$NON-NLS-1$
+               if (id == null || "".equals(id.trim())) { //$NON-NLS-1$
+                       throw createMissingMandatoryAttributeException("id", config.getContributor().getName()); //$NON-NLS-1$
+               }
+
+               // Try the "label" attribute first
+               label = config.getAttribute("label"); //$NON-NLS-1$
+               // If "label" is not found or empty, try the "name" attribute as fallback
+               if (label == null || "".equals(label.trim())) { //$NON-NLS-1$
+                       label = config.getAttribute("name"); //$NON-NLS-1$
+               }
+
+               // Read the sub elements of the extension
+               IConfigurationElement[] children = config.getChildren();
+               // The "enablement" element is the only expected one
+               if (children != null && children.length > 0) {
+                       expression = ExpressionConverter.getDefault().perform(children[0]);
+               }
+
+               // Read "hidden" attribute
+               String value = config.getAttribute("hidden"); //$NON-NLS-1$
+               if (value != null && !"".equals(value.trim())) { //$NON-NLS-1$
+                       hidden = Boolean.parseBoolean(value);
+               }
+       }
+
+       /**
+        * Creates a new {@link CoreException} to be thrown if a mandatory extension attribute
+        * is missing.
+        *
+        * @param attributeName The attribute name. Must not be <code>null</code>.
+        * @param extensionId The extension id. Must not be <code>null</code>.
+        *
+        * @return The {@link CoreException} instance.
+        */
+       protected CoreException createMissingMandatoryAttributeException(String attributeName, String extensionId) {
+               Assert.isNotNull(attributeName);
+               Assert.isNotNull(extensionId);
+
+               return new CoreException(new Status(IStatus.ERROR,
+                               UIPlugin.getUniqueIdentifier(),
+                               0,
+                               NLS.bind(Messages.Extension_error_missingRequiredAttribute, attributeName, extensionId),
+                               null));
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getId()
+        */
+       @Override
+       public String getId() {
+               return id;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getLabel()
+        */
+       @Override
+       public String getLabel() {
+               return label != null ? label.trim() : ""; //$NON-NLS-1$
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getEnablement()
+        */
+       @Override
+    public Expression getEnablement() {
+               return expression;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#isHidden()
+        */
+       @Override
+       public boolean isHidden() {
+           return hidden;
+       }
+
+       /* (non-Javadoc)
+        * @see java.lang.Object#equals(java.lang.Object)
+        */
+       @Override
+       public boolean equals(Object obj) {
+               if (obj instanceof AbstractLauncherDelegate) {
+                       return id.equals(((AbstractLauncherDelegate)obj).id);
+               }
+           return super.equals(obj);
+       }
+
+       /* (non-Javadoc)
+        * @see java.lang.Object#hashCode()
+        */
+       @Override
+       public int hashCode() {
+           return id.hashCode();
+       }
+
+       /**
+        * Get the title from the settings, and use it as the default title.
+        *
+        * @param properties the setting properties map.
+        * @return the value retrieved via the @see {@link ITerminalsConnectorConstants#PROP_TITLE}, or null if the key hasn't been set.
+        *
+        * @since 4.1
+        */
+       protected String getDefaultTerminalTitle(Map<String, Object> properties) {
+               String title = (String)properties.get(ITerminalsConnectorConstants.PROP_TITLE);
+               return title != null ? title : null;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/launcher/LauncherDelegateManager.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/launcher/LauncherDelegateManager.java
new file mode 100644 (file)
index 0000000..2428eef
--- /dev/null
@@ -0,0 +1,422 @@
+/*******************************************************************************
+ * Copyright (c) 2011 - 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.launcher;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.ui.ISources;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.IHandlerService;
+
+/**
+ * Terminal launcher delegate manager implementation.
+ */
+public class LauncherDelegateManager {
+       // Flag to mark the extension point manager initialized (extensions loaded).
+       private boolean initialized = false;
+
+       // The map containing all loaded contributions
+       private final Map<String, Proxy> extensionsMap = new HashMap<String, Proxy>();
+
+       // The extension point comparator
+       private ExtensionPointComparator comparator = null;
+
+       /**
+        * Executable extension proxy implementation.
+        */
+       /* default */ static class Proxy {
+               // The extension instance. Created on first access
+               private ILauncherDelegate instance;
+               // The configuration element
+               private final IConfigurationElement element;
+               // The unique id of the extension.
+               private String id;
+
+               /**
+                * Constructor.
+                *
+                * @param element The configuration element. Must not be <code>null</code>.
+                * @throws CoreException In case the configuration element attribute <i>id</i> is <code>null</code> or empty.
+                */
+               public Proxy(IConfigurationElement element) throws CoreException {
+                       Assert.isNotNull(element);
+                       this.element = element;
+
+                       // Extract the extension attributes
+                       id = element.getAttribute("id"); //$NON-NLS-1$
+                       if (id == null || id.trim().length() == 0) {
+                               throw new CoreException(new Status(IStatus.ERROR,
+                                               UIPlugin.getUniqueIdentifier(),
+                                               0,
+                                               NLS.bind(Messages.Extension_error_missingRequiredAttribute, "id", element.getContributor().getName()), //$NON-NLS-1$
+                                               null));
+                       }
+
+                       instance = null;
+               }
+
+               /**
+                * Returns the extensions unique id.
+                *
+                * @return The unique id.
+                */
+               public String getId() {
+                       return id;
+               }
+
+               /**
+                * Returns the configuration element for this extension.
+                *
+                * @return The configuration element.
+                */
+               public IConfigurationElement getConfigurationElement() {
+                       return element;
+               }
+
+               /**
+                * Returns the extension class instance. The contributing
+                * plug-in will be activated if not yet activated anyway.
+                *
+                * @return The extension class instance or <code>null</code> if the instantiation fails.
+                */
+               public ILauncherDelegate getInstance() {
+                       if (instance == null) instance = newInstance();
+                       return instance;
+               }
+
+               /**
+                * Returns always a new extension class instance which is different
+                * to what {@link #getInstance()} would return.
+                *
+                * @return A new extension class instance or <code>null</code> if the instantiation fails.
+                */
+           public ILauncherDelegate newInstance() {
+                       IConfigurationElement element = getConfigurationElement();
+                       Assert.isNotNull(element);
+
+                       // The "class" to load can be specified either as attribute or as child element
+                       if (element.getAttribute("class") != null || element.getChildren("class").length > 0) { //$NON-NLS-1$ //$NON-NLS-2$
+                               try {
+                                       return (ILauncherDelegate)element.createExecutableExtension("class"); //$NON-NLS-1$
+                               } catch (Exception e) {
+                                       // Possible exceptions: CoreException, ClassCastException.
+                                       Platform.getLog(UIPlugin.getDefault().getBundle()).log(new Status(IStatus.ERROR,
+                                                                       UIPlugin.getUniqueIdentifier(),
+                                                                       NLS.bind(Messages.Extension_error_invalidExtensionPoint, element.getDeclaringExtension().getUniqueIdentifier()), e));
+                               }
+                       }
+                       return null;
+               }
+
+               /* (non-Javadoc)
+                * @see java.lang.Object#equals(java.lang.Object)
+                */
+               @Override
+               public boolean equals(Object obj) {
+                       // Proxies are equal if they have encapsulate an element
+                       // with the same unique id
+                       if (obj instanceof Proxy) {
+                               return getId().equals(((Proxy)obj).getId());
+                       }
+                       return super.equals(obj);
+               }
+
+               /* (non-Javadoc)
+                * @see java.lang.Object#hashCode()
+                */
+               @Override
+               public int hashCode() {
+                       // The hash code of a proxy is the one from the id
+                       return getId().hashCode();
+               }
+       }
+
+       /**
+        * Extension point comparator implementation.
+        * <p>
+        * The comparator assure that extension are read in a predictable order.
+        * <p>
+        * The order of the extensions is defined as following:<br>
+        * <ul><li>Extensions contributed by our own plug-ins (<code>org.eclipse.tm.terminal.*</code>)
+        *         in ascending alphabetic order and</li>
+        *     <li>Extensions contributed by any other plug-in in ascending alphabetic order.</li>
+        *     <li>Extensions contributed by the same plug-in in ascending alphabetic order by the
+        *         extensions unique id</li>
+        */
+       /* default */ static class ExtensionPointComparator implements Comparator<IExtension> {
+               private final static String OWN_PLUGINS_PATTERN = "org.eclipse.tm.terminal."; //$NON-NLS-1$
+
+               /* (non-Javadoc)
+                * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+                */
+               @Override
+           public int compare(IExtension o1, IExtension o2) {
+                       // We ignore any comparisation with null and
+                       if (o1 == null || o2 == null) return 0;
+                       // Check if it is the exact same element
+                       if (o1 == o2) return 0;
+
+                       // The extensions are compared by the unique id of the contributing plug-in first
+                       String contributor1 = o1.getContributor().getName();
+                       String contributor2 = o2.getContributor().getName();
+
+                       // Contributions from our own plug-ins comes before 3rdParty plug-ins
+                       if (contributor1.startsWith(OWN_PLUGINS_PATTERN) && !contributor2.startsWith(OWN_PLUGINS_PATTERN))
+                               return -1;
+                       if (!contributor1.startsWith(OWN_PLUGINS_PATTERN) && contributor2.startsWith(OWN_PLUGINS_PATTERN))
+                               return 1;
+                       if (contributor1.startsWith(OWN_PLUGINS_PATTERN) && contributor2.startsWith(OWN_PLUGINS_PATTERN)) {
+                               int value = contributor1.compareTo(contributor2);
+                               // Within the same plug-in, the extension are sorted by their unique id (if available)
+                               if (value == 0 && o1.getUniqueIdentifier() != null && o2.getUniqueIdentifier() != null)
+                                       return o1.getUniqueIdentifier().compareTo(o2.getUniqueIdentifier());
+                               // Otherwise, just return the comparisation result from the contributors
+                               return value;
+                       }
+
+                       // Contributions from all other plug-ins are sorted alphabetical
+                       int value = contributor1.compareTo(contributor2);
+                       // Within the same plug-in, the extension are sorted by their unique id (if available)
+                       if (value == 0 && o1.getUniqueIdentifier() != null && o2.getUniqueIdentifier() != null)
+                               return o1.getUniqueIdentifier().compareTo(o2.getUniqueIdentifier());
+                       // Otherwise, just return the comparisation result from the contributors
+                       return value;
+               }
+
+       }
+
+       /*
+        * Thread save singleton instance creation.
+        */
+       private static class LazyInstanceHolder {
+               public static LauncherDelegateManager instance = new LauncherDelegateManager();
+       }
+
+       /**
+        * Returns the singleton instance.
+        */
+       public static LauncherDelegateManager getInstance() {
+               return LazyInstanceHolder.instance;
+       }
+
+       /**
+        * Constructor.
+        */
+       LauncherDelegateManager() {
+               super();
+       }
+
+       /**
+        * Returns the list of all contributed terminal launcher delegates.
+        *
+        * @param unique If <code>true</code>, the method returns new instances for each
+        *               contributed terminal launcher delegate.
+        *
+        * @return The list of contributed terminal launcher delegates, or an empty array.
+        */
+       public ILauncherDelegate[] getLauncherDelegates(boolean unique) {
+               List<ILauncherDelegate> contributions = new ArrayList<ILauncherDelegate>();
+               for (Proxy launcherDelegate : getExtensions().values()) {
+                       ILauncherDelegate instance = unique ? launcherDelegate.newInstance() : launcherDelegate.getInstance();
+                       if (instance != null && !contributions.contains(instance)) {
+                               contributions.add(instance);
+                       }
+               }
+
+               return contributions.toArray(new ILauncherDelegate[contributions.size()]);
+       }
+
+       /**
+        * Returns the terminal launcher delegate identified by its unique id. If no terminal
+        * launcher delegate with the specified id is registered, <code>null</code> is returned.
+        *
+        * @param id The unique id of the terminal launcher delegate or <code>null</code>
+        * @param unique If <code>true</code>, the method returns new instances of the terminal launcher delegate contribution.
+        *
+        * @return The terminal launcher delegate instance or <code>null</code>.
+        */
+       public ILauncherDelegate getLauncherDelegate(String id, boolean unique) {
+               ILauncherDelegate contribution = null;
+               Map<String, Proxy> extensions = getExtensions();
+               if (extensions.containsKey(id)) {
+                       Proxy proxy = extensions.get(id);
+                       // Get the extension instance
+                       contribution = unique ? proxy.newInstance() : proxy.getInstance();
+               }
+
+               return contribution;
+       }
+
+       /**
+        * Returns the applicable terminal launcher delegates for the given selection.
+        *
+        * @param selection The selection or <code>null</code>.
+        * @return The list of applicable terminal launcher delegates or an empty array.
+        */
+       @SuppressWarnings("cast")
+       public ILauncherDelegate[] getApplicableLauncherDelegates(ISelection selection) {
+               List<ILauncherDelegate> applicable = new ArrayList<ILauncherDelegate>();
+
+               for (ILauncherDelegate delegate : getLauncherDelegates(false)) {
+                       Expression enablement = delegate.getEnablement();
+
+                       // The launcher delegate is applicable by default if
+                       // no expression is specified.
+                       boolean isApplicable = enablement == null;
+
+                       if (enablement != null) {
+                               if (selection != null) {
+                                       // Set the default variable to selection.
+                                       IEvaluationContext currentState = ((IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class)).getCurrentState();
+                                       EvaluationContext context = new EvaluationContext(currentState, selection);
+                                       // Set the "selection" variable to the selection.
+                                       context.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection);
+                                       // Allow plug-in activation
+                                       context.setAllowPluginActivation(true);
+                                       // Evaluate the expression
+                                       try {
+                                               isApplicable = enablement.evaluate(context).equals(EvaluationResult.TRUE);
+                                       } catch (CoreException e) {
+                                               IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(), e.getLocalizedMessage(), e);
+                                               UIPlugin.getDefault().getLog().log(status);
+                                       }
+                               } else {
+                                       // The enablement is false by definition if
+                                       // there is no selection.
+                                       isApplicable = false;
+                               }
+                       }
+
+                       // Add the page if applicable
+                       if (isApplicable) applicable.add(delegate);
+               }
+
+               return applicable.toArray(new ILauncherDelegate[applicable.size()]);
+       }
+
+       /**
+        * Returns the map of managed extensions. If not loaded before,
+        * this methods trigger the loading of the extensions to the managed
+        * extension point.
+        *
+        * @return The map of extensions.
+        */
+       protected Map<String, Proxy> getExtensions() {
+               // Load and store the extensions thread-safe!
+               synchronized (extensionsMap) {
+                       if (!initialized) { loadExtensions(); initialized = true; }
+               }
+               return extensionsMap;
+       }
+
+       /**
+        * Returns the extension point comparator instance. If not available,
+        * {@link #doCreateExtensionPointComparator()} is called to create a new instance.
+        *
+        * @return The extension point comparator or <code>null</code> if the instance creation fails.
+        */
+       protected final ExtensionPointComparator getExtensionPointComparator() {
+               if (comparator == null) {
+                       comparator = new ExtensionPointComparator();
+               }
+               return comparator;
+       }
+
+       /**
+        * Returns the extensions of the specified extension point sorted.
+        * <p>
+        * For the order of the extensions, see {@link ExtensionPointComparator}.
+        *
+        * @param point The extension point. Must not be <code>null</code>.
+        * @return The extensions in sorted order or an empty array if the extension point has no extensions.
+        */
+       protected IExtension[] getExtensionsSorted(IExtensionPoint point) {
+               Assert.isNotNull(point);
+
+               List<IExtension> extensions = new ArrayList<IExtension>(Arrays.asList(point.getExtensions()));
+               if (extensions.size() > 0) {
+                       Collections.sort(extensions, getExtensionPointComparator());
+               }
+
+               return extensions.toArray(new IExtension[extensions.size()]);
+       }
+
+       /**
+        * Loads the extensions for the managed extension point.
+        */
+       protected void loadExtensions() {
+               // If already initialized, this method will do nothing.
+               if (initialized)  return;
+
+               IExtensionRegistry registry = Platform.getExtensionRegistry();
+               IExtensionPoint point = registry.getExtensionPoint("org.eclipse.tm.terminal.view.ui.launcherDelegates"); //$NON-NLS-1$
+               if (point != null) {
+                       IExtension[] extensions = getExtensionsSorted(point);
+                       for (IExtension extension : extensions) {
+                               IConfigurationElement[] elements = extension.getConfigurationElements();
+                               for (IConfigurationElement element : elements) {
+                                       if ("delegate".equals(element.getName())) { //$NON-NLS-1$
+                                               try {
+                                                       Proxy candidate = new Proxy(element);
+                                                       if (candidate.getId() != null) {
+                                                               // If no extension with this id had been registered before, register now.
+                                                               if (!extensionsMap.containsKey(candidate.getId())) {
+                                                                       extensionsMap.put(candidate.getId(), candidate);
+                                                               }
+                                                               else {
+                                                                       throw new CoreException(new Status(IStatus.ERROR,
+                                                                                       UIPlugin.getUniqueIdentifier(),
+                                                                                       0,
+                                                                                       NLS.bind(Messages.Extension_error_duplicateExtension, candidate.getId(), element.getContributor().getName()),
+                                                                                       null));
+                                                               }
+                                                       } else {
+                                                               throw new CoreException(new Status(IStatus.ERROR,
+                                                                               UIPlugin.getUniqueIdentifier(),
+                                                                               0,
+                                                                               NLS.bind(Messages.Extension_error_missingRequiredAttribute, "id", element.getAttribute("label")), //$NON-NLS-1$ //$NON-NLS-2$
+                                                                               null));
+                                                       }
+                                               } catch (CoreException e) {
+                                                       Platform.getLog(UIPlugin.getDefault().getBundle()).log(new Status(IStatus.ERROR,
+                                                                                       UIPlugin.getUniqueIdentifier(),
+                                                                                       NLS.bind(Messages.Extension_error_invalidExtensionPoint, element.getDeclaringExtension().getUniqueIdentifier()), e));
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/listeners/AbstractWindowListener.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/listeners/AbstractWindowListener.java
new file mode 100644 (file)
index 0000000..04f1047
--- /dev/null
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2013, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.listeners;
+
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IPartService;
+import org.eclipse.ui.IPerspectiveListener;
+import org.eclipse.ui.IWindowListener;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.IWorkbenchWindow;
+
+/**
+ * Abstract window listener implementation.
+ */
+public abstract class AbstractWindowListener implements IWindowListener {
+       // The part listener instance
+       protected final IPartListener2 partListener;
+       // The perspective listener instance
+       protected final IPerspectiveListener perspectiveListener;
+
+       // Flag to remember if the initialization is done or not
+       private boolean initialized = false;
+
+       /**
+     * Constructor
+     */
+    public AbstractWindowListener() {
+       // Create the part listener instance
+       partListener = createPartListener();
+       // Create the perspective listener instance
+       perspectiveListener = createPerspectiveListener();
+    }
+
+    /**
+     * Creates a new part listener instance.
+     * <p>
+     * <b>Note:</b> The default implementation returns <code>null</code>.
+     *
+     * @return The part listener instance or <code>null</code>.
+     */
+    protected IPartListener2 createPartListener() {
+       return null;
+    }
+
+    /**
+     * Creates a new perspective listener instance.
+     * <p>
+     * <b>Note:</b> The default implementation returns <code>null</code>.
+     *
+     * @return The perspective listener instance or <code>null</code>.
+     */
+    protected IPerspectiveListener createPerspectiveListener() {
+       return null;
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IWindowListener#windowActivated(org.eclipse.ui.IWorkbenchWindow)
+        */
+       @Override
+       public void windowActivated(IWorkbenchWindow window) {
+               if (!initialized && window != null) {
+                       windowOpened(window);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IWindowListener#windowDeactivated(org.eclipse.ui.IWorkbenchWindow)
+        */
+       @Override
+       public void windowDeactivated(IWorkbenchWindow window) {
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IWindowListener#windowClosed(org.eclipse.ui.IWorkbenchWindow)
+        */
+       @Override
+       public void windowClosed(IWorkbenchWindow window) {
+               // On close, remove the listeners from the window
+               if (window != null) {
+                       if (window.getPartService() != null && partListener != null) {
+                               window.getPartService().removePartListener(partListener);
+                       }
+
+                       if (perspectiveListener != null) window.removePerspectiveListener(perspectiveListener);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IWindowListener#windowOpened(org.eclipse.ui.IWorkbenchWindow)
+        */
+       @Override
+       public void windowOpened(IWorkbenchWindow window) {
+               if (window != null) {
+                       // On open, register the part listener to the window
+                       if (window.getPartService() != null && partListener != null) {
+                               // Get the part service
+                               IPartService service = window.getPartService();
+                               // Unregister the part listener, just in case
+                               service.removePartListener(partListener);
+                               // Register the part listener
+                               service.addPartListener(partListener);
+                               // Signal the active part to the part listener after registration
+                               IWorkbenchPage page = window.getActivePage();
+                               if (page != null) {
+                                       IWorkbenchPartReference partRef = page.getActivePartReference();
+                                       if (partRef != null) partListener.partActivated(partRef);
+                               }
+                       }
+
+                       // Register the perspective listener
+                       if (perspectiveListener != null) {
+                               window.addPerspectiveListener(perspectiveListener);
+                               // Signal the active perspective to the perspective listener after registration
+                               if (window.getActivePage() != null) {
+                                       perspectiveListener.perspectiveActivated(window.getActivePage(), window.getActivePage().getPerspective());
+                               }
+                       }
+
+                       initialized = true;
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/listeners/WorkbenchPartListener.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/listeners/WorkbenchPartListener.java
new file mode 100644 (file)
index 0000000..c93dc3d
--- /dev/null
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.listeners;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.contexts.IContextActivation;
+import org.eclipse.ui.contexts.IContextService;
+
+/**
+ * The part listener implementation. Takes care of
+ * activation and deactivation of key binding contexts.
+ */
+public class WorkbenchPartListener implements IPartListener2 {
+
+       // The context activations per workbench part reference
+       private final Map<IWorkbenchPartReference, IContextActivation> activations = new HashMap<IWorkbenchPartReference, IContextActivation>();
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IPartListener2#partBroughtToTop(org.eclipse.ui.IWorkbenchPartReference)
+        */
+       @Override
+       public void partBroughtToTop(IWorkbenchPartReference partRef) {
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IPartListener2#partOpened(org.eclipse.ui.IWorkbenchPartReference)
+        */
+       @Override
+       public void partOpened(IWorkbenchPartReference partRef) {
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IPartListener2#partClosed(org.eclipse.ui.IWorkbenchPartReference)
+        */
+       @Override
+       public void partClosed(IWorkbenchPartReference partRef) {
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IPartListener2#partVisible(org.eclipse.ui.IWorkbenchPartReference)
+        */
+       @Override
+       public void partVisible(IWorkbenchPartReference partRef) {
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IPartListener2#partHidden(org.eclipse.ui.IWorkbenchPartReference)
+        */
+       @Override
+       public void partHidden(IWorkbenchPartReference partRef) {
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IPartListener2#partActivated(org.eclipse.ui.IWorkbenchPartReference)
+        */
+       @SuppressWarnings("cast")
+       @Override
+       public void partActivated(IWorkbenchPartReference partRef) {
+               if ("org.eclipse.tm.terminal.view.ui.TerminalsView".equals(partRef.getId())) { //$NON-NLS-1$
+                       IWorkbenchPart part = partRef.getPart(false);
+                       if (part != null && part.getSite() != null) {
+                               IContextService service = (IContextService)part.getSite().getService(IContextService.class);
+                               if (service != null) {
+                                       IContextActivation activation = service.activateContext(partRef.getId());
+                                       if (activation != null) {
+                                               activations.put(partRef, activation);
+                                       } else {
+                                               activations.remove(partRef);
+                                       }
+                               }
+                       }
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IPartListener2#partDeactivated(org.eclipse.ui.IWorkbenchPartReference)
+        */
+       @SuppressWarnings("cast")
+       @Override
+       public void partDeactivated(IWorkbenchPartReference partRef) {
+               if ("org.eclipse.tm.terminal.view.ui.TerminalsView".equals(partRef.getId())) { //$NON-NLS-1$
+                       IWorkbenchPart part = partRef.getPart(false);
+                       if (part != null && part.getSite() != null) {
+                               IContextService service = (IContextService)part.getSite().getService(IContextService.class);
+                               if (service != null) {
+                                       IContextActivation activation = activations.remove(partRef);
+                                       if (activation != null) {
+                                               service.deactivateContext(activation);
+                                       }
+                               }
+                       }
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IPartListener2#partInputChanged(org.eclipse.ui.IWorkbenchPartReference)
+        */
+       @Override
+       public void partInputChanged(IWorkbenchPartReference partRef) {
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/listeners/WorkbenchWindowListener.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/listeners/WorkbenchWindowListener.java
new file mode 100644 (file)
index 0000000..31735ee
--- /dev/null
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.listeners;
+
+import org.eclipse.ui.IPartListener2;
+
+/**
+ * The window listener implementation. Takes care of the
+ * management of the global listeners per workbench window.
+ */
+public class WorkbenchWindowListener extends AbstractWindowListener {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.listeners.AbstractWindowListener#createPartListener()
+        */
+       @Override
+       protected IPartListener2 createPartListener() {
+       return new WorkbenchPartListener();
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/DynamicContributionItems.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/DynamicContributionItems.java
new file mode 100644 (file)
index 0000000..9e96f83
--- /dev/null
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.local.showin;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IExternalExecutablesProperties;
+import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
+import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.CompoundContributionItem;
+import org.eclipse.ui.menus.IWorkbenchContribution;
+import org.eclipse.ui.services.IServiceLocator;
+
+/**
+ * Dynamic "Show In" contribution items implementation.
+ */
+public class DynamicContributionItems extends CompoundContributionItem implements IWorkbenchContribution {
+       // Service locator to located the handler service.
+       protected IServiceLocator serviceLocator;
+       // Reference to the local terminal launcher delegate
+       /* default */ ILauncherDelegate delegate;
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.menus.IWorkbenchContribution#initialize(org.eclipse.ui.services.IServiceLocator)
+        */
+       @Override
+       public void initialize(IServiceLocator serviceLocator) {
+               this.serviceLocator = serviceLocator;
+
+               // Get the local terminal launcher delegate
+               delegate = LauncherDelegateManager.getInstance().getLauncherDelegate("org.eclipse.tm.terminal.connector.local.launcher.local", false); //$NON-NLS-1$
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
+        */
+       @Override
+       protected IContributionItem[] getContributionItems() {
+               List<IContributionItem> items = new ArrayList<IContributionItem>();
+
+               if (delegate != null) {
+                       List<Map<String, String>> l = ExternalExecutablesManager.load();
+                       if (l != null && !l.isEmpty()) {
+                               for (Map<String, String> executableData : l) {
+                                       String name = executableData.get(IExternalExecutablesProperties.PROP_NAME);
+                                       String path = executableData.get(IExternalExecutablesProperties.PROP_PATH);
+                                       String args = executableData.get(IExternalExecutablesProperties.PROP_ARGS);
+                                       String icon = executableData.get(IExternalExecutablesProperties.PROP_ICON);
+
+                                       String strTranslate = executableData.get(IExternalExecutablesProperties.PROP_TRANSLATE);
+                                       boolean translate = strTranslate != null ? Boolean.parseBoolean(strTranslate) : false;
+
+                                       if (name != null && !"".equals(name) && path != null && !"".equals(path)) { //$NON-NLS-1$ //$NON-NLS-2$
+                                               IAction action = createAction(name, path, args, translate);
+
+                                               ImageData id = icon != null ? ExternalExecutablesManager.loadImage(icon) : null;
+                                               if (id != null) {
+                                                       ImageDescriptor desc = ImageDescriptor.createFromImageData(id);
+                                                       if (desc != null) action.setImageDescriptor(desc);
+                                               }
+
+                                               IContributionItem item = new ActionContributionItem(action);
+                                               items.add(item);
+                                       }
+                               }
+                       }
+               }
+
+               return items.toArray(new IContributionItem[items.size()]);
+       }
+
+       /**
+        * Creates the action to execute.
+        *
+        * @param label The label. Must not be <code>null</code>.
+        * @param path The executable path. Must not be <code>null</code>.
+        * @param args The executable arguments or <code>null</code>.
+        * @param translate Translate backslashes.
+        *
+        * @return The action to execute.
+        */
+       protected IAction createAction(final String label, final String path, final String args, final boolean translate) {
+               Assert.isNotNull(label);
+               Assert.isNotNull(path);
+
+               IAction action = new Action(label) {
+                       @Override
+                       public void run() {
+                               Assert.isNotNull(delegate);
+
+                               ISelectionService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
+                               ISelection selection = service != null ? service.getSelection() : null;
+                               if (selection != null && selection.isEmpty()) selection = null;
+
+                               Map<String, Object> properties = new HashMap<String, Object>();
+                               properties.put(ITerminalsConnectorConstants.PROP_DELEGATE_ID, delegate.getId());
+                       if (selection != null) properties.put(ITerminalsConnectorConstants.PROP_SELECTION, selection);
+                       properties.put(ITerminalsConnectorConstants.PROP_PROCESS_PATH, path);
+                       if (args != null) properties.put(ITerminalsConnectorConstants.PROP_PROCESS_ARGS, args);
+                       properties.put(ITerminalsConnectorConstants.PROP_TRANSLATE_BACKSLASHES_ON_PASTE, Boolean.valueOf(translate));
+
+                       delegate.execute(properties, null);
+                       }
+               };
+
+               return action;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/ExternalExecutablesDialog.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/ExternalExecutablesDialog.java
new file mode 100644 (file)
index 0000000..41a629e
--- /dev/null
@@ -0,0 +1,460 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.local.showin;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.tm.terminal.view.ui.help.IContextHelpIds;
+import org.eclipse.tm.terminal.view.ui.interfaces.IExternalExecutablesProperties;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.ui.PlatformUI;
+import org.osgi.framework.Bundle;
+
+/**
+ * External executables dialog implementation.
+ */
+public class ExternalExecutablesDialog extends TrayDialog {
+       private String contextHelpId = null;
+       private final boolean edit;
+
+       private Text name;
+       /* default */ Text path;
+       private Text args;
+       /* default */ Text icon;
+       private Button translate;
+
+       /* default */ String last_filter_path = null;
+       /* default */ String last_filter_icon = null;
+
+       private Map<String, String> executableData;
+
+       /**
+     * Constructor.
+     *
+        * @param shell The parent shell or <code>null</code>.
+     */
+       public ExternalExecutablesDialog(Shell shell, boolean edit) {
+           super(shell);
+           this.edit = edit;
+
+               this.contextHelpId = IContextHelpIds.EXTERNAL_EXECUTABLES_DIALOG;
+               setHelpAvailable(true);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       protected final Control createDialogArea(Composite parent) {
+               if (contextHelpId != null) {
+                       PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, contextHelpId);
+               }
+
+               // Let the super implementation create the dialog area control
+               Control control = super.createDialogArea(parent);
+               // Setup the inner panel as scrollable composite
+               if (control instanceof Composite) {
+                       ScrolledComposite sc = new ScrolledComposite((Composite)control, SWT.V_SCROLL);
+
+                       GridLayout layout = new GridLayout(1, true);
+                       layout.marginHeight = 0; layout.marginWidth = 0;
+                       layout.verticalSpacing = 0; layout.horizontalSpacing = 0;
+
+                       sc.setLayout(layout);
+                       sc.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
+
+                       sc.setExpandHorizontal(true);
+                       sc.setExpandVertical(true);
+
+                       Composite composite = new Composite(sc, SWT.NONE);
+                       composite.setLayout(new GridLayout());
+
+                       // Setup the dialog area content
+                       createDialogAreaContent(composite);
+
+                       sc.setContent(composite);
+                       sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+
+                       // Return the scrolled composite as new dialog area control
+                       control = sc;
+               }
+
+               return control;
+       }
+
+       /**
+        * Creates the dialog area content.
+        *
+        * @param parent The parent composite. Must not be <code>null</code>.
+        */
+    protected void createDialogAreaContent(Composite parent) {
+       Assert.isNotNull(parent);
+
+           setDialogTitle(edit ? Messages.ExternalExecutablesDialog_title_edit : Messages.ExternalExecutablesDialog_title_add);
+
+        Composite panel = new Composite(parent, SWT.NONE);
+        GridLayout layout = new GridLayout(2, false);
+        layout.marginHeight = 0; layout.marginWidth = 0;
+        panel.setLayout(layout);
+        GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, true);
+        layoutData.widthHint = convertWidthInCharsToPixels(50);
+        panel.setLayoutData(layoutData);
+
+        Label label = new Label(panel, SWT.HORIZONTAL);
+        label.setText(Messages.ExternalExecutablesDialog_field_name);
+        layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+        label.setLayoutData(layoutData);
+
+        name = new Text(panel, SWT.HORIZONTAL | SWT.SINGLE | SWT.BORDER);
+        layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+        layoutData.widthHint = convertWidthInCharsToPixels(30);
+        name.setLayoutData(layoutData);
+        name.addModifyListener(new ModifyListener() {
+               @Override
+               public void modifyText(ModifyEvent e) {
+                       validate();
+               }
+        });
+
+        label = new Label(panel, SWT.HORIZONTAL);
+        label.setText(Messages.ExternalExecutablesDialog_field_path);
+        layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+        label.setLayoutData(layoutData);
+
+        Composite panel2 = new Composite(panel, SWT.NONE);
+        layout = new GridLayout(2, false);
+        layout.marginHeight = 0; layout.marginWidth = 0;
+        panel2.setLayout(layout);
+        layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+        panel2.setLayoutData(layoutData);
+
+        path = new Text(panel2, SWT.HORIZONTAL | SWT.SINGLE | SWT.BORDER);
+        layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+        layoutData.widthHint = convertWidthInCharsToPixels(30);
+        path.setLayoutData(layoutData);
+        path.addModifyListener(new ModifyListener() {
+               @Override
+               public void modifyText(ModifyEvent e) {
+                       validate();
+               }
+        });
+
+        Button button = new Button(panel2, SWT.PUSH);
+        button.setText(Messages.ExternalExecutablesDialog_button_browse);
+        layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+        layoutData.widthHint = convertWidthInCharsToPixels(10);
+        button.setLayoutData(layoutData);
+        button.addSelectionListener(new SelectionAdapter() {
+               @Override
+               public void widgetSelected(SelectionEvent e) {
+                       FileDialog dialog = new FileDialog(getShell(), SWT.OPEN);
+
+                       String selectedFile = path.getText();
+                       if (selectedFile != null && selectedFile.trim().length() > 0) {
+                               IPath filePath = new Path(selectedFile);
+                               // If the selected file points to an directory, use the directory as is
+                               IPath filterPath = filePath.toFile().isDirectory() ? filePath : filePath.removeLastSegments(1);
+                               while (filterPath != null && filterPath.segmentCount() > 1 && !filterPath.toFile().exists()) {
+                                       filterPath = filterPath.removeLastSegments(1);
+                               }
+                               String filterFileName = filePath.toFile().isDirectory() || !filePath.toFile().exists() ? null : filePath.lastSegment();
+
+                               if (filterPath != null && !filterPath.isEmpty()) dialog.setFilterPath(filterPath.toString());
+                               if (filterFileName != null) dialog.setFileName(filterFileName);
+                       } else {
+                               String workspace = null;
+                               Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
+                               if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                                       workspace = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString();
+                               }
+
+                               String filterPath = last_filter_path != null ? last_filter_path : workspace;
+                               dialog.setFilterPath(filterPath);
+                       }
+
+                       selectedFile = dialog.open();
+                       if (selectedFile != null) {
+                               last_filter_path = dialog.getFilterPath();
+                               path.setText(selectedFile);
+                       }
+               }
+               });
+
+        label = new Label(panel, SWT.HORIZONTAL);
+        label.setText(Messages.ExternalExecutablesDialog_field_args);
+        layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+        label.setLayoutData(layoutData);
+
+        args = new Text(panel, SWT.HORIZONTAL | SWT.SINGLE | SWT.BORDER);
+        layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+        layoutData.widthHint = convertWidthInCharsToPixels(30);
+        args.setLayoutData(layoutData);
+        args.addModifyListener(new ModifyListener() {
+               @Override
+               public void modifyText(ModifyEvent e) {
+                       validate();
+               }
+        });
+
+        label = new Label(panel, SWT.HORIZONTAL);
+        label.setText(Messages.ExternalExecutablesDialog_field_icon);
+        layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+        label.setLayoutData(layoutData);
+
+        panel2 = new Composite(panel, SWT.NONE);
+        layout = new GridLayout(2, false);
+        layout.marginHeight = 0; layout.marginWidth = 0;
+        panel2.setLayout(layout);
+        layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+        panel2.setLayoutData(layoutData);
+
+        icon = new Text(panel2, SWT.HORIZONTAL | SWT.SINGLE | SWT.BORDER);
+        layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+        layoutData.widthHint = convertWidthInCharsToPixels(30);
+        icon.setLayoutData(layoutData);
+        icon.addModifyListener(new ModifyListener() {
+               @Override
+               public void modifyText(ModifyEvent e) {
+                       validate();
+               }
+        });
+
+        button = new Button(panel2, SWT.PUSH);
+        button.setText(Messages.ExternalExecutablesDialog_button_browse);
+        layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+        layoutData.widthHint = convertWidthInCharsToPixels(10);
+        button.setLayoutData(layoutData);
+        button.addSelectionListener(new SelectionAdapter() {
+               @Override
+               public void widgetSelected(SelectionEvent e) {
+                       FileDialog dialog = new FileDialog(getShell(), SWT.OPEN);
+
+                       String selectedFile = icon.getText();
+                       if (selectedFile != null && selectedFile.trim().length() > 0) {
+                               IPath filePath = new Path(selectedFile);
+                               // If the selected file points to an directory, use the directory as is
+                               IPath filterPath = filePath.toFile().isDirectory() ? filePath : filePath.removeLastSegments(1);
+                               while (filterPath != null && filterPath.segmentCount() > 1 && !filterPath.toFile().exists()) {
+                                       filterPath = filterPath.removeLastSegments(1);
+                               }
+                               String filterFileName = filePath.toFile().isDirectory() || !filePath.toFile().exists() ? null : filePath.lastSegment();
+
+                               if (filterPath != null && !filterPath.isEmpty()) dialog.setFilterPath(filterPath.toString());
+                               if (filterFileName != null) dialog.setFileName(filterFileName);
+                       } else {
+                               String workspace = null;
+                               Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
+                               if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                                       workspace = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString();
+                               }
+
+                               String filterPath = last_filter_icon != null ? last_filter_icon : workspace;
+                               dialog.setFilterPath(filterPath);
+                       }
+
+                       selectedFile = dialog.open();
+                       if (selectedFile != null) {
+                               last_filter_icon = dialog.getFilterPath();
+                               icon.setText(selectedFile);
+                       }
+               }
+               });
+
+        translate = new Button(panel, SWT.CHECK);
+        translate.setText(Messages.ExternalExecutablesDialog_field_translate);
+        layoutData = new GridData(SWT.FILL, SWT.TOP, true, false);
+        layoutData.horizontalSpan = 2;
+        translate.setLayoutData(layoutData);
+        translate.addSelectionListener(new SelectionAdapter() {
+               @Override
+               public void widgetSelected(SelectionEvent e) {
+                       validate();
+               }
+               });
+
+        if (executableData != null) {
+               String value = executableData.get(IExternalExecutablesProperties.PROP_NAME);
+               name.setText(value != null && !"".equals(value.trim()) ? value : ""); //$NON-NLS-1$ //$NON-NLS-2$
+               value = executableData.get(IExternalExecutablesProperties.PROP_PATH);
+               path.setText(value != null && !"".equals(value.trim()) ? value : ""); //$NON-NLS-1$ //$NON-NLS-2$
+               value = executableData.get(IExternalExecutablesProperties.PROP_ARGS);
+               args.setText(value != null && !"".equals(value.trim()) ? value : ""); //$NON-NLS-1$ //$NON-NLS-2$
+               value = executableData.get(IExternalExecutablesProperties.PROP_ICON);
+               icon.setText(value != null && !"".equals(value.trim()) ? value : ""); //$NON-NLS-1$ //$NON-NLS-2$
+               value = executableData.get(IExternalExecutablesProperties.PROP_TRANSLATE);
+               translate.setSelection(value != null ? Boolean.parseBoolean(value) : false);
+        }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.TrayDialog#createButtonBar(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       protected Control createButtonBar(Composite parent) {
+           Control control = super.createButtonBar(parent);
+           validate();
+           return control;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.Dialog#createButton(org.eclipse.swt.widgets.Composite, int, java.lang.String, boolean)
+        */
+       @Override
+       protected Button createButton(Composite parent, int id, String label, boolean defaultButton) {
+               if (IDialogConstants.OK_ID == id && !edit) {
+                       label = Messages.ExternalExecutablesDialog_button_add;
+               }
+           return super.createButton(parent, id, label, defaultButton);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+        */
+       @Override
+       protected void okPressed() {
+               if (name != null && path != null) {
+                       // Extract the executable properties
+                       if (executableData == null) executableData = new HashMap<String, String>();
+
+                       String value = name.getText();
+                       if (value != null && !"".equals(value.trim())) { //$NON-NLS-1$
+                               executableData.put(IExternalExecutablesProperties.PROP_NAME, value);
+                       } else {
+                               executableData.remove(IExternalExecutablesProperties.PROP_NAME);
+                       }
+
+                       value = path.getText();
+                       if (value != null && !"".equals(value.trim())) { //$NON-NLS-1$
+                               executableData.put(IExternalExecutablesProperties.PROP_PATH, value);
+                       } else {
+                               executableData.remove(IExternalExecutablesProperties.PROP_PATH);
+                       }
+
+                       value = args.getText();
+                       if (value != null && !"".equals(value.trim())) { //$NON-NLS-1$
+                               executableData.put(IExternalExecutablesProperties.PROP_ARGS, value);
+                       } else {
+                               executableData.remove(IExternalExecutablesProperties.PROP_ARGS);
+                       }
+
+                       value = icon.getText();
+                       if (value != null && !"".equals(value.trim())) { //$NON-NLS-1$
+                               executableData.put(IExternalExecutablesProperties.PROP_ICON, value);
+                       } else {
+                               executableData.remove(IExternalExecutablesProperties.PROP_ICON);
+                       }
+
+                       if (translate.getSelection()) {
+                               executableData.put(IExternalExecutablesProperties.PROP_TRANSLATE, Boolean.TRUE.toString());
+                       } else {
+                               executableData.remove(IExternalExecutablesProperties.PROP_TRANSLATE);
+                       }
+               } else {
+                       executableData = null;
+               }
+           super.okPressed();
+       }
+
+       @Override
+       protected void cancelPressed() {
+               // If the user pressed cancel, the dialog needs to return null
+               executableData = null;
+           super.cancelPressed();
+       }
+
+       /**
+        * Returns the executable properties the user entered.
+        *
+        * @return The executable properties or <code>null</code>.
+        */
+       public Map<String, String> getExecutableData() {
+               return executableData;
+       }
+
+       /**
+        * Set or reset the executable properties. This method has effect
+        * only if called before opening the dialog.
+        *
+        * @param data The executable properties or <code>null</code>.
+        */
+       public void setExecutableData(Map<String, String> data) {
+               if (data == null) {
+                       executableData = null;
+               } else {
+                       executableData = new HashMap<String, String>(data);
+               }
+       }
+
+       /**
+        * Validate the dialog.
+        */
+       public void validate() {
+               boolean valid = true;
+
+               if (name != null && !name.isDisposed()) {
+                       valid = !"".equals(name.getText()); //$NON-NLS-1$
+               }
+
+               if (path != null && !path.isDisposed()) {
+                       String value = path.getText();
+                       if (!"".equals(value)) { //$NON-NLS-1$
+                               File f = new File(value);
+                               valid |= f.isAbsolute() && f.canRead();
+                       } else {
+                               valid = false;
+                       }
+               }
+
+               if (icon != null && !icon.isDisposed()) {
+                       String value = icon.getText();
+                       if (!"".equals(value)) { //$NON-NLS-1$
+                               File f = new File(value);
+                               valid |= f.isAbsolute() && f.canRead();
+                       }
+               }
+
+               Button okButton = getButton(IDialogConstants.OK_ID);
+               if (okButton != null) okButton.setEnabled(valid);
+       }
+
+       /**
+        * Sets the title for this dialog.
+        *
+        * @param title The title.
+        */
+       public void setDialogTitle(String title) {
+               if (getShell() != null && !getShell().isDisposed()) {
+                       getShell().setText(title);
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/ExternalExecutablesManager.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/local/showin/ExternalExecutablesManager.java
new file mode 100644 (file)
index 0000000..b8debd3
--- /dev/null
@@ -0,0 +1,294 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.local.showin;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.ImageLoader;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.IExternalExecutablesProperties;
+import org.eclipse.tm.terminal.view.ui.internal.ExternalExecutablesState;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.services.ISourceProviderService;
+
+/**
+ * External executables manager implementation.
+ */
+public class ExternalExecutablesManager {
+       // Flag to indicate if we have searched for git bash already
+       private static boolean gitBashSearchDone = false;
+
+       /**
+        * Loads the list of all saved external executables.
+        *
+        * @return The list of all saved external executables or <code>null</code>.
+        */
+       public static List<Map<String, String>> load() {
+               List<Map<String, String>> l = new ArrayList<Map<String, String>>();
+
+               IPath stateLocation = UIPlugin.getDefault().getStateLocation();
+               if (stateLocation != null) {
+                       File f = stateLocation.append(".executables/data.properties").toFile(); //$NON-NLS-1$
+                       if (f.canRead()) {
+                               FileReader r = null;
+
+                               try {
+                                       Properties data = new Properties();
+                                       r= new FileReader(f);
+                                       data.load(r);
+
+                                       Map<Integer, Map<String, String>> c = new HashMap<Integer, Map<String, String>>();
+                                       for (String name : data.stringPropertyNames()) {
+                                               if (name == null || name.indexOf('.') == -1) continue;
+                                               int ix = name.indexOf('.');
+                                               String n = name.substring(0, ix);
+                                               String k = (ix + 1) < name.length() ? name.substring(ix + 1) : null;
+                                               if (n == null || k == null) continue;
+
+                                               Integer i = null;
+                                               try { i = Integer.decode(n); } catch (NumberFormatException e) { /* ignored on purpose */ }
+                                               if (i == null) continue;
+
+                                               Map<String, String> m = c.get(i);
+                                               if (m == null) {
+                                                       m = new HashMap<String, String>();
+                                                       c.put(i, m);
+                                               }
+                                               Assert.isNotNull(m);
+
+                                               m.put(k, data.getProperty(name));
+                                       }
+
+                                       List<Integer> k = new ArrayList<Integer>(c.keySet());
+                                       Collections.sort(k);
+                                       for (Integer i : k) {
+                                               Map<String, String> m = c.get(i);
+                                               if (m != null && !m.isEmpty()) l.add(m);
+                                       }
+                               } catch (Exception e) {
+                                       if (Platform.inDebugMode()) {
+                                               e.printStackTrace();
+                                       }
+                               } finally {
+                                       if (r != null) try { r.close(); } catch (IOException e) { /* ignored on purpose */ }
+                               }
+                       }
+               }
+
+               // Lookup git bash (Windows Hosts only)
+               if (!gitBashSearchDone && Platform.OS_WIN32.equals(Platform.getOS())) {
+                       // Check the existing entries first
+                       // Find a entry labeled "Git Bash"
+                       Map<String, String> m = null;
+                       for (Map<String, String> candidate : l) {
+                               String name = candidate.get(IExternalExecutablesProperties.PROP_NAME);
+                               if ("Git Bash".equals(name)) { //$NON-NLS-1$
+                                       m = candidate;
+                                       break;
+                               }
+                       }
+
+                       // If not found in the existing entries, check the path
+                       if (m == null) {
+                               String gitPath = null;
+                               String iconPath = null;
+
+                               String path = System.getenv("PATH"); //$NON-NLS-1$
+                               if (path != null) {
+                                       StringTokenizer tokenizer = new StringTokenizer(path, ";"); //$NON-NLS-1$
+                                       while (tokenizer.hasMoreTokens()) {
+                                               String token = tokenizer.nextToken();
+                                               File f = new File(token, "git.exe"); //$NON-NLS-1$
+                                               if (f.canRead()) {
+                                                       File f2 = new File(f.getParentFile().getParentFile(), "bin/sh.exe"); //$NON-NLS-1$
+                                                       if (f2.canExecute()) {
+                                                               gitPath = f2.getAbsolutePath();
+                                                       }
+
+                                                       iconPath = getGitIconPath(f.getParentFile().getParentFile());
+
+                                                       break;
+                                               }
+                                       }
+                               }
+
+                               // if it is not found in the PATH, check the default install locations
+                               if (gitPath == null) {
+                                       File f = new File("C:/Program Files (x86)/Git/bin/sh.exe"); //$NON-NLS-1$
+                                       if (!f.exists()) {
+                                               f = new File("C:/Program Files/Git/bin/sh.exe"); //$NON-NLS-1$
+                                       }
+
+                                       if (f.exists() && f.canExecute()) {
+                                               gitPath = f.getAbsolutePath();
+                                               iconPath = getGitIconPath(f.getParentFile().getParentFile());
+                                       }
+                               }
+
+                               if (gitPath != null) {
+                                       m = new HashMap<String, String>();
+                                       m.put(IExternalExecutablesProperties.PROP_NAME, "Git Bash"); //$NON-NLS-1$
+                                       m.put(IExternalExecutablesProperties.PROP_PATH, gitPath);
+                                       m.put(IExternalExecutablesProperties.PROP_ARGS, "--login -i"); //$NON-NLS-1$
+                                       if (iconPath != null) m.put(IExternalExecutablesProperties.PROP_ICON, iconPath);
+                                       m.put(IExternalExecutablesProperties.PROP_TRANSLATE, Boolean.TRUE.toString());
+
+                                       l.add(m);
+                                       save(l);
+                               }
+                       }
+
+                       // Do not search again for git bash while the session is running
+                       gitBashSearchDone = true;
+               }
+
+               return l;
+       }
+
+       private static String getGitIconPath(File parent) {
+               File f = new File(parent, "etc/git.ico"); //$NON-NLS-1$
+               if (f.canRead()) {
+                       return f.getAbsolutePath();
+               }
+
+               // check for icon in newer versions of Git for Windows 32 bit
+               f = new File(parent, "mingw32/share/git/git-for-windows.ico"); //$NON-NLS-1$
+               if (f.canRead()) {
+                       return f.getAbsolutePath();
+               }
+
+               // check for icon in newer versions of Git for Windows 64 bit
+               f = new File(parent, "mingw64/share/git/git-for-windows.ico"); //$NON-NLS-1$
+               if (f.canRead()) {
+                       return f.getAbsolutePath();
+               }
+
+               return null;
+       }
+
+       /**
+        * Saves the list of external executables.
+        *
+        * @param l The list of external executables or <code>null</code>.
+        */
+       @SuppressWarnings("cast")
+    public static void save(List<Map<String, String>> l) {
+               ISourceProviderService sourceProviderService = (ISourceProviderService) PlatformUI.getWorkbench().getService(ISourceProviderService.class);
+               ExternalExecutablesState stateService = (ExternalExecutablesState) sourceProviderService.getSourceProvider(ExternalExecutablesState.CONFIGURED_STATE);
+
+               IPath stateLocation = UIPlugin.getDefault().getStateLocation();
+               if (stateLocation != null) {
+                       File f = stateLocation.append(".executables/data.properties").toFile(); //$NON-NLS-1$
+                       if (f.isFile() && (l == null || l.isEmpty())) {
+                               @SuppressWarnings("unused")
+                boolean s = f.delete();
+
+                               if (stateService != null) stateService.disable();
+                       } else {
+                               FileWriter w = null;
+
+                               try {
+                                       Properties data = new Properties();
+                                       for (int i = 0; i < l.size(); i++) {
+                                               Map<String, String> m = l.get(i);
+                                               for (Entry<String, String> e : m.entrySet()) {
+                                                       String key = Integer.toString(i) + "." + e.getKey(); //$NON-NLS-1$
+                                                       data.setProperty(key, e.getValue());
+                                               }
+                                       }
+
+                                       if (!f.exists()) {
+                                               @SuppressWarnings("unused")
+                                               boolean s = f.getParentFile().mkdirs();
+                                               s = f.createNewFile();
+                                       }
+                                       w = new FileWriter(f);
+                                       data.store(w, null);
+
+                                       if (stateService != null) stateService.enable();
+                               } catch (Exception e) {
+                                       if (Platform.inDebugMode()) {
+                                               e.printStackTrace();
+                                       }
+                               } finally {
+                                       if (w != null) {
+                                               try {
+                                                       w.flush();
+                                                       w.close();
+                                               } catch (IOException e) {
+                                                       /* ignored on purpose */
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Loads the image data suitable for showing an icon in a menu
+        * (16 x 16, 8bit depth) from the given file.
+        *
+        * @param path The image file path. Must not be <code>null</code>.
+        * @return The image data or <code>null</code>.
+        */
+       public static ImageData loadImage(String path) {
+               Assert.isNotNull(path);
+
+               ImageData id = null;
+               ImageData biggest = null;
+
+               ImageLoader loader = new ImageLoader();
+               ImageData[] data = loader.load(path);
+
+               if (data != null) {
+                       for (ImageData d : data) {
+                               if (d.height == 16 && d.width == 16) {
+                                       if (id == null || id.height != 16 && id.width != 16) {
+                                               id = d;
+                                       } else if (d.depth < id.depth && d.depth >= 8){
+                                               id = d;
+                                       }
+                               } else {
+                                       if (id == null) {
+                                               id = d;
+                                               biggest = d;
+                                       } else if (id.height != 16 && d.height < id.height && id.width != 16 && d.width < id.width) {
+                                               id = d;
+                                       } else if (biggest == null || d.height > biggest.height && d.width > biggest.width) {
+                                               biggest = d;
+                                       }
+                               }
+                       }
+               }
+
+               // if the icon is still to big -> downscale the biggest
+               if (id != null && id.height > 16 && id.width > 16) {
+                       id = biggest.scaledTo(16, 16);
+               }
+
+               return id;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/manager/ConsoleManager.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/manager/ConsoleManager.java
new file mode 100644 (file)
index 0000000..bc277ef
--- /dev/null
@@ -0,0 +1,646 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.manager;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.IPreferenceKeys;
+import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
+import org.eclipse.tm.terminal.view.ui.interfaces.IUIConstants;
+import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
+import org.eclipse.tm.terminal.view.ui.view.TerminalsView;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IPartService;
+import org.eclipse.ui.IPerspectiveDescriptor;
+import org.eclipse.ui.IPerspectiveListener;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PerspectiveAdapter;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Terminal console manager.
+ */
+public class ConsoleManager {
+
+       // Constant to indicate any secondary id is acceptable
+       private final static String ANY_SECONDARY_ID = new String("*"); //$NON-NLS-1$
+
+       // Reference to the perspective listener instance
+       private final IPerspectiveListener perspectiveListener;
+
+       // Internal perspective listener implementation
+       static class ConsoleManagerPerspectiveListener extends PerspectiveAdapter {
+               private final List<IViewReference> references = new ArrayList<IViewReference>();
+
+               /* (non-Javadoc)
+                * @see org.eclipse.ui.PerspectiveAdapter#perspectiveActivated(org.eclipse.ui.IWorkbenchPage, org.eclipse.ui.IPerspectiveDescriptor)
+                */
+               @Override
+               public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {
+                       // If the old references list is empty, just return
+                       if (references.isEmpty()) return;
+                       // Create a copy of the old view references list
+                       List<IViewReference> oldReferences = new ArrayList<IViewReference>(references);
+
+                       // Get the current list of view references
+                       List<IViewReference> references = new ArrayList<IViewReference>(Arrays.asList(page.getViewReferences()));
+                       for (IViewReference reference : oldReferences) {
+                               if (references.contains(reference)) continue;
+                               // Previous visible terminals console view reference, make visible again
+                               try {
+                                       page.showView(reference.getId(), reference.getSecondaryId(), IWorkbenchPage.VIEW_VISIBLE);
+                               } catch (PartInitException e) { /* Failure on part instantiation is ignored */ }
+                       }
+
+               }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.ui.PerspectiveAdapter#perspectivePreDeactivate(org.eclipse.ui.IWorkbenchPage, org.eclipse.ui.IPerspectiveDescriptor)
+                */
+               @Override
+               public void perspectivePreDeactivate(IWorkbenchPage page, IPerspectiveDescriptor perspective) {
+                       references.clear();
+                       for (IViewReference reference : page.getViewReferences()) {
+                               IViewPart part = reference.getView(false);
+                               if (part instanceof TerminalsView && !references.contains(reference)) {
+                                       references.add(reference);
+                               }
+                       }
+               }
+       }
+
+       // Reference to the part listener instance
+       private final IPartListener2 partListener;
+
+       // The ids of the last activated terminals view
+       /* default */ String lastActiveViewId = null;
+       /* default */ String lastActiveSecondaryViewId = null;
+
+       // Internal part listener implementation
+       class ConsoleManagerPartListener implements IPartListener2 {
+
+               @Override
+        public void partActivated(IWorkbenchPartReference partRef) {
+                       IWorkbenchPart part = partRef.getPart(false);
+                       if (part instanceof ITerminalsView) {
+                               lastActiveViewId = ((ITerminalsView)part).getViewSite().getId();
+                               lastActiveSecondaryViewId = ((ITerminalsView)part).getViewSite().getSecondaryId();
+                               //System.out.println("Terminals view activated: id = " + lastActiveViewId + ", secondary id = " + lastActiveSecondaryViewId); //$NON-NLS-1$ //$NON-NLS-2$
+                       }
+        }
+
+               @Override
+        public void partBroughtToTop(IWorkbenchPartReference partRef) {
+        }
+
+               @Override
+        public void partClosed(IWorkbenchPartReference partRef) {
+        }
+
+               @Override
+        public void partDeactivated(IWorkbenchPartReference partRef) {
+        }
+
+               @Override
+        public void partOpened(IWorkbenchPartReference partRef) {
+        }
+
+               @Override
+        public void partHidden(IWorkbenchPartReference partRef) {
+        }
+
+               @Override
+        public void partVisible(IWorkbenchPartReference partRef) {
+        }
+
+               @Override
+        public void partInputChanged(IWorkbenchPartReference partRef) {
+        }
+       }
+
+       /*
+        * Thread save singleton instance creation.
+        */
+       private static class LazyInstanceHolder {
+               public static ConsoleManager fInstance = new ConsoleManager();
+       }
+
+       /**
+        * Returns the singleton instance for the console manager.
+        */
+       public static ConsoleManager getInstance() {
+               return LazyInstanceHolder.fInstance;
+       }
+
+       /**
+        * Constructor.
+        */
+       ConsoleManager() {
+               super();
+
+               perspectiveListener = new ConsoleManagerPerspectiveListener();
+               partListener = new ConsoleManagerPartListener();
+
+               if (PlatformUI.isWorkbenchRunning() && PlatformUI.getWorkbench() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null) {
+                       PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPerspectiveListener(perspectiveListener);
+
+                       IPartService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService();
+                       service.addPartListener(partListener);
+               }
+       }
+
+       /**
+        * Returns the active workbench window page if the workbench is still running.
+        *
+        * @return The active workbench window page or <code>null</code>
+        */
+       private final IWorkbenchPage getActiveWorkbenchPage() {
+               // To lookup the console view, the workbench must be still running
+               if (PlatformUI.isWorkbenchRunning() && PlatformUI.getWorkbench() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null) {
+                       return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+               }
+               return null;
+       }
+
+       /**
+        * Returns the console view if available within the active workbench window page.
+        * <p>
+        * <b>Note:</b> The method must be called within the UI thread.
+        *
+        * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
+        * @param secondaryId The terminals console view secondary id or <code>null</code>.
+        *
+        * @return The console view instance if available or <code>null</code> otherwise.
+        */
+       public ITerminalsView findConsoleView(String id, String secondaryId) {
+               Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
+
+               ITerminalsView view = null;
+
+               // Get the active workbench page
+               IWorkbenchPage page = getActiveWorkbenchPage();
+               if (page != null) {
+                       // Look for the view
+                       IViewPart part = getTerminalsViewWithSecondaryId(id != null ? id : IUIConstants.ID, secondaryId, true);
+                       // Check the interface
+                       if (part instanceof ITerminalsView) {
+                               view = (ITerminalsView)part;
+                       }
+               }
+
+               return view;
+       }
+
+       /**
+        * Search and return a terminal view with a specific secondary id
+        *
+        * @param id The terminals console view id. Must not be <code>null</code>.
+        * @param secondaryId The terminals console view secondary id or <code>null</code>.
+        * @param restore <code>True</code> if to try to restore the view, <code>false</code> otherwise.
+        *
+        * @return The terminals console view instance or <code>null</code> if not found.
+        */
+       private IViewPart getTerminalsViewWithSecondaryId(String id, String secondaryId, boolean restore) {
+               Assert.isNotNull(id);
+
+               IWorkbenchPage page = getActiveWorkbenchPage();
+
+               IViewReference[] refs = page.getViewReferences();
+               for (int i = 0; i < refs.length; i++) {
+                       IViewReference ref = refs[i];
+                       if (ref.getId().equals(id)) {
+                               if (ANY_SECONDARY_ID.equals(secondaryId)
+                                                               || secondaryId == null && ref.getSecondaryId() == null
+                                                               || secondaryId != null && secondaryId.equals(ref.getSecondaryId())) {
+                                       return ref.getView(restore);
+                               }
+                       }
+               }
+               return null;
+       }
+
+       /**
+        * Search and return the active terminals view.
+        *
+        * @param id The terminals console view id. Must not be <code>null</code>.
+        * @param secondaryId The terminals console view secondary id or <code>null</code>.
+        * @return The terminals console view instance or <code>null</code> if not found.
+        */
+       private IViewPart getActiveTerminalsView(String id, String secondaryId) {
+               Assert.isNotNull(id);
+
+               IViewPart part = null;
+
+               if (id.equals(lastActiveViewId)) {
+                       if (secondaryId == null || ANY_SECONDARY_ID.equals(secondaryId) || secondaryId.equals(lastActiveSecondaryViewId)) {
+                               part = getTerminalsViewWithSecondaryId(lastActiveViewId, lastActiveSecondaryViewId, false);
+                       }
+               }
+
+               if (part == null) {
+                       part = getTerminalsViewWithSecondaryId(id, secondaryId, true);
+                       if (part != null) {
+                               lastActiveViewId = part.getViewSite().getId();
+                               lastActiveSecondaryViewId = part.getViewSite().getSecondaryId();
+                       }
+               }
+
+               return part;
+       }
+
+       /**
+        * Return a new secondary id to use, based on the number of open terminal views.
+        *
+        * @param id The terminals console view id. Must not be <code>null</code>.
+        * @return The next secondary id, or <code>null</code> if it is the first one
+        * @since 4.1
+        */
+       public String getNextTerminalSecondaryId(String id) {
+               Assert.isNotNull(id);
+
+               IWorkbenchPage page = getActiveWorkbenchPage();
+               Map<String, IViewReference> terminalViews = new HashMap<String, IViewReference>();
+
+               int maxNumber = 0;
+               IViewReference[] refs = page.getViewReferences();
+               for (int i = 0; i < refs.length; i++) {
+                       IViewReference ref = refs[i];
+                       if (ref.getId().equals(id)) {
+                               if (ref.getSecondaryId() != null) {
+                                       terminalViews.put(ref.getSecondaryId(), ref);
+                                       int scondaryIdInt = Integer.parseInt(ref.getSecondaryId());
+                                       if (scondaryIdInt > maxNumber) {
+                                               maxNumber = scondaryIdInt;
+                                       }
+                               }
+                               else {
+                                       // add the one with secondaryId == null with 0 by default
+                                       terminalViews.put(Integer.toString(0), ref);
+                               }
+                       }
+               }
+               if (terminalViews.size() == 0) {
+                       return null;
+               }
+
+               int i = 0;
+               for (; i < maxNumber; i++) {
+                       String secondaryIdStr = Integer.toString(i);
+                       if (!terminalViews.keySet().contains(secondaryIdStr)) {
+                               // found a free slot
+                               if (i == 0)
+                                       return null;
+                               return Integer.toString(i);
+                       }
+               }
+               // add a new one
+               return Integer.toString(i + 1);
+       }
+
+       /**
+        * Show the terminals console view specified by the given id.
+        * <p>
+        * <b>Note:</b> The method must be called within the UI thread.
+        *
+        * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
+        */
+       public IViewPart showConsoleView(String id, String secondaryId) {
+               Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
+
+               // Get the active workbench page
+               IWorkbenchPage page = getActiveWorkbenchPage();
+               if (page != null) {
+                       try {
+                               // show the view
+                               IViewPart part = getActiveTerminalsView(id != null ? id : IUIConstants.ID, secondaryId);
+                               if (part == null) part = page.showView(id != null ? id : IUIConstants.ID, secondaryId, IWorkbenchPage.VIEW_ACTIVATE);
+                               // and force the view to the foreground
+                               page.bringToTop(part);
+                               return part;
+                       }
+                       catch (PartInitException e) {
+                               IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(), e.getLocalizedMessage(), e);
+                               UIPlugin.getDefault().getLog().log(status);
+                       }
+               }
+               return null;
+       }
+
+       /**
+        * Bring the terminals console view, specified by the given id, to the top of the view stack.
+        *
+        * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
+        * @param secondaryId The terminals console view secondary id or <code>null</code>.
+        * @param activate If <code>true</code> activate the console view.
+        */
+       private IViewPart bringToTop(String id, String secondaryId, boolean activate) {
+               // Get the active workbench page
+               IWorkbenchPage page = getActiveWorkbenchPage();
+               if (page != null) {
+                       // get (last) active terminal view
+                       IViewPart activePart = getActiveTerminalsView(id != null ? id : IUIConstants.ID, secondaryId);
+                       if (activePart == null) {
+                               // Create a new one
+                               IViewPart newPart = showConsoleView(id != null ? id : IUIConstants.ID, getSecondaryId(secondaryId, id));
+                               return newPart;
+                       }
+
+                       if (activate) page.activate(activePart);
+                       else page.bringToTop(activePart);
+
+                       return activePart;
+               }
+               return null;
+       }
+
+       /**
+        * Return the secondary id to use.
+        * @param secondaryId
+        * @param id
+        * @return the secondaryId argument is not null, or *, otherwise use the auto generated secondary id.
+        */
+       private String getSecondaryId(String secondaryId, String id){
+               if(secondaryId==null || ANY_SECONDARY_ID.equals(secondaryId)){
+                       return getNextTerminalSecondaryId(id != null ? id : IUIConstants.ID);
+               }
+
+               return secondaryId;
+       }
+
+       /**
+        * Opens the console with the given title and connector.
+        * <p>
+        * <b>Note:</b> The method must be called within the UI thread.
+        *
+        * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
+        * @param title The console title. Must not be <code>null</code>.
+        * @param encoding The terminal encoding or <code>null</code>.
+        * @param connector The terminal connector. Must not be <code>null</code>.
+        * @param data The custom terminal data node or <code>null</code>.
+        * @param flags The flags controlling how the console is opened or <code>null</code> to use defaults.
+        */
+       public CTabItem openConsole(String id, String title, String encoding, ITerminalConnector connector, Object data, Map<String, Boolean> flags) {
+               return openConsole(id, ANY_SECONDARY_ID, title, encoding, connector, data, flags);
+       }
+
+       /**
+        * Opens the console with the given title and connector.
+        * <p>
+        * <b>Note:</b> The method must be called within the UI thread.
+        *
+        * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
+        * @param secondaryId The terminals console view secondary id or <code>null</code>.
+        * @param title The console title. Must not be <code>null</code>.
+        * @param encoding The terminal encoding or <code>null</code>.
+        * @param connector The terminal connector. Must not be <code>null</code>.
+        * @param data The custom terminal data node or <code>null</code>.
+        * @param flags The flags controlling how the console is opened or <code>null</code> to use defaults.
+        */
+       @SuppressWarnings("cast")
+       public CTabItem openConsole(String id, String secondaryId, String title, String encoding, ITerminalConnector connector, Object data, Map<String, Boolean> flags) {
+               Assert.isNotNull(title);
+               Assert.isNotNull(connector);
+               Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
+
+               // Get the flags handled by the openConsole method itself
+               boolean activate = flags != null && flags.containsKey("activate") ? flags.get("activate").booleanValue() : false; //$NON-NLS-1$ //$NON-NLS-2$
+               boolean forceNew = flags != null && flags.containsKey(ITerminalsConnectorConstants.PROP_FORCE_NEW) ? flags.get(ITerminalsConnectorConstants.PROP_FORCE_NEW).booleanValue() : false;
+
+               // Make the consoles view visible
+               IViewPart part = bringToTop(id, secondaryId, activate);
+               if (!(part instanceof ITerminalsView)) return null;
+               // Cast to the correct type
+               ITerminalsView view = (ITerminalsView)part;
+
+               // Get the tab folder manager associated with the view
+               TabFolderManager manager = (TabFolderManager) view.getAdapter(TabFolderManager.class);
+               if (manager == null) return null;
+
+               // Lookup an existing console first
+               String secId = ((IViewSite)part.getSite()).getSecondaryId();
+               CTabItem item = findConsole(id, secId, title, connector, data);
+
+               // Switch to the tab folder page _before_ calling TabFolderManager#createItem(...).
+               // The createItem(...) method invokes the corresponding connect and this may take
+               // a while if connecting to a remote host. To allow a "Connecting..." decoration,
+               // the tab folder page needs to be visible.
+               view.switchToTabFolderControl();
+
+               // If no existing console exist or forced -> Create the tab item
+               if (item == null || forceNew) {
+                       // If configured, check all existing tab items if they are associated
+                       // with terminated consoles
+                       if (UIPlugin.getScopedPreferences().getBoolean(IPreferenceKeys.PREF_REMOVE_TERMINATED_TERMINALS)) {
+                               // Remote all terminated tab items. This will invoke the
+                               // tab's dispose listener.
+                               manager.removeTerminatedItems();
+                               // Switch back to the tab folder control as removeTerminatedItems()
+                               // may have triggered the switch to the empty space control.
+                               view.switchToTabFolderControl();
+                       }
+
+                       // Create a new tab item
+                       item = manager.createTabItem(title, encoding, connector, data, flags);
+               }
+               // If still null, something went wrong
+               if (item == null) return null;
+
+               // Make the item the active console
+               manager.bringToTop(item);
+
+               // Make sure the terminals view has the focus after opening a new terminal
+               view.setFocus();
+
+               // Return the tab item of the opened console
+               return item;
+       }
+
+       /**
+        * Lookup a console with the given title and the given terminal connector.
+        * <p>
+        * <b>Note:</b> The method must be called within the UI thread.
+        * <b>Note:</b> The method will handle unified console titles itself.
+        *
+        * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
+        * @param secondaryId The terminals console view secondary id or <code>null</code>.
+        * @param title The console title. Must not be <code>null</code>.
+        * @param connector The terminal connector. Must not be <code>null</code>.
+        * @param data The custom terminal data node or <code>null</code>.
+        *
+        * @return The corresponding console tab item or <code>null</code>.
+        */
+       @SuppressWarnings("cast")
+       public CTabItem findConsole(String id, String secondaryId, String title, ITerminalConnector connector, Object data) {
+               Assert.isNotNull(title);
+               Assert.isNotNull(connector);
+               Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
+
+               // Get the console view
+               ITerminalsView view = findConsoleView(id, secondaryId);
+               if (view == null) return null;
+
+               // Get the tab folder manager associated with the view
+               TabFolderManager manager = (TabFolderManager) view.getAdapter(TabFolderManager.class);
+               if (manager == null) return null;
+
+               return manager.findTabItem(title, connector, data);
+       }
+
+       /**
+        * Lookup a console which is assigned with the given terminal control.
+        * <p>
+        * <b>Note:</b> The method must be called within the UI thread.
+        *
+        * @param control The terminal control. Must not be <code>null</code>.
+        * @return The corresponding console tab item or <code>null</code>.
+        */
+       @SuppressWarnings("cast")
+       public CTabItem findConsole(ITerminalControl control) {
+               Assert.isNotNull(control);
+
+               CTabItem item = null;
+
+               IWorkbenchPage page = getActiveWorkbenchPage();
+               if (page != null) {
+                       IViewReference[] refs = page.getViewReferences();
+                       for (int i = 0; i < refs.length; i++) {
+                               IViewReference ref = refs[i];
+                               IViewPart part = ref != null ? ref.getView(false) : null;
+                               if (part instanceof ITerminalsView) {
+                                       CTabFolder tabFolder = (CTabFolder) part.getAdapter(CTabFolder.class);
+                                       if (tabFolder == null) continue;
+                                       CTabItem[] candidates = tabFolder.getItems();
+                                       for (CTabItem candidate : candidates) {
+                                               Object data = candidate.getData();
+                                               if (data instanceof ITerminalControl && control.equals(data)) {
+                                                       item = candidate;
+                                                       break;
+                                               }
+                                       }
+                               }
+                               if (item != null) break;
+                       }
+               }
+
+               return item;
+       }
+
+       /**
+        * Search all console views for the one that contains a specific connector.
+        * <p>
+        * <b>Note:</b> The method will handle unified console titles itself.
+        *
+        * @param id The terminals console view id or <code>null</code> to show the default terminals console view.
+        * @param title The console title. Must not be <code>null</code>.
+        * @param connector The terminal connector. Must not be <code>null</code>.
+        * @param data The custom terminal data node or <code>null</code>.
+        *
+        * @return The corresponding console tab item or <code>null</code>.
+        */
+       @SuppressWarnings("cast")
+       private CTabItem findConsoleForTerminalConnector(String id, String title, ITerminalConnector connector, Object data) {
+               Assert.isNotNull(title);
+               Assert.isNotNull(connector);
+
+               IWorkbenchPage page = getActiveWorkbenchPage();
+               if (page != null) {
+                       IViewReference[] refs = page.getViewReferences();
+                       for (int i = 0; i < refs.length; i++) {
+                               IViewReference ref = refs[i];
+                               if (ref.getId().equals(id)) {
+                                       IViewPart part = ref.getView(true);
+                                       if (part instanceof ITerminalsView) {
+                                               // Get the tab folder manager associated with the view
+                                               TabFolderManager manager = (TabFolderManager) part.getAdapter(TabFolderManager.class);
+                                               if (manager == null) {
+                                                       continue;
+                                               }
+                                               CTabItem item = manager.findTabItem(title, connector, data);
+                                               if (item != null) {
+                                                       return item;
+                                               }
+                                       }
+                               }
+                       }
+               }
+               return null;
+       }
+
+       /**
+        * Close the console with the given title and the given terminal connector.
+        * <p>
+        * <b>Note:</b> The method must be called within the UI thread.
+        * <b>Note:</b> The method will handle unified console titles itself.
+        *
+        * @param title The console title. Must not be <code>null</code>.
+        * @param connector The terminal connector. Must not be <code>null</code>.
+        * @param data The custom terminal data node or <code>null</code>.
+        */
+       public void closeConsole(String id, String title, ITerminalConnector connector, Object data) {
+               Assert.isNotNull(title);
+               Assert.isNotNull(connector);
+               Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
+
+               // Lookup the console with this connector
+               CTabItem console = findConsoleForTerminalConnector(id, title, connector, data);
+               // If found, dispose the console
+               if (console != null) {
+                       console.dispose();
+               }
+       }
+
+       /**
+        * Terminate (disconnect) the console with the given title and the given terminal connector.
+        * <p>
+        * <b>Note:</b> The method must be called within the UI thread.
+        * <b>Note:</b> The method will handle unified console titles itself.
+        *
+        * @param title The console title. Must not be <code>null</code>.
+        * @param connector The terminal connector. Must not be <code>null</code>.
+        * @param data The custom terminal data node or <code>null</code>.
+        */
+       public void terminateConsole(String id, String title, ITerminalConnector connector, Object data) {
+               Assert.isNotNull(title);
+               Assert.isNotNull(connector);
+               Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
+
+               // Lookup the console
+               CTabItem console = findConsoleForTerminalConnector(id, title, connector, data);
+               // If found, disconnect the console
+               if (console != null && !console.isDisposed()) {
+                       ITerminalViewControl terminal = (ITerminalViewControl)console.getData();
+                       if (terminal != null && !terminal.isDisposed()) {
+                               terminal.disconnectTerminal();
+                       }
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.java
new file mode 100644 (file)
index 0000000..f7d4953
--- /dev/null
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
+ * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.nls;
+
+import java.lang.reflect.Field;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Terminal plug-in externalized strings management.
+ */
+public class Messages extends NLS {
+
+       // The plug-in resource bundle name
+       private static final String BUNDLE_NAME = "org.eclipse.tm.terminal.view.ui.nls.Messages"; //$NON-NLS-1$
+
+       /**
+        * Static constructor.
+        */
+       static {
+               // Load message values from bundle file
+               NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+       }
+
+       /**
+        * Returns the corresponding string for the given externalized strings
+        * key or <code>null</code> if the key does not exist.
+        *
+        * @param key The externalized strings key or <code>null</code>.
+        * @return The corresponding string or <code>null</code>.
+        */
+       public static String getString(String key) {
+               if (key != null) {
+                       try {
+                               Field field = Messages.class.getDeclaredField(key);
+                               return (String)field.get(null);
+                       } catch (Exception e) { /* ignored on purpose */ }
+               }
+
+               return null;
+       }
+
+       // **** Declare externalized string id's down here *****
+
+       public static String Extension_error_missingRequiredAttribute;
+       public static String Extension_error_duplicateExtension;
+       public static String Extension_error_invalidExtensionPoint;
+
+       public static String AbstractTriggerCommandHandler_error_executionFailed;
+
+       public static String AbstractAction_error_commandExecutionFailed;
+
+       public static String AbstractConfigurationPanel_delete;
+       public static String AbstractConfigurationPanel_deleteButtonTooltip;
+       public static String AbstractConfigurationPanel_hosts;
+       public static String AbstractConfigurationPanel_encoding;
+       public static String AbstractConfigurationPanel_encoding_custom;
+       public static String AbstractConfigurationPanel_encoding_custom_title;
+       public static String AbstractConfigurationPanel_encoding_custom_message;
+       public static String AbstractConfigurationPanel_encoding_custom_error;
+
+       public static String TabTerminalListener_consoleClosed;
+       public static String TabTerminalListener_consoleConnecting;
+
+       public static String NewTerminalViewAction_menu;
+       public static String NewTerminalViewAction_tooltip;
+
+       public static String ToggleCommandFieldAction_menu;
+       public static String ToggleCommandFieldAction_toolTip;
+
+       public static String SelectEncodingAction_menu;
+       public static String SelectEncodingAction_tooltip;
+
+       public static String ProcessSettingsPage_dialogTitle;
+       public static String ProcessSettingsPage_processImagePathSelectorControl_label;
+       public static String ProcessSettingsPage_processImagePathSelectorControl_button;
+       public static String ProcessSettingsPage_processArgumentsControl_label;
+       public static String ProcessSettingsPage_processWorkingDirControl_label;
+       public static String ProcessSettingsPage_localEchoSelectorControl_label;
+
+       public static String OutputStreamMonitor_error_readingFromStream;
+
+       public static String InputStreamMonitor_error_writingToStream;
+
+       public static String TerminalService_error_cannotCreateConnector;
+       public static String TerminalService_defaultTitle;
+
+       public static String LaunchTerminalSettingsDialog_title;
+       public static String LaunchTerminalSettingsDialog_combo_label;
+       public static String LaunchTerminalSettingsDialog_group_label;
+
+    public static String TabScrollLockAction_text;
+    public static String TabScrollLockAction_tooltip;
+
+    public static String LaunchTerminalSettingsDialog_error_title;
+       public static String LaunchTerminalSettingsDialog_error_invalidSettings;
+       public static String LaunchTerminalSettingsDialog_error_unknownReason;
+
+       public static String EncodingSelectionDialog_title;
+
+       public static String TabFolderManager_encoding;
+       public static String TabFolderManager_state_connected;
+       public static String TabFolderManager_state_connecting;
+       public static String TabFolderManager_state_closed;
+
+       public static String NoteCompositeHelper_note_label;
+
+       // showin messages
+
+       public static String ProcessConnector_error_creatingProcess;
+
+       public static String PreferencePage_label;
+       public static String PreferencePage_executables_label;
+       public static String PreferencePage_executables_column_name_label;
+       public static String PreferencePage_executables_column_path_label;
+       public static String PreferencePage_executables_button_add_label;
+       public static String PreferencePage_executables_button_edit_label;
+       public static String PreferencePage_executables_button_remove_label;
+       public static String PreferencePage_workingDir_label;
+       public static String PreferencePage_workingDir_userhome_label;
+       public static String PreferencePage_workingDir_eclipsehome_label;
+       public static String PreferencePage_workingDir_eclipsews_label;
+       public static String PreferencePage_workingDir_button_browse;
+       public static String PreferencePage_workingDir_note_label;
+       public static String PreferencePage_workingDir_note_text;
+       public static String PreferencePage_workingDir_button_variables;
+       public static String PreferencePage_workingDir_invalid;
+       public static String PreferencePage_command_label;
+       public static String PreferencePage_command_button_browse;
+       public static String PreferencePage_command_invalid;
+       public static String PreferencePage_command_note_label;
+       public static String PreferencePage_command_note_text;
+       public static String PreferencePage_command_arguments_label;
+
+       public static String ExternalExecutablesDialog_title_add;
+       public static String ExternalExecutablesDialog_title_edit;
+       public static String ExternalExecutablesDialog_button_add;
+       public static String ExternalExecutablesDialog_button_browse;
+       public static String ExternalExecutablesDialog_field_path;
+       public static String ExternalExecutablesDialog_field_name;
+       public static String ExternalExecutablesDialog_field_args;
+       public static String ExternalExecutablesDialog_field_icon;
+       public static String ExternalExecutablesDialog_field_translate;
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.properties b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/nls/Messages.properties
new file mode 100644 (file)
index 0000000..0af5fc1
--- /dev/null
@@ -0,0 +1,113 @@
+###############################################################################
+# Copyright (c) 2012, 2016 Wind River Systems, Inc. and others. All rights reserved.
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License v1.0 which accompanies this distribution, and is
+# available at http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Wind River Systems - initial API and implementation
+###############################################################################
+
+Extension_error_missingRequiredAttribute=Required attribute "{0}" missing for extension "{1}"!
+Extension_error_duplicateExtension=Duplicate extension with id ''{0}''. Ignoring duplicated contribution from contributor ''{1}''!
+Extension_error_invalidExtensionPoint=Failed to instantiate the executable extension from extension point ''{0}''.
+
+AbstractTriggerCommandHandler_error_executionFailed=Failed to execute command {0}.
+
+AbstractAction_error_commandExecutionFailed="Failed to execute command (id = {0}). Possibly caused by: {1}
+
+AbstractConfigurationPanel_delete=Delete
+AbstractConfigurationPanel_deleteButtonTooltip=Delete terminal settings for host
+AbstractConfigurationPanel_hosts=Hosts:
+AbstractConfigurationPanel_encoding=Encoding:
+AbstractConfigurationPanel_encoding_custom=Other...
+AbstractConfigurationPanel_encoding_custom_title=Other...
+AbstractConfigurationPanel_encoding_custom_message=Please enter the name of the encoding to use for the terminal.
+AbstractConfigurationPanel_encoding_custom_error=Unsupported encoding. Please enter the name of a supported encoding.
+
+TabTerminalListener_consoleClosed=<{1}> {0}
+TabTerminalListener_consoleConnecting={0} : {1}...
+
+NewTerminalViewAction_menu=New Terminal View
+NewTerminalViewAction_tooltip=Open a new Terminal View
+
+ToggleCommandFieldAction_menu=Toggle Command Input Field
+ToggleCommandFieldAction_toolTip=Toggle Command Input Field
+
+SelectEncodingAction_menu=Switch Encoding...
+SelectEncodingAction_tooltip=Switch the Encoding of the active Terminal
+
+ProcessSettingsPage_dialogTitle=Select Process Image
+ProcessSettingsPage_processImagePathSelectorControl_label=Image Path:
+ProcessSettingsPage_processImagePathSelectorControl_button=Browse
+ProcessSettingsPage_processArgumentsControl_label=Arguments:
+ProcessSettingsPage_processWorkingDirControl_label=Working Dir:
+ProcessSettingsPage_localEchoSelectorControl_label=Local Echo
+
+OutputStreamMonitor_error_readingFromStream=Exception when reading from stream. Possibly caused by: {0}
+
+InputStreamMonitor_error_writingToStream=Exception when writing to stream. Possibly caused by: {0}
+
+TerminalService_error_cannotCreateConnector=Cannot create a valid terminal connector instance from the provided terminal properties.
+TerminalService_defaultTitle=Console
+
+LaunchTerminalSettingsDialog_title=Launch Terminal
+LaunchTerminalSettingsDialog_combo_label=Choose terminal:
+LaunchTerminalSettingsDialog_group_label=Settings
+
+TabScrollLockAction_text=Scroll &Lock
+TabScrollLockAction_tooltip=Scroll Lock
+
+LaunchTerminalSettingsDialog_error_title=Terminal Settings
+LaunchTerminalSettingsDialog_error_invalidSettings=The specified settings are invalid\n\n\
+{0}\n\n\
+Please review and specify valid settings. Or cancel the settings dialog to abort.
+LaunchTerminalSettingsDialog_error_unknownReason=Cannot determine specifically which setting is invalid.
+
+EncodingSelectionDialog_title=Encoding
+
+TabFolderManager_encoding=Encoding: {0}
+TabFolderManager_state_connected=Connected
+TabFolderManager_state_connecting=Connecting
+TabFolderManager_state_closed=Closed
+
+NoteCompositeHelper_note_label=Note:
+
+# ----- showin
+
+ProcessConnector_error_creatingProcess=Exception when creating process. Possibly caused by: {0}
+
+ExternalExecutablesDialog_title_add=Add External Executable
+ExternalExecutablesDialog_title_edit=Edit External Executable
+ExternalExecutablesDialog_button_add=Add
+ExternalExecutablesDialog_button_browse=Browse...
+ExternalExecutablesDialog_field_path=Path:
+ExternalExecutablesDialog_field_name=Name:
+ExternalExecutablesDialog_field_args=Arguments:
+ExternalExecutablesDialog_field_icon=Icon:
+ExternalExecutablesDialog_field_translate=Translate Backslashes on Paste
+
+# -----  Preference Pages  -----
+
+PreferencePage_label=Local Terminal Settings:
+PreferencePage_executables_label="Show In ..." Custom Entries
+PreferencePage_executables_column_name_label=Name
+PreferencePage_executables_column_path_label=Path
+PreferencePage_executables_button_add_label=Add...
+PreferencePage_executables_button_edit_label=Edit...
+PreferencePage_executables_button_remove_label=Remove
+PreferencePage_workingDir_label=Initial Working Directory
+PreferencePage_workingDir_userhome_label=User home
+PreferencePage_workingDir_eclipsehome_label=Eclipse home
+PreferencePage_workingDir_eclipsews_label=Eclipse workspace
+PreferencePage_workingDir_button_browse=&Browse...
+PreferencePage_workingDir_note_label=Note:
+PreferencePage_workingDir_note_text=The chosen initial working directory might be overwritten by the current selection of the active view.
+PreferencePage_workingDir_button_variables=&Variables...
+PreferencePage_workingDir_invalid=Selected initial working directory is not a directory or is not readable.
+PreferencePage_command_label=Shell Command 
+PreferencePage_command_button_browse=&Browse...
+PreferencePage_command_invalid=Selected shell command is not a file or is not readable or executable.
+PreferencePage_command_note_label=Note:
+PreferencePage_command_note_text=Leave the shell command empty to fallback to the SHELL environment variable or if not set, to /bin/sh.
+PreferencePage_command_arguments_label=Arguments: 
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/panels/AbstractConfigurationPanel.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/panels/AbstractConfigurationPanel.java
new file mode 100644 (file)
index 0000000..da3cd49
--- /dev/null
@@ -0,0 +1,202 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.panels;
+
+import java.util.Map;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+
+/**
+ * Abstract terminal launcher configuration panel implementation.
+ */
+public abstract class AbstractConfigurationPanel implements IConfigurationPanel {
+       private final IConfigurationPanelContainer container;
+
+       private Composite topControl = null;
+
+       // The selection
+       private ISelection selection;
+
+       private String message = null;
+       private int messageType = IMessageProvider.NONE;
+
+       private boolean enabled = true;
+
+       /**
+        * Constructor.
+        *
+        * @param container The configuration panel container or <code>null</code>.
+        */
+       public AbstractConfigurationPanel(IConfigurationPanelContainer container) {
+               super();
+               this.container = container;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#getContainer()
+        */
+       @Override
+       public IConfigurationPanelContainer getContainer() {
+           return container;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.IMessageProvider#getMessage()
+        */
+       @Override
+       public final String getMessage() {
+               return message;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.IMessageProvider#getMessageType()
+        */
+       @Override
+       public final int getMessageType() {
+               return messageType;
+       }
+
+       /**
+        * Set the message and the message type to display.
+        *
+        * @param message The message or <code>null</code>.
+        * @param messageType The message type or <code>IMessageProvider.NONE</code>.
+        */
+       protected final void setMessage(String message, int messageType) {
+               this.message = message;
+               this.messageType = messageType;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#dispose()
+        */
+       @Override
+       public void dispose() {
+       }
+
+       /**
+        * Sets the top control.
+        *
+        * @param topControl The top control or <code>null</code>.
+        */
+       protected void setControl(Composite topControl) {
+               this.topControl = topControl;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#getControl()
+        */
+       @Override
+       public Composite getControl() {
+               return topControl;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setSelection(org.eclipse.jface.viewers.ISelection)
+        */
+       @Override
+       public void setSelection(ISelection selection) {
+               this.selection = selection;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#getSelection()
+        */
+       @Override
+       public ISelection getSelection() {
+               return selection;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
+        */
+       @Override
+       public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) {
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
+        */
+       @Override
+       public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
+       }
+
+       /**
+        * Returns the correctly prefixed dialog settings slot id. In case the given id
+        * suffix is <code>null</code> or empty, <code>id</code> is returned as is.
+        *
+        * @param settingsSlotId The dialog settings slot id to prefix.
+        * @param prefix The prefix.
+        * @return The correctly prefixed dialog settings slot id.
+        */
+       public final String prefixDialogSettingsSlotId(String settingsSlotId, String prefix) {
+               if (settingsSlotId != null && prefix != null && prefix.trim().length() > 0) {
+                       settingsSlotId = prefix + "." + settingsSlotId; //$NON-NLS-1$
+               }
+               return settingsSlotId;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setEnabled(boolean)
+        */
+       @Override
+       public void setEnabled(boolean enabled) {
+               this.enabled = enabled;
+       }
+
+       /**
+     * @return Returns the enabled state.
+     */
+    public boolean isEnabled() {
+           return enabled;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#isValid()
+     */
+       @Override
+       public boolean isValid() {
+               setMessage(null, NONE);
+               return true;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#activate()
+        */
+       @Override
+       public void activate() {
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#extractData(java.util.Map)
+        */
+    @Override
+    public void extractData(Map<String, Object> data) {
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#setupData(java.util.Map)
+     */
+    @Override
+    public void setupData(Map<String, Object> data) {
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel#updateData(java.util.Map)
+     */
+    @Override
+    public void updateData(Map<String, Object> data) {
+    }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/panels/AbstractExtendedConfigurationPanel.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/panels/AbstractExtendedConfigurationPanel.java
new file mode 100644 (file)
index 0000000..54b84aa
--- /dev/null
@@ -0,0 +1,634 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.panels;
+
+import java.nio.charset.Charset;
+import java.nio.charset.IllegalCharsetNameException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.tm.terminal.view.core.TerminalContextPropertiesProviderFactory;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalContextPropertiesProvider;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.IContextPropertiesConstants;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.WorkbenchEncoding;
+import org.osgi.framework.Bundle;
+
+/**
+ * Abstract terminal configuration panel implementation.
+ */
+public abstract class AbstractExtendedConfigurationPanel extends AbstractConfigurationPanel {
+       private static final String LAST_HOST_TAG = "lastHost";//$NON-NLS-1$
+       private static final String HOSTS_TAG = "hosts";//$NON-NLS-1$
+       private static final String ENCODINGS_TAG = "encodings"; //$NON-NLS-1$
+
+       // The sub-controls
+       /* default */ Combo hostCombo;
+       private Button deleteHostButton;
+       /* default */ Combo encodingCombo;
+
+       // The last selected encoding
+       /* default */ String lastSelectedEncoding;
+       // The last entered custom encodings
+       /* default */ final List<String> encodingHistory = new ArrayList<String>();
+
+       // A map containing the settings per host
+       protected final Map<String, Map<String, String>> hostSettingsMap = new HashMap<String, Map<String, String>>();
+
+       /**
+        * Constructor.
+        *
+        * @param container The configuration panel container or <code>null</code>.
+        */
+       public AbstractExtendedConfigurationPanel(IConfigurationPanelContainer container) {
+               super(container);
+       }
+
+       /**
+        * Returns the host name or IP from the current selection.
+        *
+        * @return The host name or IP, or <code>null</code>.
+        */
+       public String getSelectionHost() {
+               ISelection selection = getSelection();
+               if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+                       Object element = ((IStructuredSelection) selection).getFirstElement();
+                       ITerminalContextPropertiesProvider provider = TerminalContextPropertiesProviderFactory.getProvider(element);
+                       if (provider != null) {
+                               Map<String, String> props = provider.getTargetAddress(element);
+                               if (props != null && props.containsKey(IContextPropertiesConstants.PROP_ADDRESS)) {
+                                       return props.get(IContextPropertiesConstants.PROP_ADDRESS);
+                               }
+                       }
+               }
+
+               return null;
+       }
+
+       /**
+        * Returns the default encoding based on the current selection.
+        *
+        * @return The default encoding or <code>null</code>.
+        */
+       public String getSelectionEncoding() {
+               ISelection selection = getSelection();
+               if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+                       Object element = ((IStructuredSelection) selection).getFirstElement();
+                       ITerminalContextPropertiesProvider provider = TerminalContextPropertiesProviderFactory.getProvider(element);
+                       if (provider != null) {
+                               Object encoding = provider.getProperty(element, IContextPropertiesConstants.PROP_DEFAULT_ENCODING);
+                               if (encoding instanceof String) return ((String) encoding).trim();
+                       }
+               }
+
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
+        */
+       @Override
+       public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) {
+               Assert.isNotNull(settings);
+
+               String[] hosts = settings.getArray(HOSTS_TAG);
+               if (hosts != null) {
+                       for (int i = 0; i < hosts.length; i++) {
+                               String hostEntry = hosts[i];
+                               String[] hostString = hostEntry.split("\\|");//$NON-NLS-1$
+                               String hostName = hostString[0];
+                               if (hostString.length == 2) {
+                                       HashMap<String, String> attr = deSerialize(hostString[1]);
+                                       hostSettingsMap.put(hostName, attr);
+                               }
+                               else {
+                                       hostSettingsMap.put(hostName, new HashMap<String, String>());
+                               }
+                       }
+               }
+
+               if (!isWithoutSelection()) {
+                       String host = getSelectionHost();
+                       if (host != null) {
+                               fillSettingsForHost(host);
+                       }
+               }
+               else {
+                       if (hostCombo != null) {
+                               fillHostCombo();
+                               String lastHost = settings.get(LAST_HOST_TAG);
+                               if (lastHost != null) {
+                                       int index = hostCombo.indexOf(lastHost);
+                                       if (index != -1) {
+                                               hostCombo.select(index);
+                                       }
+                                       else {
+                                               hostCombo.select(0);
+                                       }
+                               }
+                               else {
+                                       hostCombo.select(0);
+                               }
+                               fillSettingsForHost(hostCombo.getText());
+                       }
+               }
+
+               encodingHistory.clear();
+               String[] encodings = settings.getArray(ENCODINGS_TAG);
+               if (encodings != null && encodings.length > 0) {
+                       encodingHistory.addAll(Arrays.asList(encodings));
+                       for (String encoding : encodingHistory) {
+                               encodingCombo.add(encoding, encodingCombo.getItemCount() - 1);
+                       }
+               }
+       }
+
+       /**
+        * Restore the encodings widget values.
+        *
+        * @param settings The dialog settings. Must not be <code>null</code>.
+        * @param idPrefix The prefix or <code>null</code>.
+        */
+       protected void doRestoreEncodingsWidgetValues(IDialogSettings settings, String idPrefix) {
+               Assert.isNotNull(settings);
+
+               String encoding = settings.get(prefixDialogSettingsSlotId(ITerminalsConnectorConstants.PROP_ENCODING, idPrefix));
+               if (encoding != null && encoding.trim().length() > 0) {
+                       setEncoding(encoding);
+               }
+       }
+
+       /**
+        * Decode the host settings from the given string.
+        *
+        * @param hostString The encoded host settings. Must not be <code>null</code>.
+        * @return The decoded host settings.
+        */
+       private HashMap<String, String> deSerialize(String hostString) {
+               Assert.isNotNull(hostString);
+               HashMap<String, String> attr = new HashMap<String, String>();
+
+               if (hostString.length() != 0) {
+                       String[] hostAttrs = hostString.split("\\:");//$NON-NLS-1$
+                       for (int j = 0; j < hostAttrs.length-1; j = j + 2) {
+                               String key = hostAttrs[j];
+                               String value = hostAttrs[j + 1];
+                               attr.put(key, value);
+                       }
+               }
+               return attr;
+       }
+
+       /**
+        * Encode the host settings to a string.
+        *
+        * @param hostEntry The host settings. Must not be <code>null</code>.
+        * @param hostString The host string to encode to. Must not be <code>null</code>.
+        */
+       private void serialize(Map<String, String> hostEntry, StringBuilder hostString) {
+               Assert.isNotNull(hostEntry);
+               Assert.isNotNull(hostString);
+
+               if (hostEntry.keySet().size() != 0) {
+                       Iterator<Entry<String, String>> nextHostAttr = hostEntry.entrySet().iterator();
+                       while (nextHostAttr.hasNext()) {
+                               Entry<String, String> entry = nextHostAttr.next();
+                               String attrKey = entry.getKey();
+                               String attrValue = entry.getValue();
+                               hostString.append(attrKey + ":" + attrValue + ":");//$NON-NLS-1$ //$NON-NLS-2$
+                       }
+                       hostString.deleteCharAt(hostString.length() - 1);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.panels.AbstractConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String)
+        */
+       @Override
+       public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) {
+               Iterator<String> nextHost = hostSettingsMap.keySet().iterator();
+               String[] hosts = new String[hostSettingsMap.keySet().size()];
+               int i = 0;
+               while (nextHost.hasNext()) {
+                       StringBuilder hostString = new StringBuilder();
+                       String host = nextHost.next();
+                       hostString.append(host + "|");//$NON-NLS-1$
+                       Map<String, String> hostEntry = hostSettingsMap.get(host);
+                       serialize(hostEntry, hostString);
+                       hosts[i] = hostString.toString();
+                       i = i + 1;
+               }
+               settings.put(HOSTS_TAG, hosts);
+               if (isWithoutSelection()) {
+                       if (hostCombo != null) {
+                               String host = getHostFromSettings();
+                               if (host != null) settings.put(LAST_HOST_TAG, host);
+                       }
+               }
+
+               if (!encodingHistory.isEmpty()) {
+                       settings.put(ENCODINGS_TAG, encodingHistory.toArray(new String[encodingHistory.size()]));
+               }
+       }
+
+       /**
+        * Save the encodings widget values.
+        *
+        * @param settings The dialog settings. Must not be <code>null</code>.
+        * @param idPrefix The prefix or <code>null</code>.
+        */
+       protected void doSaveEncodingsWidgetValues(IDialogSettings settings, String idPrefix) {
+               Assert.isNotNull(settings);
+
+               String encoding = getEncoding();
+               if (encoding != null) {
+                       settings.put(prefixDialogSettingsSlotId(ITerminalsConnectorConstants.PROP_ENCODING, idPrefix), encoding);
+               }
+       }
+
+       protected abstract void saveSettingsForHost(boolean add);
+
+       protected abstract void fillSettingsForHost(String host);
+
+       protected abstract String getHostFromSettings();
+
+       protected void removeSecurePassword(String host) {
+               // noop by default
+       }
+
+       /**
+        * Returns the selected host from the hosts combo widget.
+        *
+        * @return The selected host or <code>null</code>.
+        */
+       protected final String getHostFromCombo() {
+               return hostCombo != null && !hostCombo.isDisposed() ? hostCombo.getText() : null;
+       }
+
+       protected void removeSettingsForHost(String host) {
+               if (hostSettingsMap.containsKey(host)) {
+                       hostSettingsMap.remove(host);
+               }
+       }
+
+       /**
+        * Returns the list of host names of the persisted hosts.
+        *
+        * @return The list of host names.
+        */
+       private List<String> getHostList() {
+               List<String> hostList = new ArrayList<String>();
+               hostList.addAll(hostSettingsMap.keySet());
+               return hostList;
+       }
+
+       /**
+        * Fill the host combo with the stored per host setting names.
+        */
+       protected void fillHostCombo() {
+               if (hostCombo != null) {
+                       hostCombo.removeAll();
+                       List<String> hostList = getHostList();
+                       Collections.sort(hostList);
+                       Iterator<String> nextHost = hostList.iterator();
+                       while (nextHost.hasNext()) {
+                               String host = nextHost.next();
+                               hostCombo.add(host);
+                       }
+                       if (hostList.size() <= 1) {
+                               hostCombo.setEnabled(false);
+                       }
+                       else {
+                               hostCombo.setEnabled(true);
+
+                       }
+                       if (deleteHostButton != null) {
+                               if (hostList.size() == 0) {
+                                       deleteHostButton.setEnabled(false);
+                               }
+                               else {
+                                       deleteHostButton.setEnabled(true);
+                               }
+                       }
+               }
+       }
+
+       public boolean isWithoutSelection() {
+               ISelection selection = getSelection();
+               if (selection == null) {
+                       return true;
+               }
+               if (selection instanceof IStructuredSelection && selection.isEmpty()) {
+                       return true;
+               }
+               return false;
+       }
+
+       public boolean isWithHostList() {
+               return true;
+       }
+
+       /**
+        * Create the host selection combo.
+        *
+        * @param parent The parent composite. Must not be <code>null</code>.
+        * @param separator If <code>true</code>, a separator will be added after the controls.
+        */
+       protected void createHostsUI(Composite parent, boolean separator) {
+               Assert.isNotNull(parent);
+
+               if (isWithoutSelection() && isWithHostList()) {
+                       Composite comboComposite = new Composite(parent, SWT.NONE);
+                       GridLayout layout = new GridLayout(3, false);
+                       layout.marginHeight = 0;
+                       layout.marginWidth = 0;
+                       comboComposite.setLayout(layout);
+                       comboComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+                       Label label = new Label(comboComposite, SWT.HORIZONTAL);
+                       label.setText(Messages.AbstractConfigurationPanel_hosts);
+
+                       hostCombo = new Combo(comboComposite, SWT.READ_ONLY);
+                       hostCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+                       hostCombo.addSelectionListener(new SelectionListener() {
+
+                               @Override
+                               public void widgetSelected(SelectionEvent e) {
+                                       String host = hostCombo.getText();
+                                       fillSettingsForHost(host);
+                               }
+
+                               @Override
+                               public void widgetDefaultSelected(SelectionEvent e) {
+                                       widgetSelected(e);
+                               }
+                       });
+
+                       deleteHostButton = new Button(comboComposite, SWT.NONE);
+                       // deleteHostButton.setText(Messages.AbstractConfigurationPanel_delete);
+
+                       ISharedImages workbenchImages = UIPlugin.getDefault().getWorkbench().getSharedImages();
+                       deleteHostButton.setImage(workbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE).createImage());
+
+                       deleteHostButton.setToolTipText(Messages.AbstractConfigurationPanel_deleteButtonTooltip);
+                       deleteHostButton.addSelectionListener(new SelectionListener() {
+
+                               @Override
+                               public void widgetSelected(SelectionEvent e) {
+                                       String host = getHostFromCombo();
+                                       if (host != null && host.length() != 0) {
+                                               removeSettingsForHost(host);
+                                               removeSecurePassword(host);
+                                               fillHostCombo();
+                                               hostCombo.select(0);
+                                               host = getHostFromCombo();
+                                               if (host != null && host.length() != 0) {
+                                                       fillSettingsForHost(host);
+                                               }
+                                       }
+                               }
+
+                               @Override
+                               public void widgetDefaultSelected(SelectionEvent e) {
+                                       widgetSelected(e);
+                               }
+                       });
+
+                       if (separator) {
+                               Label sep = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
+                               sep.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+                       }
+               }
+       }
+
+       /**
+        * Create the encoding selection combo.
+        *
+        * @param parent The parent composite. Must not be <code>null</code>.
+        * @param separator If <code>true</code>, a separator will be added before the controls.
+        */
+       protected void createEncodingUI(final Composite parent, boolean separator) {
+               Assert.isNotNull(parent);
+
+               if (separator) {
+                       Label sep = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
+                       sep.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+               }
+
+               Composite panel = new Composite(parent, SWT.NONE);
+               GridLayout layout = new GridLayout(2, false);
+               layout.marginHeight = 0; layout.marginWidth = 0;
+               panel.setLayout(layout);
+               panel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+               Label label = new Label(panel, SWT.HORIZONTAL);
+               label.setText(Messages.AbstractConfigurationPanel_encoding);
+
+               encodingCombo = new Combo(panel, SWT.READ_ONLY);
+               encodingCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+               encodingCombo.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               if (Messages.AbstractConfigurationPanel_encoding_custom.equals(encodingCombo.getText())) {
+                                       InputDialog dialog = new InputDialog(parent.getShell(),
+                                                                                                                Messages.AbstractConfigurationPanel_encoding_custom_title,
+                                                                                                                Messages.AbstractConfigurationPanel_encoding_custom_message,
+                                                                                                                null,
+                                                                                                                new IInputValidator() {
+                                                                                                                       @Override
+                                                                                                                       public String isValid(String newText) {
+                                                                                                                               boolean valid = false;
+                                                                                                                               try {
+                                                                                                                                       if (newText != null && !"".equals(newText)) { //$NON-NLS-1$
+                                                                                                                                               valid = Charset.isSupported(newText);
+                                                                                                                                       }
+                                                                                                                               } catch (IllegalCharsetNameException e) { /* ignored on purpose */ }
+
+                                                                                                                               if (!valid) {
+                                                                                                                                       return newText != null && !"".equals(newText) ? Messages.AbstractConfigurationPanel_encoding_custom_error : ""; //$NON-NLS-1$ //$NON-NLS-2$
+                                                                                                                               }
+                                                                                                                               return null;
+                                                                                                                       }
+                                                                                                               });
+                                       if (dialog.open() == Window.OK) {
+                                               String encoding = dialog.getValue();
+                                               encodingCombo.add(encoding, encodingCombo.getItemCount() - 1);
+                                               encodingCombo.select(encodingCombo.indexOf(encoding));
+                                               lastSelectedEncoding = encodingCombo.getText();
+
+                                               // Remember the last 5 custom encodings entered
+                                               if (!encodingHistory.contains(encoding)) {
+                                                       if (encodingHistory.size() == 5) encodingHistory.remove(4);
+                                                       encodingHistory.add(encoding);
+                                               }
+
+                                       } else {
+                                               encodingCombo.select(encodingCombo.indexOf(lastSelectedEncoding));
+                                       }
+                               }
+                       }
+               });
+
+               fillEncodingCombo();
+
+               // Apply any default encoding derived from the current selection
+               String defaultEncoding = getSelectionEncoding();
+               if (defaultEncoding != null && !"".equals(defaultEncoding)) { //$NON-NLS-1$
+                       setEncoding(defaultEncoding);
+               }
+       }
+
+       /**
+        * Fill the encoding combo.
+        */
+       protected void fillEncodingCombo() {
+               if (encodingCombo != null) {
+                       List<String> encodings = new ArrayList<String>();
+
+                       // Default encoding
+                       encodings.add("Default (ISO-8859-1)"); //$NON-NLS-1$
+
+                       // The currently selected IDE encoding from the preferences
+                       String ideEncoding = getResourceEncoding();
+
+                       // The default Eclipse Workbench encoding (configured in the preferences)
+                       String eclipseEncoding = WorkbenchEncoding.getWorkbenchDefaultEncoding();
+
+                       // The default host (Java VM) encoding
+                       String hostEncoding = Charset.defaultCharset().name();
+
+                       addEncodings(encodings, "UTF-8", ideEncoding, eclipseEncoding, hostEncoding); //$NON-NLS-1$
+
+                       // The "Other..." encoding
+                       encodings.add(Messages.AbstractConfigurationPanel_encoding_custom);
+
+                       encodingCombo.setItems(encodings.toArray(new String[encodings.size()]));
+                       encodingCombo.select(0);
+
+                       lastSelectedEncoding = encodingCombo.getText();
+               }
+       }
+
+       /**
+        * Add given encoding names to the list. Duplicates are filtered out by comparing aliases.
+        */
+       private void addEncodings(List<String> encodings, String... toadd) {
+               Set<String> aliases = new HashSet<String>();
+               for (String name : toadd) {
+                       if (name == null)
+                               continue;
+                       try {
+                               Charset cs = Charset.forName(name);
+                               if (aliases.containsAll(cs.aliases()))
+                                       continue;
+                               if (aliases.contains(name.toLowerCase()))
+                                       continue;
+                               aliases.addAll(cs.aliases());
+                               aliases.add(name.toLowerCase());
+                               encodings.add(name);
+                       } catch (Exception e) {
+                               // skip
+                       }
+               }
+       }
+
+       /**
+        * Get the current value of the encoding preference. If the value is not set
+        * return <code>null</code>.
+        * <p>
+        * <b>Note:</b> Copied from <code>org.eclipse.ui.ide.IDEEncoding</code>.
+        *
+        * @return String
+        */
+       @SuppressWarnings("deprecation")
+    private String getResourceEncoding() {
+               String preference = null;
+               Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
+               if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                       preference = org.eclipse.core.resources.ResourcesPlugin.getPlugin().getPluginPreferences().getString(org.eclipse.core.resources.ResourcesPlugin.PREF_ENCODING);
+               }
+
+               return preference != null && preference.length() > 0 ? preference : null;
+       }
+
+       /**
+        * Select the encoding.
+        *
+        * @param encoding The encoding. Must not be <code>null</code>.
+        */
+       protected void setEncoding(String encoding) {
+               Assert.isNotNull(encoding);
+
+               if (encodingCombo != null && !encodingCombo.isDisposed()) {
+                       int index = encodingCombo.indexOf("ISO-8859-1".equals(encoding) ? "Default (ISO-8859-1)" : encoding); //$NON-NLS-1$ //$NON-NLS-2$
+                       if (index != -1) encodingCombo.select(index);
+                       else {
+                               encodingCombo.add(encoding, encodingCombo.getItemCount() - 1);
+                               encodingCombo.select(encodingCombo.indexOf(encoding));
+                       }
+
+                       lastSelectedEncoding = encodingCombo.getText();
+               }
+       }
+
+       /**
+        * Returns the selected encoding.
+        *
+        * @return The selected encoding or <code>null</code>.
+        */
+       protected String getEncoding() {
+               String encoding = encodingCombo != null && !encodingCombo.isDisposed() ? encodingCombo.getText() : null;
+               return encoding != null && encoding.startsWith("Default") ? null : encoding; //$NON-NLS-1$
+       }
+
+       /**
+        * Returns if or if not the selected encoding is supported.
+        *
+        * @return <code>True</code> if the selected encoding is supported.
+        */
+       protected boolean isEncodingValid() {
+               try {
+                       String encoding = getEncoding();
+                       return Charset.isSupported(encoding != null ? encoding : "ISO-8859-1"); //$NON-NLS-1$
+               } catch (IllegalCharsetNameException e) {
+                       return false;
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/preferences/PreferencePage.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/preferences/PreferencePage.java
new file mode 100644 (file)
index 0000000..c3114c9
--- /dev/null
@@ -0,0 +1,678 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.preferences;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.URIUtil;
+import org.eclipse.core.variables.IStringVariableManager;
+import org.eclipse.core.variables.VariablesPlugin;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.controls.NoteCompositeHelper;
+import org.eclipse.tm.terminal.view.ui.interfaces.IExternalExecutablesProperties;
+import org.eclipse.tm.terminal.view.ui.interfaces.IPreferenceKeys;
+import org.eclipse.tm.terminal.view.ui.local.showin.ExternalExecutablesDialog;
+import org.eclipse.tm.terminal.view.ui.local.showin.ExternalExecutablesManager;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.osgi.framework.Bundle;
+
+/**
+ * Terminal top preference page implementation.
+ */
+public class PreferencePage extends org.eclipse.jface.preference.PreferencePage implements IWorkbenchPreferencePage {
+       /* default */ TableViewer viewer;
+       private Button addButton;
+       private Button editButton;
+       private Button removeButton;
+       /* default */ Combo workingDir;
+       private Button browseButton;
+
+       private Button variablesButton;
+       private boolean hasVariablesButton = false;
+
+       /* default */ Text command;
+       private Button commandBrowseButton;
+       private Text arguments;
+
+       /* default */ final List<Map<String, String>> executables = new ArrayList<Map<String, String>>();
+       /* default */ final Map<String, Image> images = new HashMap<String, Image>();
+
+       /* default */ static final Object[] NO_ELEMENTS = new Object[0];
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+        */
+       @Override
+       public void init(IWorkbench workbench) {
+               Bundle bundle = Platform.getBundle("org.eclipse.debug.ui"); //$NON-NLS-1$
+               if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                       hasVariablesButton = true;
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       protected Control createContents(final Composite parent) {
+               final GC gc = new GC(parent);
+               gc.setFont(JFaceResources.getDialogFont());
+
+               Composite panel = new Composite(parent, SWT.NONE);
+               panel.setLayout(new GridLayout());
+               GridData layoutData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
+               panel.setLayoutData(layoutData);
+
+               Label label = new Label(panel, SWT.HORIZONTAL);
+               label.setText(Messages.PreferencePage_label);
+               label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+               if (!Platform.OS_WIN32.equals(Platform.getOS())) {
+                       Group group = new Group(panel, SWT.NONE);
+                       group.setText(Messages.PreferencePage_command_label);
+                       group.setLayout(new GridLayout(2, false));
+                       group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+
+                       command = new Text(group, SWT.SINGLE | SWT.BORDER);
+                       command.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+                       command.addModifyListener(new ModifyListener() {
+                               @Override
+                               public void modifyText(ModifyEvent e) {
+                                       boolean valid = true;
+                                       String message = null;
+
+                                       String text = command.getText();
+                                       if (text != null && !"".equals(text.trim())) { //$NON-NLS-1$
+                                               IPath p = new Path(text.trim());
+                                               valid = p.toFile().isFile() && p.toFile().canRead() && p.toFile().canExecute();
+                                               if (!valid) message = Messages.PreferencePage_command_invalid;
+                                       }
+
+                                       setValid(valid);
+                                       setErrorMessage(message);
+                               }
+                       });
+
+                       commandBrowseButton = new Button(group, SWT.PUSH);
+                       commandBrowseButton.setText(Messages.PreferencePage_command_button_browse);
+                       layoutData = new GridData(SWT.FILL, SWT.CENTER, false, false);
+                       layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 14);
+                       commandBrowseButton.setLayoutData(layoutData);
+                       commandBrowseButton.addSelectionListener(new SelectionAdapter() {
+                               @Override
+                public void widgetSelected(SelectionEvent e) {
+                                       FileDialog dialog = new FileDialog(parent.getShell(), SWT.OPEN);
+
+                                       String text = command.getText();
+                                       if (text != null && !"".equals(text.trim())) { //$NON-NLS-1$
+                                               IPath p = new Path(text);
+
+                                               if (p.toFile().isFile() || !p.toFile().exists()) {
+                                                       dialog.setFilterPath(p.removeLastSegments(1).toOSString());
+                                                       dialog.setFileName(p.lastSegment());
+                                               } else if (p.toFile().isDirectory()) {
+                                                       dialog.setFilterPath(p.toOSString());
+                                               }
+                                       }
+
+                                       String selected = dialog.open();
+                                       if (selected != null) {
+                                               IPath sp = new Path(selected);
+                                               command.setText(sp.toOSString());
+                                       }
+                               }
+                       });
+
+                       String cmd = UIPlugin.getScopedPreferences().getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX);
+                       if (cmd != null && !"".equals(cmd)) { //$NON-NLS-1$
+                               command.setText(new Path(cmd).toOSString());
+                       }
+
+                       Composite argsPanel = new Composite(group, SWT.NONE);
+                       GridLayout layout = new GridLayout(2, false);
+                       layout.marginHeight = 0; layout.marginWidth = 0;
+                       argsPanel.setLayout(layout);
+                       layoutData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
+                       layoutData.horizontalSpan = 2;
+                       argsPanel.setLayoutData(layoutData);
+
+                       label = new Label(argsPanel, SWT.NONE);
+                       label.setText(Messages.PreferencePage_command_arguments_label);
+
+                       arguments = new Text(argsPanel, SWT.SINGLE | SWT.BORDER);
+                       arguments.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+                       String args = UIPlugin.getScopedPreferences().getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX_ARGS);
+                       if (args != null && !"".equals(args)) { //$NON-NLS-1$
+                               arguments.setText(args);
+                       }
+
+                       NoteCompositeHelper.createNoteComposite(group.getFont(), group, Messages.PreferencePage_command_note_label, Messages.PreferencePage_command_note_text);
+               }
+
+               Group group = new Group(panel, SWT.NONE);
+               group.setText(Messages.PreferencePage_workingDir_label);
+               group.setLayout(new GridLayout(hasVariablesButton ? 3 : 2, false));
+               group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+
+               workingDir = new Combo(group, SWT.DROP_DOWN);
+               Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
+               if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                       workingDir.setItems(new String[] { Messages.PreferencePage_workingDir_userhome_label, Messages.PreferencePage_workingDir_eclipsehome_label, Messages.PreferencePage_workingDir_eclipsews_label });
+               } else {
+                       workingDir.setItems(new String[] { Messages.PreferencePage_workingDir_userhome_label, Messages.PreferencePage_workingDir_eclipsehome_label });
+               }
+               workingDir.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+               workingDir.select(0);
+               workingDir.addModifyListener(new ModifyListener() {
+                       @Override
+                       public void modifyText(ModifyEvent e) {
+                               boolean valid = true;
+                               String message = null;
+
+                               String text = workingDir.getText();
+                               if (text != null && !"".equals(text.trim()) //$NON-NLS-1$
+                                                       && !Messages.PreferencePage_workingDir_userhome_label.equals(text)
+                                                       && !Messages.PreferencePage_workingDir_eclipsehome_label.equals(text)
+                                                       && !Messages.PreferencePage_workingDir_eclipsews_label.equals(text)) {
+                                       try {
+                                               // Resolve possible dynamic variables
+                                               IStringVariableManager vm = VariablesPlugin.getDefault().getStringVariableManager();
+                                               String resolved = vm.performStringSubstitution(text.trim());
+
+                                               IPath p = new Path(resolved);
+                                               valid = p.toFile().canRead() && p.toFile().isDirectory();
+                                               if (!valid) message = Messages.PreferencePage_workingDir_invalid;
+                                       } catch (CoreException ex) {
+                                               valid = false;
+                                               message = ex.getLocalizedMessage();
+                                       }
+                               }
+
+                               setValid(valid);
+                               setErrorMessage(message);
+                       }
+               });
+
+               browseButton = new Button(group, SWT.PUSH);
+               browseButton.setText(Messages.PreferencePage_workingDir_button_browse);
+               layoutData = new GridData(SWT.FILL, SWT.CENTER, false, false);
+               layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 14);
+               browseButton.setLayoutData(layoutData);
+               browseButton.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               IPath uh = null;
+                               IPath eh = null;
+                               IPath ew = null;
+
+                               // HOME
+                               String home = System.getProperty("user.home"); //$NON-NLS-1$
+                               if (home != null && !"".equals(home)) uh = new Path(home); //$NON-NLS-1$
+
+                               // ECLIPSE_HOME
+                               String eclipseHomeLocation = System.getProperty("eclipse.home.location"); //$NON-NLS-1$
+                               if (eclipseHomeLocation != null) {
+                                       try {
+                                               URI uri = URIUtil.fromString(eclipseHomeLocation);
+                                               File f = URIUtil.toFile(uri);
+                                               eh = new Path(f.getAbsolutePath());
+                                       } catch (URISyntaxException ex) { /* ignored on purpose */ }
+                               }
+
+                               // ECLIPSE_WORKSPACE
+                               Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
+                               if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                               if (org.eclipse.core.resources.ResourcesPlugin.getWorkspace() != null
+                                                   && org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot() != null
+                                                   && org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation() != null) {
+                                       ew = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot().getLocation();
+                               }
+                               }
+
+                               DirectoryDialog dialog = new DirectoryDialog(parent.getShell(), SWT.OPEN);
+
+                               // Determine the filter path
+                               String text = workingDir.getText();
+                               if (Messages.PreferencePage_workingDir_userhome_label.equals(text)) {
+                                       dialog.setFilterPath(uh.toOSString());
+                               } else if (Messages.PreferencePage_workingDir_eclipsehome_label.equals(text)) {
+                                       dialog.setFilterPath(eh.toOSString());
+                               } else if (Messages.PreferencePage_workingDir_eclipsews_label.equals(text)) {
+                                       dialog.setFilterPath(ew.toOSString());
+                               } else if (text != null && !"".equals(text.trim())) { //$NON-NLS-1$
+                                       try {
+                                               // Resolve possible dynamic variables
+                                               IStringVariableManager vm = VariablesPlugin.getDefault().getStringVariableManager();
+                                               String resolved = vm.performStringSubstitution(text.trim());
+                                               dialog.setFilterPath(resolved);
+                                       } catch (CoreException ex) {
+                                               if (Platform.inDebugMode()) {
+                                                       UIPlugin.getDefault().getLog().log(ex.getStatus());
+                                               }
+                                       }
+                               }
+
+                               String selected = dialog.open();
+                               if (selected != null) {
+                                       IPath sp = new Path(selected);
+
+                                       if (uh.equals(sp)) {
+                                               workingDir.select(0);
+                                       } else if (eh.equals(sp)) {
+                                               workingDir.select(1);
+                                       } else if (ew.equals(sp)) {
+                                               workingDir.select(2);
+                                       } else {
+                                               workingDir.setText(sp.toOSString());
+                                       }
+                               }
+                       }
+               });
+
+               if (hasVariablesButton) {
+                       variablesButton = new Button(group, SWT.PUSH);
+                       variablesButton.setText(Messages.PreferencePage_workingDir_button_variables);
+                       layoutData = new GridData(SWT.FILL, SWT.CENTER, false, false);
+                       layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 14);
+                       variablesButton.setLayoutData(layoutData);
+                       variablesButton.addSelectionListener(new SelectionAdapter() {
+                               @Override
+                               public void widgetSelected(SelectionEvent e) {
+                                       org.eclipse.debug.ui.StringVariableSelectionDialog dialog = new org.eclipse.debug.ui.StringVariableSelectionDialog(getShell());
+                                       dialog.open();
+                                       String expression = dialog.getVariableExpression();
+                                       if (expression != null) {
+                                               if ("${eclipse_home}".equals(expression)) { //$NON-NLS-1$
+                                                       workingDir.select(1);
+                                               } else if ("${workspace_loc}".equals(expression)) { //$NON-NLS-1$
+                                                       workingDir.select(2);
+                                               } else {
+                                                       workingDir.setText(expression);
+                                               }
+                                       }
+                               }
+                       });
+               }
+
+               String initialCwd = UIPlugin.getScopedPreferences().getString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD);
+               if (initialCwd == null || IPreferenceKeys.PREF_INITIAL_CWD_USER_HOME.equals(initialCwd) || "".equals(initialCwd.trim())) { //$NON-NLS-1$
+                       workingDir.select(0);
+               } else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_HOME.equals(initialCwd) || "${eclipse_home}".equals(initialCwd)) { //$NON-NLS-1$
+                       workingDir.select(1);
+               } else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_WS.equals(initialCwd) || "${workspace_loc}".equals(initialCwd)) { //$NON-NLS-1$
+                       workingDir.select(2);
+               } else {
+                       workingDir.setText(new Path(initialCwd).toOSString());
+               }
+
+               NoteCompositeHelper.createNoteComposite(group.getFont(), group, Messages.PreferencePage_workingDir_note_label, Messages.PreferencePage_workingDir_note_text);
+
+               group = new Group(panel, SWT.NONE);
+               group.setText(Messages.PreferencePage_executables_label);
+               group.setLayout(new GridLayout(2, false));
+               group.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+
+               viewer = new TableViewer(group, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);
+
+               Table table = viewer.getTable();
+               table.setHeaderVisible(true);
+               table.setLinesVisible(true);
+
+        TableColumn column = new TableColumn(table, SWT.LEFT);
+        column.setText(Messages.PreferencePage_executables_column_name_label);
+        column = new TableColumn(table, SWT.LEFT);
+        column.setText(Messages.PreferencePage_executables_column_path_label);
+
+               ColumnViewerToolTipSupport.enableFor(viewer);
+
+               TableLayout tableLayout = new TableLayout();
+               tableLayout.addColumnData(new ColumnWeightData(35));
+               tableLayout.addColumnData(new ColumnWeightData(65));
+               table.setLayout(tableLayout);
+
+               layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
+               layoutData.heightHint = Dialog.convertHeightInCharsToPixels(gc.getFontMetrics(), 10);
+               table.setLayoutData(layoutData);
+
+               Composite buttonsPanel = new Composite(group, SWT.NONE);
+               GridLayout layout = new GridLayout();
+               layout.marginHeight = 0; layout.marginWidth = 0;
+               buttonsPanel.setLayout(layout);
+               buttonsPanel.setLayoutData(new GridData(SWT.LEAD, SWT.BEGINNING, false, false));
+
+               addButton = new Button(buttonsPanel, SWT.PUSH);
+               addButton.setText(Messages.PreferencePage_executables_button_add_label);
+               layoutData = new GridData(SWT.FILL, SWT.CENTER, false, false);
+               layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 10);
+               addButton.setLayoutData(layoutData);
+               addButton.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               ExternalExecutablesDialog dialog = new ExternalExecutablesDialog(PreferencePage.this.getShell(), false);
+                               if (dialog.open() == Window.OK) {
+                                       // Get the executable properties and add it to the the list
+                                       Map<String, String> executableData = dialog.getExecutableData();
+                                       if (executableData != null && !executables.contains(executableData)) {
+                                               executables.add(executableData);
+                                               viewer.refresh();
+                                       }
+                               }
+                       }
+               });
+
+               editButton = new Button(buttonsPanel, SWT.PUSH);
+               editButton.setText(Messages.PreferencePage_executables_button_edit_label);
+               layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+               layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 10);
+               editButton.setLayoutData(layoutData);
+               editButton.addSelectionListener(new SelectionAdapter() {
+                       @SuppressWarnings("unchecked")
+            @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               ISelection s = viewer.getSelection();
+                               if (s instanceof IStructuredSelection && !s.isEmpty()) {
+                                       Object element = ((IStructuredSelection)s).getFirstElement();
+                                       if (element instanceof Map) {
+                                               final Map<String, String> m = (Map<String, String>)element;
+                                               ExternalExecutablesDialog dialog = new ExternalExecutablesDialog(PreferencePage.this.getShell(), true);
+                                               dialog.setExecutableData(m);
+                                               if (dialog.open() == Window.OK) {
+                                                       Map<String, String> executableData = dialog.getExecutableData();
+                                                       if (executableData != null) {
+                                                               m.clear();
+                                                               m.putAll(executableData);
+                                                               viewer.refresh();
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               });
+
+               removeButton = new Button(buttonsPanel, SWT.PUSH);
+               removeButton.setText(Messages.PreferencePage_executables_button_remove_label);
+               layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+               layoutData.widthHint = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), 10);
+               removeButton.setLayoutData(layoutData);
+               removeButton.addSelectionListener(new SelectionAdapter() {
+                       @SuppressWarnings("unchecked")
+            @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               ISelection s = viewer.getSelection();
+                               if (s instanceof IStructuredSelection && !s.isEmpty()) {
+                                       Iterator<?> iterator = ((IStructuredSelection)s).iterator();
+                                       while (iterator.hasNext()) {
+                                               Object element = iterator.next();
+                                               if (element instanceof Map) {
+                                                       Map<String, Object> m = (Map<String, Object>)element;
+                                                       executables.remove(m);
+                                               }
+                                               viewer.refresh();
+                                       }
+                               }
+                       }
+               });
+
+               viewer.setContentProvider(new IStructuredContentProvider() {
+                       @Override
+                       public Object[] getElements(Object inputElement) {
+                               if (inputElement instanceof List && !((List<?>)inputElement).isEmpty()) {
+                                       return ((List<?>)inputElement).toArray();
+                               }
+                               return NO_ELEMENTS;
+                       }
+
+                       @Override
+                       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+                       }
+
+                       @Override
+                       public void dispose() {
+                       }
+               });
+
+               viewer.setLabelProvider(new ITableLabelProvider() {
+                       @SuppressWarnings("unchecked")
+                       @Override
+                       public String getColumnText(Object element, int columnIndex) {
+                               if (element instanceof Map) {
+                    Map<String, Object> m = (Map<String, Object>)element;
+
+                    switch (columnIndex) {
+                    case 0:
+                       return (String)m.get(IExternalExecutablesProperties.PROP_NAME);
+                    case 1:
+                       return (String)m.get(IExternalExecutablesProperties.PROP_PATH);
+                    }
+                               }
+                               return null;
+                       }
+
+                       @SuppressWarnings("unchecked")
+            @Override
+                       public Image getColumnImage(Object element, int columnIndex) {
+                               Image i = null;
+
+                               if (element instanceof Map) {
+                                       switch (columnIndex) {
+                                       case 0:
+                           Map<String, Object> m = (Map<String, Object>)element;
+                                               String icon = (String) m.get(IExternalExecutablesProperties.PROP_ICON);
+                                               if (icon != null) {
+                                                       i = images.get(icon);
+                                                       if (i == null) {
+                                                               ImageData id = ExternalExecutablesManager.loadImage(icon);
+                                                               if (id != null) {
+                                                                       ImageDescriptor d = ImageDescriptor.createFromImageData(id);
+                                                                       if (d != null) i = d.createImage();
+                                                                       if (i != null) images.put(icon, i);
+                                                               }
+                                                       }
+                                               }
+                                               break;
+                                       case 1:
+                                               break;
+                                       }
+                               }
+
+                               return i;
+                       }
+
+                       @Override
+                       public void removeListener(ILabelProviderListener listener) {
+                       }
+
+                       @Override
+                       public boolean isLabelProperty(Object element, String property) {
+                               return false;
+                       }
+
+                       @Override
+                       public void dispose() {
+                       }
+
+                       @Override
+                       public void addListener(ILabelProviderListener listener) {
+                       }
+               });
+
+               List<Map<String, String>> l = ExternalExecutablesManager.load();
+               if (l != null) executables.addAll(l);
+
+               viewer.setInput(executables);
+
+               viewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+                       @Override
+                       public void selectionChanged(SelectionChangedEvent event) {
+                               updateButtons();
+                       }
+               });
+
+               updateButtons();
+
+               gc.dispose();
+
+               return panel;
+       }
+
+       /**
+        * Updates the button states.
+        */
+       protected void updateButtons() {
+               if (viewer != null) {
+                       addButton.setEnabled(true);
+
+                       ISelection selection = viewer.getSelection();
+
+                       boolean hasSelection = selection != null && !selection.isEmpty();
+                       int count = selection instanceof IStructuredSelection ? ((IStructuredSelection)selection).size() : 0;
+
+                       editButton.setEnabled(hasSelection && count == 1);
+                       removeButton.setEnabled(hasSelection && count > 0);
+               } else {
+                       addButton.setEnabled(false);
+                       editButton.setEnabled(false);
+                       removeButton.setEnabled(false);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
+        */
+       @Override
+       protected void performDefaults() {
+               if (!Platform.OS_WIN32.equals(Platform.getOS())) {
+                       command.setText(""); //$NON-NLS-1$
+                       arguments.setText(""); //$NON-NLS-1$
+               }
+
+               String initialCwd = UIPlugin.getScopedPreferences().getDefaultString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD);
+               if (initialCwd == null || IPreferenceKeys.PREF_INITIAL_CWD_USER_HOME.equals(initialCwd) || "".equals(initialCwd.trim())) { //$NON-NLS-1$
+                       workingDir.select(0);
+               } else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_HOME.equals(initialCwd) || "${eclipse_home}".equals(initialCwd)) { //$NON-NLS-1$
+                       workingDir.select(1);
+               } else if (IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_WS.equals(initialCwd) || "${workspace_loc}".equals(initialCwd)) { //$NON-NLS-1$
+                       workingDir.select(2);
+               } else {
+                       workingDir.setText(new Path(initialCwd).toOSString());
+               }
+
+               executables.clear();
+               List<Map<String, String>> l = ExternalExecutablesManager.load();
+               if (l != null) executables.addAll(l);
+               viewer.refresh();
+
+           super.performDefaults();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.preference.PreferencePage#performOk()
+        */
+       @Override
+       public boolean performOk() {
+               if (!Platform.OS_WIN32.equals(Platform.getOS())) {
+                       String text = command.getText();
+                       IPath p = new Path(text.trim());
+                       UIPlugin.getScopedPreferences().putString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX, p.toFile().isFile() && p.toFile().canRead() && p.toFile().canExecute() ? p.toOSString() : null);
+
+                       text = arguments.getText();
+                       UIPlugin.getScopedPreferences().putString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX_ARGS, !"".equals(text.trim()) ? text.trim() : null); //$NON-NLS-1$
+               }
+
+               String text = workingDir.getText();
+               if (text == null || Messages.PreferencePage_workingDir_userhome_label.equals(text) || "".equals(text.trim())) { //$NON-NLS-1$
+                       UIPlugin.getScopedPreferences().putString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD, null);
+               } else if (Messages.PreferencePage_workingDir_eclipsehome_label.equals(text)) {
+                       UIPlugin.getScopedPreferences().putString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD, IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_HOME);
+               } else if (Messages.PreferencePage_workingDir_eclipsews_label.equals(text)) {
+                       UIPlugin.getScopedPreferences().putString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD, IPreferenceKeys.PREF_INITIAL_CWD_ECLIPSE_WS);
+               } else {
+                       try {
+                               // Resolve possible dynamic variables
+                               IStringVariableManager vm = VariablesPlugin.getDefault().getStringVariableManager();
+                               String resolved = vm.performStringSubstitution(text.trim());
+
+                               IPath p = new Path(resolved);
+                               UIPlugin.getScopedPreferences().putString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD, p.toFile().canRead() && p.toFile().isDirectory() ? text.trim() : null);
+                       } catch (CoreException e) {
+                               if (Platform.inDebugMode()) {
+                                       UIPlugin.getDefault().getLog().log(e.getStatus());
+                               }
+                       }
+               }
+
+               ExternalExecutablesManager.save(executables);
+
+           return super.performOk();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.DialogPage#dispose()
+        */
+       @Override
+       public void dispose() {
+               for (Image i : images.values()) {
+                       i.dispose();
+               }
+               images.clear();
+           super.dispose();
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/preferences/PreferencesInitializer.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/preferences/PreferencesInitializer.java
new file mode 100644 (file)
index 0000000..1c79e02
--- /dev/null
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2016 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460496
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.preferences;
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.tm.terminal.view.core.preferences.ScopedEclipsePreferences;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.IPreferenceKeys;
+
+/**
+ * Terminal default preferences initializer.
+ */
+public class PreferencesInitializer extends AbstractPreferenceInitializer {
+
+       /**
+        * Constructor.
+        */
+       public PreferencesInitializer() {
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
+        */
+       @Override
+       public void initializeDefaultPreferences() {
+               ScopedEclipsePreferences prefs = UIPlugin.getScopedPreferences();
+
+               prefs.putDefaultBoolean(IPreferenceKeys.PREF_REMOVE_TERMINATED_TERMINALS, true);
+
+               prefs.putDefaultString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD, IPreferenceKeys.PREF_INITIAL_CWD_USER_HOME);
+               prefs.putDefaultString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX, null);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/services/TerminalService.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/services/TerminalService.java
new file mode 100644 (file)
index 0000000..c69bdda
--- /dev/null
@@ -0,0 +1,359 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.services;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.terminal.view.core.activator.CoreBundleActivator;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalTabListener;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
+import org.eclipse.tm.terminal.view.ui.interfaces.IUIConstants;
+import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
+import org.eclipse.tm.terminal.view.ui.manager.ConsoleManager;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Terminal service implementation.
+ */
+@SuppressWarnings("restriction")
+public class TerminalService implements ITerminalService {
+       /**
+        * The registered terminal tab dispose listeners.
+        */
+       private final ListenerList terminalTabListeners = new ListenerList();
+
+       // Flag to remember if the terminal view has been restored or not.
+       private boolean fRestoringView;
+
+       // Terminal tab events
+
+       /**
+        * A terminal tab got disposed.
+        */
+       public static final int TAB_DISPOSED = 1;
+
+       /**
+        * Common terminal service runnable implementation.
+        */
+       protected static abstract class TerminalServiceRunnable {
+
+               /**
+                * Invoked to execute the terminal service runnable.
+                *
+                * @param id The terminals view id or <code>null</code>.
+                * @param secondaryId The terminals view secondary id or <code>null</code>.
+                * @param title The terminal tab title. Must not be <code>null</code>.
+                * @param connector The terminal connector. Must not be <code>null</code>.
+                * @param data The custom terminal data node or <code>null</code>.
+                * @param done The callback to invoke if the operation finished or <code>null</code>.
+                */
+               public abstract void run(String id, String secondaryId, String title, ITerminalConnector connector, Object data, Done done);
+
+               /**
+                * Returns if or if not to execute the runnable asynchronously.
+                * <p>
+                * The method returns per default <code>true</code>. Overwrite to
+                * modify the behavior.
+                *
+                * @return <code>True</code> to execute the runnable asynchronously, <code>false</code> otherwise.
+                */
+               public boolean isExecuteAsync() { return true; }
+       }
+
+       /**
+     * Constructor
+     */
+    public TerminalService() {
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.tm.terminal.view.core.interfaces.ITerminalService#addTerminalTabListener(org.eclipse.tm.terminal.view.core.interfaces.ITerminalTabListener)
+     */
+    @Override
+    public final void addTerminalTabListener(ITerminalTabListener listener) {
+               Assert.isNotNull(listener);
+               terminalTabListeners.add(listener);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.tm.terminal.view.core.interfaces.ITerminalService#removeTerminalTabListener(org.eclipse.tm.terminal.view.core.interfaces.ITerminalTabListener)
+     */
+    @Override
+    public final void removeTerminalTabListener(ITerminalTabListener listener) {
+               Assert.isNotNull(listener);
+               terminalTabListeners.remove(listener);
+    }
+
+       /**
+        * Convenience method for notifying the registered terminal tab listeners.
+        *
+        * @param event The terminal tab event.
+        * @param source The disposed tab item. Must not be <code>null</code>.
+        * @param data The custom data object associated with the disposed tab item or <code>null</code>.
+        */
+       public final void fireTerminalTabEvent(final int event, final Object source, final Object data) {
+               Assert.isNotNull(source);
+
+               // If no listener is registered, we are done here
+               if (terminalTabListeners.isEmpty()) return;
+
+               // Get the list or currently registered listeners
+               Object[] l = terminalTabListeners.getListeners();
+               // Loop the registered terminal tab listeners and invoke the proper method
+               for (int i = 0; i < l.length; i++) {
+                       final ITerminalTabListener listener = (ITerminalTabListener) l[i];
+                       ISafeRunnable job = new ISafeRunnable() {
+                               @Override
+                               public void handleException(Throwable exception) {
+                                       // already logged in Platform#run()
+                               }
+
+                               @Override
+                               public void run() throws Exception {
+                                       switch (event) {
+                                       case TAB_DISPOSED:
+                                               listener.terminalTabDisposed(source, data);
+                                               break;
+                                       default:
+                                       }
+                               }
+                       };
+                       SafeRunner.run(job);
+               }
+       }
+
+       /**
+        * Executes the given runnable operation and invokes the given callback, if any,
+        * after the operation finished.
+        *
+        * @param properties The terminal properties. Must not be <code>null</code>.
+        * @param runnable The terminal service runnable. Must not be <code>null</code>.
+        * @param done The callback to invoke if the operation has been finished or <code>null</code>.
+        */
+       protected final void executeServiceOperation(final Map<String, Object> properties, final TerminalServiceRunnable runnable, final Done done) {
+               Assert.isNotNull(properties);
+               Assert.isNotNull(runnable);
+
+               // Extract the properties
+               String id = (String)properties.get(ITerminalsConnectorConstants.PROP_ID);
+               String secondaryId = (String)properties.get(ITerminalsConnectorConstants.PROP_SECONDARY_ID);
+               String title = (String)properties.get(ITerminalsConnectorConstants.PROP_TITLE);
+               Object data = properties.get(ITerminalsConnectorConstants.PROP_DATA);
+
+               // Normalize the terminals console view id
+               id = normalizeId(id, data);
+               // Normalize the terminal console tab title
+               title = normalizeTitle(title, data);
+
+               // Create the terminal connector instance
+               final ITerminalConnector connector = createTerminalConnector(properties);
+               if (connector == null) {
+                       // Properties contain invalid connector arguments
+                       if (done != null) {
+                               Exception e = new IllegalArgumentException(Messages.TerminalService_error_cannotCreateConnector);
+                               done.done(new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), e.getLocalizedMessage(), e));
+                       }
+                       return;
+               }
+
+               // Finalize the used variables
+               final String finId = id;
+               final String finSecondaryId = secondaryId;
+               final String finTitle = title;
+               final Object finData = data;
+
+               // Execute the operation
+               if (!runnable.isExecuteAsync()) {
+                       runnable.run(finId, finSecondaryId, finTitle, connector, finData, done);
+               }
+               else {
+               try {
+                   Display display = PlatformUI.getWorkbench().getDisplay();
+                   display.asyncExec(new Runnable() {
+                                       @Override
+                       public void run() {
+                                               runnable.run(finId, finSecondaryId, finTitle, connector, finData, done);
+                                       }
+                               });
+               }
+               catch (Exception e) {
+                   // if display is disposed, silently ignore.
+               }
+               }
+       }
+
+       /**
+        * Normalize the terminals view id.
+        *
+        * @param id The terminals view id or <code>null</code>.
+        * @param data The custom data object or <code>null</code>.
+        *
+        * @return The normalized terminals console view id.
+        */
+       protected String normalizeId(String id, Object data) {
+               return id != null ? id : IUIConstants.ID;
+       }
+
+       /**
+        * Normalize the terminal tab title.
+        *
+        * @param title The terminal tab title or <code>null</code>.
+        * @param data The custom data object or <code>null</code>.
+        *
+        * @return The normalized terminal tab title.
+        */
+       protected String normalizeTitle(String title, Object data) {
+               // If the title is explicitly specified, return as is
+               if (title != null) return title;
+
+               // Return the default console title in all other cases
+               return Messages.TerminalService_defaultTitle;
+       }
+
+       /**
+        * Creates the terminal connector configured within the given properties.
+        *
+        * @param properties The terminal console properties. Must not be <code>null</code>.
+        * @return The terminal connector or <code>null</code>.
+        */
+       protected ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
+               Assert.isNotNull(properties);
+
+               // The terminal connector result object
+               ITerminalConnector connector = null;
+
+               // Get the launcher delegate id from the properties
+               String delegateId = (String)properties.get(ITerminalsConnectorConstants.PROP_DELEGATE_ID);
+               if (delegateId != null) {
+                       // Get the launcher delegate
+                       ILauncherDelegate delegate = LauncherDelegateManager.getInstance().getLauncherDelegate(delegateId, false);
+                       if (delegate != null) {
+                               // Create the terminal connector
+                               connector = delegate.createTerminalConnector(properties);
+                       }
+               }
+
+               return connector;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.core.interfaces.ITerminalService#openConsole(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
+        */
+       @Override
+    public void openConsole(final Map<String, Object> properties, final Done done) {
+               Assert.isNotNull(properties);
+               final boolean restoringView = fRestoringView;
+
+               executeServiceOperation(properties, new TerminalServiceRunnable() {
+                       @Override
+                       @SuppressWarnings("synthetic-access")
+                       public void run(final String id, final String secondaryId, final String title,
+                                                       final ITerminalConnector connector, final Object data, final Done done) {
+                               if (restoringView) {
+                                       doRun(id, secondaryId, title, connector, data, done);
+                               } else {
+                                       // First, restore the view. This opens consoles from the memento
+                                       fRestoringView = true;
+                                       ConsoleManager.getInstance().showConsoleView(id, secondaryId);
+                                       fRestoringView = false;
+
+                                       // After that schedule opening the requested console
+                               try {
+                                   Display display = PlatformUI.getWorkbench().getDisplay();
+                                   display.asyncExec(new Runnable() {
+                                                       @Override
+                                                       public void run() {
+                                                               doRun(id, secondaryId, title, connector, data, done);
+                                                       }
+                                               });
+                               }
+                               catch (Exception e) {
+                                   // if display is disposed, silently ignore.
+                               }
+                               }
+                       }
+
+                       public void doRun(String id, String secondaryId, String title, ITerminalConnector connector, Object data, Done done) {
+                               // Determine the terminal encoding
+                               String encoding = (String)properties.get(ITerminalsConnectorConstants.PROP_ENCODING);
+                               // Create the flags to pass on to openConsole
+                               Map<String, Boolean> flags = new HashMap<String, Boolean>();
+                               flags.put("activate", Boolean.TRUE); //$NON-NLS-1$
+                               if (properties.get(ITerminalsConnectorConstants.PROP_FORCE_NEW) instanceof Boolean) {
+                                       flags.put(ITerminalsConnectorConstants.PROP_FORCE_NEW, (Boolean)properties.get(ITerminalsConnectorConstants.PROP_FORCE_NEW));
+                               }
+                               if (properties.get(ITerminalsConnectorConstants.PROP_DATA_NO_RECONNECT) instanceof Boolean) {
+                                       flags.put(ITerminalsConnectorConstants.PROP_DATA_NO_RECONNECT, (Boolean)properties.get(ITerminalsConnectorConstants.PROP_DATA_NO_RECONNECT));
+                               }
+                               // Open the new console
+                               CTabItem item;
+                               if (secondaryId != null)
+                                       item = ConsoleManager.getInstance().openConsole(id, secondaryId, title, encoding, connector, data, flags);
+                               else
+                                       item = ConsoleManager.getInstance().openConsole(id, title, encoding, connector, data, flags);
+                               // Associate the original terminal properties with the tab item.
+                               // This makes it easier to persist the connection data within the memento handler
+                               if (item != null && !item.isDisposed()) item.setData("properties", properties); //$NON-NLS-1$
+
+                               // Invoke the callback
+                               if (done != null) done.done(Status.OK_STATUS);
+                       }
+               }, done);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.core.interfaces.ITerminalService#closeConsole(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
+        */
+       @Override
+    public void closeConsole(final Map<String, Object> properties, final Done done) {
+               Assert.isNotNull(properties);
+
+               executeServiceOperation(properties, new TerminalServiceRunnable() {
+                       @Override
+                       public void run(String id, String secondaryId, String title, ITerminalConnector connector, Object data, Done done) {
+                               // Close the console
+                               ConsoleManager.getInstance().closeConsole(id, title, connector, data);
+                               // Invoke the callback
+                               if (done != null) done.done(Status.OK_STATUS);
+                       }
+               }, done);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.core.interfaces.ITerminalService#terminateConsole(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
+        */
+       @Override
+       public void terminateConsole(Map<String, Object> properties, Done done) {
+               Assert.isNotNull(properties);
+
+               executeServiceOperation(properties, new TerminalServiceRunnable() {
+                       @Override
+                       public void run(String id, String secondaryId, String title, ITerminalConnector connector, Object data, Done done) {
+                               // Close the console
+                               ConsoleManager.getInstance().terminateConsole(id, title, connector, data);
+                               // Invoke the callback
+                               if (done != null) done.done(Status.OK_STATUS);
+                       }
+               }, done);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/AbstractStreamsConnector.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/AbstractStreamsConnector.java
new file mode 100644 (file)
index 0000000..53ec987
--- /dev/null
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.streams;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
+import org.eclipse.ui.services.IDisposable;
+
+/**
+ * Streams connector implementation.
+ */
+public abstract class AbstractStreamsConnector extends TerminalConnectorImpl {
+       // Reference to the stdin monitor
+    private InputStreamMonitor stdInMonitor;
+    // Reference to the stdout monitor
+    private OutputStreamMonitor stdOutMonitor;
+    // Reference to the stderr monitor
+    private OutputStreamMonitor stdErrMonitor;
+
+    // Reference to the list of stdout output listeners
+    private ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = null;
+    // Reference to the list of stderr output listeners
+    private ITerminalServiceOutputStreamMonitorListener[] stderrListeners = null;
+
+    /**
+     * Set the list of stdout listeners.
+     *
+     * @param listeners The list of stdout listeners or <code>null</code>.
+     */
+    protected final void setStdoutListeners(ITerminalServiceOutputStreamMonitorListener[] listeners) {
+       this.stdoutListeners = listeners;
+    }
+
+    /**
+     * Set the list of stderr listeners.
+     *
+     * @param listeners The list of stderr listeners or <code>null</code>.
+     */
+    protected final void setStderrListeners(ITerminalServiceOutputStreamMonitorListener[] listeners) {
+       this.stderrListeners = listeners;
+    }
+
+    /**
+     * Connect the given streams. The streams connector will wrap each stream
+     * with a corresponding terminal stream monitor.
+     *
+     * @param terminalControl The terminal control. Must not be <code>null</code>.
+     * @param stdin The stdin stream or <code>null</code>.
+     * @param stdout The stdout stream or <code>null</code>.
+     * @param stderr The stderr stream or <code>null</code>.
+        * @param localEcho Local echo on or off.
+        * @param lineSeparator The line separator used by the stream.
+     */
+    protected void connectStreams(ITerminalControl terminalControl, OutputStream stdin, InputStream stdout, InputStream stderr, boolean localEcho, String lineSeparator) {
+       Assert.isNotNull(terminalControl);
+
+       // Create the input stream monitor
+       if (stdin != null) {
+               stdInMonitor = createStdInMonitor(terminalControl, stdin, localEcho, lineSeparator);
+               // Register the connector if it implements IDisposable and stdout/stderr are not monitored
+               if (stdout == null && stderr == null && this instanceof IDisposable) stdInMonitor.addDisposable((IDisposable)this);
+               // Start the monitoring
+               stdInMonitor.startMonitoring();
+       }
+
+       // Create the output stream monitor
+       if (stdout != null) {
+               stdOutMonitor = createStdOutMonitor(terminalControl, stdout, lineSeparator);
+               // Register the connector if it implements IDisposable
+               if (this instanceof IDisposable) stdOutMonitor.addDisposable((IDisposable)this);
+               // Register the listeners
+               if (stdoutListeners != null) {
+                       for (ITerminalServiceOutputStreamMonitorListener l : stdoutListeners) {
+                               stdOutMonitor.addListener(l);
+                       }
+               }
+               // Start the monitoring
+               stdOutMonitor.startMonitoring();
+       }
+
+       // Create the error stream monitor
+       if (stderr != null) {
+               stdErrMonitor = createStdErrMonitor(terminalControl, stderr, lineSeparator);
+               // Register the connector if it implements IDisposable and stdout is not monitored
+               if (stdout == null && this instanceof IDisposable) stdErrMonitor.addDisposable((IDisposable)this);
+               // Register the listeners
+               if (stderrListeners != null) {
+                       for (ITerminalServiceOutputStreamMonitorListener l : stderrListeners) {
+                               stdErrMonitor.addListener(l);
+                       }
+               }
+               // Start the monitoring
+               stdErrMonitor.startMonitoring();
+       }
+    }
+
+    /**
+     * Creates an stdin monitor for the given terminal control and stdin stream.
+     * Subclasses may override to create a specialized stream monitor.
+     *
+     * @param terminalControl The terminal control. Must not be <code>null</code>.
+     * @param stdin The stdin stream or <code>null</code>.
+        * @param localEcho Local echo on or off.
+        * @param lineSeparator The line separator used by the stream.
+        *
+     * @return input stream monitor
+     */
+    protected InputStreamMonitor createStdInMonitor(ITerminalControl terminalControl, OutputStream stdin, boolean localEcho, String lineSeparator) {
+        return new InputStreamMonitor(terminalControl, stdin, localEcho, lineSeparator);
+    }
+
+    /**
+     * Creates an stdout monitor for the given terminal control and stdout stream.
+     * Subclasses may override to create a specialized stream monitor.
+     *
+     * @param terminalControl The terminal control. Must not be <code>null</code>.
+     * @param stdout The stdout stream or <code>null</code>.
+        * @param lineSeparator The line separator used by the stream.
+        *
+     * @return output stream monitor
+     */
+    protected OutputStreamMonitor createStdOutMonitor(ITerminalControl terminalControl, InputStream stdout, String lineSeparator) {
+        return new OutputStreamMonitor(terminalControl, stdout, lineSeparator);
+    }
+
+    /**
+     * Creates an stderr monitor for the given terminal control and stderr stream.
+     * Subclasses may override to create a specialized stream monitor.
+     *
+     * @param terminalControl The terminal control. Must not be <code>null</code>.
+     * @param stderr The stderr stream or <code>null</code>.
+        * @param lineSeparator The line separator used by the stream.
+        *
+     * @return output stream monitor
+     */
+    protected OutputStreamMonitor createStdErrMonitor(ITerminalControl terminalControl, InputStream stderr, String lineSeparator) {
+        return new OutputStreamMonitor(terminalControl, stderr, lineSeparator);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#doDisconnect()
+     */
+    @Override
+    protected void doDisconnect() {
+       // Dispose the streams
+        if (stdInMonitor != null) { stdInMonitor.dispose(); stdInMonitor = null; }
+        if (stdOutMonitor != null) { stdOutMonitor.dispose(); stdOutMonitor = null; }
+        if (stdErrMonitor != null) { stdErrMonitor.dispose(); stdErrMonitor = null; }
+
+       super.doDisconnect();
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#getTerminalToRemoteStream()
+     */
+       @Override
+       public OutputStream getTerminalToRemoteStream() {
+               return stdInMonitor;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/InputStreamMonitor.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/InputStreamMonitor.java
new file mode 100644 (file)
index 0000000..45394e0
--- /dev/null
@@ -0,0 +1,366 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.streams;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ILineSeparatorConstants;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.ui.services.IDisposable;
+
+/**
+ * Input stream monitor implementation.
+ * <p>
+ * <b>Note:</b> The input is coming <i>from</i> the terminal. Therefore, the input
+ * stream monitor is attached to the stdin stream of the monitored (remote) process.
+ */
+public class InputStreamMonitor extends OutputStream implements IDisposable {
+    // Reference to the parent terminal control
+       private final ITerminalControl terminalControl;
+
+       // Reference to the monitored (output) stream
+    private final OutputStream stream;
+
+    // Reference to the thread writing the stream
+    private volatile Thread thread;
+
+    // Flag to mark the monitor disposed. When disposed,
+    // no further data is written from the monitored stream.
+    private volatile boolean disposed;
+
+    // A list of object to dispose if this monitor is disposed
+    private final List<IDisposable> disposables = new ArrayList<IDisposable>();
+
+    // Queue to buffer the data to write to the output stream
+    private final Queue<byte[]> queue = new LinkedList<byte[]>();
+
+    // ***** Line separator replacement logic *****
+
+       private final static int TERMINAL_SENDS_CR = 0;
+       private final static int TERMINAL_SENDS_CRLF = 1;
+       private final static int PROGRAM_EXPECTS_LF = 0;
+       private final static int PROGRAM_EXPECTS_CRLF = 1;
+       private final static int PROGRAM_EXPECTS_CR = 2;
+       private final static int NO_CHANGE = 0;
+       private final static int CHANGE_CR_TO_LF = 1;
+       private final static int INSERT_LF_AFTER_CR = 2;
+       private final static int REMOVE_CR = 3;
+       private final static int REMOVE_LF = 4;
+
+       // CRLF conversion table:
+       //
+       // Expected line separator -->         |       LF        |        CRLF        |       CR       |
+       // ------------------------------------+-----------------+--------------------+----------------+
+       // Local echo off - control sends CR   | change CR to LF | insert LF after CR | no change      |
+       // ------------------------------------+-----------------+--------------------+----------------+
+       // Local echo on - control sends CRLF  | remove CR       | no change          | remove LF      |
+       //
+       private final static int[][] CRLF_REPLACEMENT = {
+
+               {CHANGE_CR_TO_LF, INSERT_LF_AFTER_CR, NO_CHANGE},
+               {REMOVE_CR, NO_CHANGE, REMOVE_LF}
+       };
+
+       private int replacement;
+
+    /**
+     * Constructor.
+     *
+     * @param terminalControl The parent terminal control. Must not be <code>null</code>.
+     * @param stream The stream. Must not be <code>null</code>.
+        * @param localEcho Local echo on or off.
+        * @param lineSeparator The line separator used by the stream.
+     */
+       public InputStreamMonitor(ITerminalControl terminalControl, OutputStream stream, boolean localEcho, String lineSeparator) {
+       super();
+
+       Assert.isNotNull(terminalControl);
+       this.terminalControl = terminalControl;
+       Assert.isNotNull(stream);
+        this.stream = stream;
+
+        // Determine the line separator replacement setting
+               int terminalSends = localEcho ? TERMINAL_SENDS_CRLF : TERMINAL_SENDS_CR;
+               if (lineSeparator == null) {
+                       replacement = NO_CHANGE;
+               } else {
+                       int programExpects;
+                       if (lineSeparator.equals(ILineSeparatorConstants.LINE_SEPARATOR_LF)) {
+                               programExpects = PROGRAM_EXPECTS_LF;
+                       }
+                       else if (lineSeparator.equals(ILineSeparatorConstants.LINE_SEPARATOR_CR)) {
+                               programExpects = PROGRAM_EXPECTS_CR;
+                       }
+                       else {
+                               programExpects = PROGRAM_EXPECTS_CRLF;
+                       }
+                       replacement = CRLF_REPLACEMENT[terminalSends][programExpects];
+               }
+
+    }
+
+       /**
+        * Returns the associated terminal control.
+        *
+        * @return The associated terminal control.
+        */
+       protected final ITerminalControl getTerminalControl() {
+               return terminalControl;
+       }
+
+       /**
+        * Adds the given disposable object to the list. The method will do nothing
+        * if either the disposable object is already part of the list or the monitor
+        * is disposed.
+        *
+        * @param disposable The disposable object. Must not be <code>null</code>.
+        */
+       public final void addDisposable(IDisposable disposable) {
+               Assert.isNotNull(disposable);
+               if (!disposed && !disposables.contains(disposable)) disposables.add(disposable);
+       }
+
+       /**
+        * Removes the disposable object from the list.
+        *
+        * @param disposable The disposable object. Must not be <code>null</code>.
+        */
+       public final void removeDisposable(IDisposable disposable) {
+               Assert.isNotNull(disposable);
+               disposables.remove(disposable);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.services.IDisposable#dispose()
+        */
+       @Override
+       public void dispose() {
+               // If already disposed --> return immediately
+               if (disposed) return;
+
+               // Mark the monitor disposed
+       disposed = true;
+
+        // Close the stream (ignore exceptions on close)
+        try { stream.close(); } catch (IOException e) { /* ignored on purpose */ }
+        // And interrupt the thread
+        close();
+
+        // Dispose all registered disposable objects
+        for (IDisposable disposable : disposables) disposable.dispose();
+        // Clear the list
+        disposables.clear();
+       }
+
+    /**
+     * Close the terminal input stream monitor.
+     */
+    @Override
+       public void close() {
+       // Not initialized -> return immediately
+       if (thread == null) return;
+
+       // Copy the reference
+       final Thread oldThread = thread;
+       // Unlink the monitor from the thread
+       thread = null;
+       // And interrupt the writer thread
+       oldThread.interrupt();
+    }
+
+    /**
+     * Starts the terminal output stream monitor.
+     */
+    public void startMonitoring() {
+       // If already initialized -> return immediately
+       if (thread != null) return;
+
+       // Create a new runnable which is constantly reading from the stream
+       Runnable runnable = new Runnable() {
+               @Override
+                       public void run() {
+                       writeStream();
+               }
+       };
+
+       // Create the writer thread
+       thread = new Thread(runnable, "Terminal Input Stream Monitor Thread"); //$NON-NLS-1$
+
+       // Configure the writer thread
+        thread.setDaemon(true);
+
+        // Start the processing
+        thread.start();
+    }
+
+
+    /**
+     * Reads from the queue and writes the read content to the stream.
+     */
+    protected void writeStream() {
+       // Read from the queue and write to the stream until disposed
+        outer: while (thread != null && !disposed) {
+            byte[] data;
+                       // If the queue is empty, wait until notified
+               synchronized(queue) {
+                       while (queue.isEmpty()) {
+                               if (disposed) break outer;
+                                       try {
+                                               queue.wait();
+                                       } catch (InterruptedException e) {
+                                               break outer;
+                                       }
+                       }
+                       // Retrieves the queue head (is null if queue is empty (should never happen))
+                       data = queue.poll();
+               }
+            if (data != null) {
+               try {
+                       // Break up writes into max 1000 byte junks to avoid console input buffer overflows on Windows
+                       int written = 0;
+                       byte[] buf = new byte[1000];
+                       while (written < data.length) {
+                               int len = Math.min(buf.length, data.length - written);
+                               System.arraycopy(data, written, buf, 0, len);
+                               // Write the data to the stream
+                               stream.write(buf, 0, len);
+                                               written += len;
+                               // Flush the stream immediately
+                               stream.flush();
+                               // Wait a little between writes to allow input being processed
+                               if (written < data.length)
+                                       Thread.sleep(100);
+                       }
+               } catch (IOException e) {
+                       // IOException received. If this is happening when already disposed -> ignore
+                               if (!disposed) {
+                                       IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
+                                                                                               NLS.bind(Messages.InputStreamMonitor_error_writingToStream, e.getLocalizedMessage()), e);
+                                       UIPlugin.getDefault().getLog().log(status);
+                               }
+               }
+                catch (InterruptedException e) {
+                       break;
+                }
+            }
+        }
+
+        // Dispose the stream
+        dispose();
+    }
+
+       /* (non-Javadoc)
+        * @see java.io.OutputStream#write(int)
+        */
+    @Override
+    public void write(int b) throws IOException {
+        synchronized(queue) {
+            queue.add(new byte[] { (byte)b });
+            queue.notifyAll();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see java.io.OutputStream#write(byte[], int, int)
+     */
+    @Override
+    public void write(byte[] b, int off, int len) throws IOException {
+       // Write the whole block to the queue to avoid synchronization
+       // to happen for every byte. To do so, we have to avoid calling
+       // the super method. Therefore we have to do the same checking
+       // here as the base class does.
+
+       // Null check. See the implementation in OutputStream.
+       if (b == null) throw new NullPointerException();
+
+       // Boundary check. See the implementation in OutputStream.
+       if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) {
+               throw new IndexOutOfBoundsException();
+       }
+       else if (len == 0) {
+               return;
+       }
+
+        // Make sure that the written block is not interlaced with other input.
+        synchronized(queue) {
+               // Preprocess the block to be written
+               byte[] processedBytes = onWriteContentToStream(b, off, len);
+               // If the returned array is not the original one, adjust offset and length
+               if (processedBytes != b) {
+                       off = 0; len = processedBytes.length; b = processedBytes;
+               }
+
+               // Get the content from the byte buffer specified by offset and length
+               byte[] bytes = new byte[len];
+               int j = 0;
+               for (int i = 0 ; i < len ; i++) {
+                   bytes[j++] = b[off + i];
+               }
+
+               queue.add(bytes);
+               queue.notifyAll();
+        }
+    }
+
+    /**
+     * Allow for processing of data from byte stream from the terminal before
+     * it is written to the output stream. If the returned byte array is different
+     * than the one that was passed in with the bytes argument, then the
+     * length value will be adapted.
+     *
+     * @param bytes The byte stream. Must not be <code>null</code>.
+     * @param off The offset.
+     * @param len the length.
+     *
+     * @return The processed byte stream.
+     *
+     */
+    protected byte[] onWriteContentToStream(byte[] bytes, int off, int len) {
+       Assert.isNotNull(bytes);
+
+       if (replacement != NO_CHANGE && len > 0) {
+               String origText = new String(bytes, off, len);
+               String text = null;
+               //
+               // TODO: check whether this is correct! new String(byte[], int, int) always uses the default
+               //       encoding!
+
+               if (replacement == CHANGE_CR_TO_LF) {
+                       text = origText.replace('\r', '\n');
+               }
+               else if (replacement == INSERT_LF_AFTER_CR) {
+                       text = origText.replaceAll("\r\n|\r", "\r\n"); //$NON-NLS-1$ //$NON-NLS-2$
+               }
+               else if (replacement == REMOVE_CR) {
+                       text = origText.replaceAll(ILineSeparatorConstants.LINE_SEPARATOR_CR, ""); //$NON-NLS-1$
+               }
+               else if (replacement == REMOVE_LF) {
+                       text = origText.replaceAll(ILineSeparatorConstants.LINE_SEPARATOR_LF, ""); //$NON-NLS-1$
+               }
+
+               if (text != null && !origText.equals(text)) {
+                       bytes = text.getBytes();
+               }
+       }
+
+       return bytes;
+    }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/OutputStreamMonitor.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/OutputStreamMonitor.java
new file mode 100644 (file)
index 0000000..b922210
--- /dev/null
@@ -0,0 +1,318 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.streams;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ILineSeparatorConstants;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.tracing.ITraceIds;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.ui.services.IDisposable;
+
+/**
+ * Output stream monitor implementation.
+ * <p>
+ * <b>Note:</b> The output is going <i>to</i> the terminal. Therefore, the output
+ * stream monitor is attached to the stdout and/or stderr stream of the monitored
+ * (remote) process.
+ */
+public class OutputStreamMonitor implements IDisposable {
+       // The default buffer size to use
+    private static final int BUFFER_SIZE = 8192;
+
+    // Reference to the parent terminal control
+    private final ITerminalControl terminalControl;
+
+       // Reference to the monitored (input) stream
+    private final InputStream stream;
+
+    // The line separator used by the monitored (input) stream
+    private final String lineSeparator;
+
+    // Reference to the thread reading the stream
+    private Thread thread;
+
+    // Flag to mark the monitor disposed. When disposed,
+    // no further data is read from the monitored stream.
+    private boolean disposed;
+
+    // A list of object to dispose if this monitor is disposed
+    private final List<IDisposable> disposables = new ArrayList<IDisposable>();
+
+       // The list of registered listener
+       private final ListenerList listeners;
+
+    /**
+     * Constructor.
+     *
+     * @param terminalControl The parent terminal control. Must not be <code>null</code>.
+     * @param stream The stream. Must not be <code>null</code>.
+        * @param lineSeparator The line separator used by the stream.
+     */
+       public OutputStreamMonitor(ITerminalControl terminalControl, InputStream stream, String lineSeparator) {
+       super();
+
+       Assert.isNotNull(terminalControl);
+       this.terminalControl = terminalControl;
+       Assert.isNotNull(stream);
+        this.stream = new BufferedInputStream(stream, BUFFER_SIZE);
+
+        this.lineSeparator = lineSeparator;
+
+        this.listeners = new ListenerList();
+    }
+
+       /**
+        * Register a streams data receiver listener.
+        *
+        * @param listener The listener. Must not be <code>null</code>.
+        */
+       public final void addListener(ITerminalServiceOutputStreamMonitorListener listener) {
+               Assert.isNotNull(listener);
+               listeners.add(listener);
+       }
+
+       /**
+        * Unregister a streams data receiver listener.
+        *
+        * @param listener The listener. Must not be <code>null</code>.
+        */
+       public final void removeListener(ITerminalServiceOutputStreamMonitorListener listener) {
+               Assert.isNotNull(listener);
+               listeners.remove(listener);
+       }
+
+       /**
+        * Adds the given disposable object to the list. The method will do nothing
+        * if either the disposable object is already part of the list or the monitor
+        * is disposed.
+        *
+        * @param disposable The disposable object. Must not be <code>null</code>.
+        */
+       public final void addDisposable(IDisposable disposable) {
+               Assert.isNotNull(disposable);
+               if (!disposed && !disposables.contains(disposable)) disposables.add(disposable);
+       }
+
+       /**
+        * Removes the disposable object from the list.
+        *
+        * @param disposable The disposable object. Must not be <code>null</code>.
+        */
+       public final void removeDisposable(IDisposable disposable) {
+               Assert.isNotNull(disposable);
+               disposables.remove(disposable);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.services.IDisposable#dispose()
+        */
+    @Override
+       public void dispose() {
+               // If already disposed --> return immediately
+               if (disposed) return;
+
+               // Mark the monitor disposed
+       disposed = true;
+
+        // Close the stream (ignore exceptions on close)
+        try { stream.close(); } catch (IOException e) { /* ignored on purpose */ }
+
+        // Dispose all registered disposable objects
+        for (IDisposable disposable : disposables) disposable.dispose();
+        // Clear the list
+        disposables.clear();
+    }
+
+    /**
+     * Starts the terminal output stream monitor.
+     */
+    protected void startMonitoring() {
+       // If already initialized -> return immediately
+       if (thread != null) return;
+
+       // Create a new runnable which is constantly reading from the stream
+       Runnable runnable = new Runnable() {
+               @Override
+                       public void run() {
+                       readStream();
+               }
+       };
+
+       // Create the reader thread
+       thread = new Thread(runnable, "Terminal Output Stream Monitor Thread"); //$NON-NLS-1$
+
+       // Configure the reader thread
+        thread.setDaemon(true);
+        thread.setPriority(Thread.MIN_PRIORITY);
+
+        // Start the processing
+        thread.start();
+    }
+
+    /**
+     * Returns the terminal control that this stream monitor is associated with.
+     */
+    protected ITerminalControl getTerminalControl() {
+        return terminalControl;
+    }
+
+    /**
+     * Reads from the output stream and write the read content
+     * to the terminal control output stream.
+     */
+    void readStream() {
+       // Creates the read buffer
+        byte[] readBuffer = new byte[BUFFER_SIZE];
+
+        // We need to maintain UI responsiveness but still stream the content
+        // to the terminal control fast. Put the thread to a short sleep each second.
+        long sleepMarker = System.currentTimeMillis();
+
+        // Read from the stream until EOS is reached or the
+        // monitor is marked disposed.
+        int read = 0;
+        while (read >= 0 && !disposed) {
+            try {
+                               // Read from the stream
+                               read = stream.read(readBuffer);
+                               // If some data has been read, append to the terminal
+                               // control output stream
+                               if (read > 0) {
+                                       // Allow for post processing the read content before appending
+                    byte[] processedReadBuffer = onContentReadFromStream(readBuffer, read);
+                                   if (processedReadBuffer != readBuffer) {
+                                       read = processedReadBuffer.length;
+                                   }
+                                       terminalControl.getRemoteToTerminalOutputStream().write(processedReadBuffer, 0, read);
+                               }
+            } catch (IOException e) {
+               // IOException received. If this is happening when already disposed -> ignore
+                               if (!disposed) {
+                                       IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
+                                                                                               NLS.bind(Messages.OutputStreamMonitor_error_readingFromStream, e.getLocalizedMessage()), e);
+                                       UIPlugin.getDefault().getLog().log(status);
+                               }
+                break;
+            } catch (NullPointerException e) {
+                               // killing the stream monitor while reading can cause an NPE
+                               // when reading from the stream
+                               if (!disposed && thread != null) {
+                                       IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
+                                                                                               NLS.bind(Messages.OutputStreamMonitor_error_readingFromStream, e.getLocalizedMessage()), e);
+                                       UIPlugin.getDefault().getLog().log(status);
+                               }
+                               break;
+            }
+
+            // See above -> Thread will go to sleep each second
+            if (System.currentTimeMillis() - sleepMarker > 1000) {
+               sleepMarker = System.currentTimeMillis();
+                try { Thread.sleep(1); } catch (InterruptedException e) { /* ignored on purpose */ }
+            }
+        }
+
+        // Dispose ourself
+        dispose();
+    }
+
+    /**
+     * Allow for processing of data from byte stream after it is read from
+     * client but before it is appended to the terminal. If the returned byte
+     * array is different than the one that was passed in with the byteBuffer
+     * argument, then the bytesRead value will be ignored and the full
+     * returned array will be written out.
+     *
+     * @param byteBuffer The byte stream. Must not be <code>null</code>.
+     * @param bytesRead The number of bytes that were read into the read buffer.
+     * @return The processed byte stream.
+     *
+     */
+    protected byte[] onContentReadFromStream(byte[] byteBuffer, int bytesRead) {
+       Assert.isNotNull(byteBuffer);
+
+       // If tracing is enabled, print out the decimal byte values read
+       if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_OUTPUT_STREAM_MONITOR)) {
+               StringBuilder debug = new StringBuilder("byteBuffer [decimal, " + bytesRead + " bytes] : "); //$NON-NLS-1$ //$NON-NLS-2$
+               for (int i = 0; i < bytesRead; i++) {
+                       debug.append(Byte.valueOf(byteBuffer[i]).intValue());
+                       debug.append(' ');
+               }
+               System.out.println(debug.toString());
+       }
+
+       // Remember if the text got changed.
+       boolean changed = false;
+
+       // How can me make sure that we don't mess with the encoding here?
+               String text = new String(byteBuffer, 0, bytesRead);
+
+               // Shift-In (14) and Shift-Out(15) confuses the terminal widget
+               if (text.indexOf(14) != -1 || text.indexOf(15) != -1) {
+                       text = text.replaceAll("\\x0e", "").replaceAll("\\x0f", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+                       changed = true;
+               }
+
+               // Check on the line separator setting
+       if (lineSeparator != null
+                       && !ILineSeparatorConstants.LINE_SEPARATOR_CRLF.equals(lineSeparator)) {
+               String separator = ILineSeparatorConstants.LINE_SEPARATOR_LF.equals(lineSeparator) ? "\n" : "\r"; //$NON-NLS-1$ //$NON-NLS-2$
+               String separator2 = ILineSeparatorConstants.LINE_SEPARATOR_LF.equals(lineSeparator) ? "\r" : "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+
+               if (text.indexOf(separator) != -1) {
+                       String[] fragments = text.split(separator);
+                       StringBuilder b = new StringBuilder();
+                       for (int i = 0; i < fragments.length; i++) {
+                               String fragment = fragments[i];
+                               String nextFragment = i + 1 < fragments.length ? fragments[i + 1] : null;
+                               b.append(fragment);
+                               if (fragment.endsWith(separator2) || (nextFragment != null && nextFragment.startsWith(separator2))) {
+                                       // Both separators are found, just add the original separator
+                                       b.append(separator);
+                               } else {
+                                       b.append("\n\r"); //$NON-NLS-1$
+                               }
+                       }
+                       if (!text.equals(b.toString())) {
+                               text = b.toString();
+                               changed = true;
+                       }
+               }
+       }
+
+       // If changed, get the new bytes array
+       if (changed) {
+               byteBuffer = text.getBytes();
+               bytesRead = byteBuffer.length;
+       }
+
+       // If listeners are registered, invoke the listeners now.
+       if (listeners.size() > 0) {
+               for (Object candidate : listeners.getListeners()) {
+                       if (!(candidate instanceof ITerminalServiceOutputStreamMonitorListener)) continue;
+                       ((ITerminalServiceOutputStreamMonitorListener)candidate).onContentReadFromStream(byteBuffer, bytesRead);
+               }
+       }
+
+       return byteBuffer;
+    }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/StreamsConnector.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/StreamsConnector.java
new file mode 100644 (file)
index 0000000..299ee0c
--- /dev/null
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.streams;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.NullSettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.ui.services.IDisposable;
+
+/**
+ * Streams connector implementation.
+ */
+public class StreamsConnector extends AbstractStreamsConnector implements IDisposable {
+       // Reference to the streams settings
+       private final StreamsSettings settings;
+
+       /**
+        * Constructor.
+        */
+       public StreamsConnector() {
+               this(new StreamsSettings());
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param settings The streams settings. Must not be <code>null</code>
+        */
+       public StreamsConnector(StreamsSettings settings) {
+               super();
+
+               Assert.isNotNull(settings);
+               this.settings = settings;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#connect(org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl)
+        */
+       @Override
+       public void connect(ITerminalControl control) {
+               Assert.isNotNull(control);
+               super.connect(control);
+
+               // Setup the listeners
+               setStdoutListeners(settings.getStdOutListeners());
+               setStderrListeners(settings.getStdErrListeners());
+
+               // connect the streams
+               connectStreams(control, settings.getStdinStream(), settings.getStdoutStream(), settings.getStderrStream(), settings.isLocalEcho(), settings.getLineSeparator());
+
+               // Set the terminal control state to CONNECTED
+               control.setState(TerminalState.CONNECTED);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#isLocalEcho()
+        */
+       @Override
+       public boolean isLocalEcho() {
+               return settings.isLocalEcho();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.services.IDisposable#dispose()
+        */
+       @Override
+       public void dispose() {
+               disconnect();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.streams.AbstractStreamsConnector#doDisconnect()
+        */
+       @Override
+       public void doDisconnect() {
+               // Dispose the streams
+               super.doDisconnect();
+
+               // Set the terminal control state to CLOSED.
+               fControl.setState(TerminalState.CLOSED);
+       }
+
+       // ***** Process Connector settings handling *****
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#getSettingsSummary()
+        */
+       @Override
+       public String getSettingsSummary() {
+               return ""; //$NON-NLS-1$
+       }
+
+       @Override
+       public void setDefaultSettings() {
+           settings.load(new NullSettingsStore());
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#load(org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore)
+        */
+       @Override
+       public void load(ISettingsStore store) {
+               settings.load(store);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl#save(org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore)
+        */
+       @Override
+       public void save(ISettingsStore store) {
+               settings.save(store);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/StreamsLauncherDelegate.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/StreamsLauncherDelegate.java
new file mode 100644 (file)
index 0000000..d9febb5
--- /dev/null
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.streams;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
+import org.eclipse.tm.terminal.view.core.TerminalServiceFactory;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel;
+import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer;
+import org.eclipse.tm.terminal.view.ui.internal.SettingsStore;
+import org.eclipse.tm.terminal.view.ui.launcher.AbstractLauncherDelegate;
+
+/**
+ * Streams launcher delegate implementation.
+ */
+public class StreamsLauncherDelegate extends AbstractLauncherDelegate {
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#needsUserConfiguration()
+        */
+       @Override
+       public boolean needsUserConfiguration() {
+               return false;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#getPanel(org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer)
+        */
+       @Override
+       public IConfigurationPanel getPanel(IConfigurationPanelContainer container) {
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#execute(java.util.Map, org.eclipse.tm.terminal.view.core.interfaces.ITerminalService.Done)
+        */
+       @Override
+       public void execute(Map<String, Object> properties, ITerminalService.Done done) {
+               Assert.isNotNull(properties);
+
+               // Get the terminal service
+               ITerminalService terminal = TerminalServiceFactory.getService();
+               // If not available, we cannot fulfill this request
+               if (terminal != null) {
+                       terminal.openConsole(properties, done);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate#createTerminalConnector(java.util.Map)
+        */
+    @Override
+       public ITerminalConnector createTerminalConnector(Map<String, Object> properties) {
+               Assert.isNotNull(properties);
+
+       // Check for the terminal connector id
+       String connectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
+               if (connectorId == null) connectorId = "org.eclipse.tm.terminal.connector.streams.StreamsConnector"; //$NON-NLS-1$
+
+               // Extract the streams properties
+               OutputStream stdin = (OutputStream)properties.get(ITerminalsConnectorConstants.PROP_STREAMS_STDIN);
+               InputStream stdout = (InputStream)properties.get(ITerminalsConnectorConstants.PROP_STREAMS_STDOUT);
+               InputStream stderr = (InputStream)properties.get(ITerminalsConnectorConstants.PROP_STREAMS_STDERR);
+               Object value = properties.get(ITerminalsConnectorConstants.PROP_LOCAL_ECHO);
+               boolean localEcho =  value instanceof Boolean ? ((Boolean)value).booleanValue() : false;
+               String lineSeparator = (String)properties.get(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR);
+               ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[])properties.get(ITerminalsConnectorConstants.PROP_STDOUT_LISTENERS);
+               ITerminalServiceOutputStreamMonitorListener[] stderrListeners = (ITerminalServiceOutputStreamMonitorListener[])properties.get(ITerminalsConnectorConstants.PROP_STDERR_LISTENERS);
+
+               // Construct the terminal settings store
+               ISettingsStore store = new SettingsStore();
+
+               // Construct the streams settings
+               StreamsSettings streamsSettings = new StreamsSettings();
+               streamsSettings.setStdinStream(stdin);
+               streamsSettings.setStdoutStream(stdout);
+               streamsSettings.setStderrStream(stderr);
+               streamsSettings.setLocalEcho(localEcho);
+               streamsSettings.setLineSeparator(lineSeparator);
+               streamsSettings.setStdOutListeners(stdoutListeners);
+               streamsSettings.setStdErrListeners(stderrListeners);
+               // And save the settings to the store
+               streamsSettings.save(store);
+
+               // Construct the terminal connector instance
+               ITerminalConnector connector = TerminalConnectorExtension.makeTerminalConnector(connectorId);
+               if (connector != null) {
+                       // Apply default settings
+                       connector.setDefaultSettings();
+                       // And load the real settings
+                       connector.load(store);
+               }
+
+               return connector;
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/StreamsSettings.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/streams/StreamsSettings.java
new file mode 100644 (file)
index 0000000..f794ef5
--- /dev/null
@@ -0,0 +1,201 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.streams;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalServiceOutputStreamMonitorListener;
+import org.eclipse.tm.terminal.view.ui.internal.SettingsStore;
+
+/**
+ * Streams connector settings implementation.
+ */
+public class StreamsSettings {
+       // Reference to the stdin stream
+       private OutputStream stdin;
+       // Reference to the stdout stream
+       private InputStream stdout;
+       // Reference to the stderr stream
+       private InputStream stderr;
+       // Flag to control the local echo
+       private boolean localEcho = true;
+       // The line separator setting
+       private String lineSeparator = null;
+    // The list of stdout output listeners
+    private ITerminalServiceOutputStreamMonitorListener[] stdoutListeners = null;
+    // The list of stderr output listeners
+    private ITerminalServiceOutputStreamMonitorListener[] stderrListeners = null;
+
+       /**
+        * Sets the stdin stream instance.
+        *
+        * @param stdin The stream instance or <code>null</code>.
+        */
+       public void setStdinStream(OutputStream stdin) {
+               this.stdin = stdin;
+       }
+
+       /**
+        * Returns the stdin stream instance.
+        *
+        * @return The stream instance or <code>null</code>.
+        */
+       public OutputStream getStdinStream() {
+               return stdin;
+       }
+
+       /**
+        * Sets the stdout stream instance.
+        *
+        * @param stdout The stream instance or <code>null</code>.
+        */
+       public void setStdoutStream(InputStream stdout) {
+               this.stdout = stdout;
+       }
+
+       /**
+        * Returns the stdout stream instance.
+        *
+        * @return The stream instance or <code>null</code>.
+        */
+       public InputStream getStdoutStream() {
+               return stdout;
+       }
+
+       /**
+        * Sets the stderr stream instance.
+        *
+        * @param stderr The stream instance or <code>null</code>.
+        */
+       public void setStderrStream(InputStream stderr) {
+               this.stderr = stderr;
+       }
+
+       /**
+        * Returns the stderr stream instance.
+        *
+        * @return The stream instance or <code>null</code>.
+        */
+       public InputStream getStderrStream() {
+               return stderr;
+       }
+
+       /**
+        * Sets if the process requires a local echo from the terminal widget.
+        *
+        * @param value Specify <code>true</code> to enable the local echo, <code>false</code> otherwise.
+        */
+       public void setLocalEcho(boolean value) {
+               this.localEcho = value;
+       }
+
+       /**
+        * Returns <code>true</code> if the process requires a local echo
+        * from the terminal widget.
+        *
+        * @return <code>True</code> if local echo is enabled, <code>false</code> otherwise.
+        */
+       public boolean isLocalEcho() {
+               return localEcho;
+       }
+
+       /**
+        * Sets the stream line separator.
+        *
+        * @param separator The stream line separator <code>null</code>.
+        */
+       public void setLineSeparator(String separator) {
+               this.lineSeparator = separator;
+       }
+
+       /**
+        * Returns the stream line separator.
+        *
+        * @return The stream line separator or <code>null</code>.
+        */
+       public String getLineSeparator() {
+               return lineSeparator;
+       }
+
+       /**
+        * Sets the list of stdout listeners.
+        *
+        * @param listeners The list of stdout listeners or <code>null</code>.
+        */
+       public void setStdOutListeners(ITerminalServiceOutputStreamMonitorListener[] listeners) {
+               this.stdoutListeners = listeners;
+       }
+
+       /**
+        * Returns the list of stdout listeners.
+        *
+        * @return The list of stdout listeners or <code>null</code>.
+        */
+       public ITerminalServiceOutputStreamMonitorListener[] getStdOutListeners() {
+               return stdoutListeners;
+       }
+
+       /**
+        * Sets the list of stderr listeners.
+        *
+        * @param listeners The list of stderr listeners or <code>null</code>.
+        */
+       public void setStdErrListeners(ITerminalServiceOutputStreamMonitorListener[] listeners) {
+               this.stderrListeners = listeners;
+       }
+
+       /**
+        * Returns the list of stderr listeners.
+        *
+        * @return The list of stderr listeners or <code>null</code>.
+        */
+       public ITerminalServiceOutputStreamMonitorListener[] getStdErrListeners() {
+               return stderrListeners;
+       }
+
+       /**
+        * Loads the streams settings from the given settings store.
+        *
+        * @param store The settings store. Must not be <code>null</code>.
+        */
+       public void load(ISettingsStore store) {
+               Assert.isNotNull(store);
+               localEcho = Boolean.parseBoolean(store.get("LocalEcho", Boolean.FALSE.toString())); //$NON-NLS-1$
+               lineSeparator = store.get("LineSeparator", null); //$NON-NLS-1$
+               if (store instanceof SettingsStore) {
+                       stdin = (OutputStream)((SettingsStore)store).getSettings().get("stdin"); //$NON-NLS-1$
+                       stdout = (InputStream)((SettingsStore)store).getSettings().get("stdout"); //$NON-NLS-1$
+                       stderr = (InputStream)((SettingsStore)store).getSettings().get("stderr"); //$NON-NLS-1$
+                       stdoutListeners = (ITerminalServiceOutputStreamMonitorListener[])((SettingsStore)store).getSettings().get("StdOutListeners"); //$NON-NLS-1$
+                       stderrListeners = (ITerminalServiceOutputStreamMonitorListener[])((SettingsStore)store).getSettings().get("StdErrListeners"); //$NON-NLS-1$
+               }
+       }
+
+       /**
+        * Saves the process settings to the given settings store.
+        *
+        * @param store The settings store. Must not be <code>null</code>.
+        */
+       public void save(ISettingsStore store) {
+               Assert.isNotNull(store);
+               store.put("LocalEcho", Boolean.toString(localEcho)); //$NON-NLS-1$
+               store.put("LineSeparator", lineSeparator); //$NON-NLS-1$
+               if (store instanceof SettingsStore) {
+                       ((SettingsStore)store).getSettings().put("stdin", stdin); //$NON-NLS-1$
+                       ((SettingsStore)store).getSettings().put("stdout", stdout); //$NON-NLS-1$
+                       ((SettingsStore)store).getSettings().put("stderr", stderr); //$NON-NLS-1$
+                       ((SettingsStore)store).getSettings().put("StdOutListeners", stdoutListeners); //$NON-NLS-1$
+                       ((SettingsStore)store).getSettings().put("StdErrListeners", stderrListeners); //$NON-NLS-1$
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabCommandFieldHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabCommandFieldHandler.java
new file mode 100644 (file)
index 0000000..1ebda75
--- /dev/null
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.tabs;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.tm.internal.terminal.control.CommandInputFieldWithHistory;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.ui.services.IDisposable;
+
+/**
+ * Tab command input field handler implementation.
+ */
+public class TabCommandFieldHandler implements IDisposable, IAdaptable {
+       // Reference to the parent tab folder manager
+       private final TabFolderManager tabFolderManager;
+       // Reference to the associated tab
+       private final CTabItem item;
+
+       // Reference to the command input field
+       private CommandInputFieldWithHistory field;
+       // The command field history
+       private String history;
+
+       /**
+        * Constructor.
+        *
+        * @param tabFolderManager The parent tab folder manager. Must not be <code>null</code>
+        * @param item The associated tab item. Must not be <code>null</code>.
+        */
+       public TabCommandFieldHandler(TabFolderManager tabFolderManager, CTabItem item) {
+               Assert.isNotNull(tabFolderManager);
+               this.tabFolderManager = tabFolderManager;
+               Assert.isNotNull(item);
+               this.item = item;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.services.IDisposable#dispose()
+        */
+       @Override
+       public void dispose() {
+               field = null;
+               history = null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+        */
+       @SuppressWarnings({ "unchecked", "rawtypes" })
+       @Override
+       public Object getAdapter(Class adapter) {
+               if (TabFolderManager.class.equals(adapter)) {
+                       return tabFolderManager;
+               }
+               if (CTabItem.class.equals(adapter)) {
+                       return item;
+               }
+           return null;
+       }
+
+       /**
+        * Returns if or if not the associated tab item has the command input field enabled.
+        *
+        * @return <code>True</code> if the command input field is enabled, <code>false</code> otherwise.
+        */
+       public boolean hasCommandInputField() {
+               return field != null;
+       }
+
+       /**
+        * Set the command input field on or off.
+        *
+        * @param on <code>True</code> for on, <code>false</code> for off.
+        */
+       public void setCommandInputField(boolean on) {
+               // save the old history
+               if (field != null) {
+                       history = field.getHistory();
+                       field = null;
+               }
+
+               if (on) {
+                       field = new CommandInputFieldWithHistory(100);
+                       field.setHistory(history);
+               }
+
+               // Apply to the terminal control
+               Assert.isTrue(!item.isDisposed());
+               ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
+               if (terminal != null) terminal.setCommandInputField(field);
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabDisposeListener.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabDisposeListener.java
new file mode 100644 (file)
index 0000000..cdb5d2f
--- /dev/null
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.tabs;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.terminal.view.core.TerminalServiceFactory;
+import org.eclipse.tm.terminal.view.core.interfaces.ITerminalService;
+import org.eclipse.tm.terminal.view.ui.services.TerminalService;
+
+/**
+ * Terminal tab default dispose listener implementation.
+ */
+public class TabDisposeListener implements DisposeListener {
+       private final TabFolderManager parentTabFolderManager;
+
+       /**
+        * Constructor.
+        *
+        * @param parentTabFolderManager The parent tab folder manager. Must not be <code>null</code>
+        */
+       public TabDisposeListener(TabFolderManager parentTabFolderManager) {
+               Assert.isNotNull(parentTabFolderManager);
+               this.parentTabFolderManager = parentTabFolderManager;
+       }
+
+       /**
+        * Returns the parent terminal console tab folder manager instance.
+        *
+        * @return The parent terminal console tab folder manager instance.
+        */
+       protected final TabFolderManager getParentTabFolderManager() {
+               return parentTabFolderManager;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+        */
+       @Override
+       public void widgetDisposed(DisposeEvent e) {
+               // If a tab item gets disposed, we have to dispose the terminal as well
+               if (e.getSource() instanceof CTabItem) {
+                       // Get the terminal control (if any) from the tab item
+                       Object candidate = ((CTabItem)e.getSource()).getData();
+                       if (candidate instanceof ITerminalViewControl) {
+                               ITerminalViewControl terminal = (ITerminalViewControl)candidate;
+                               // Keep the context menu from being disposed
+                               terminal.getControl().setMenu(null);
+                               terminal.disposeTerminal();
+                       }
+                       // Dispose the command input field handler
+                       parentTabFolderManager.disposeTabCommandFieldHandler((CTabItem)e.getSource());
+                       // Dispose the tab item control
+                       Control control = ((CTabItem) e.getSource()).getControl();
+                       if (control != null) control.dispose();
+
+                       // If all items got removed, we have to switch back to the empty page control
+                       if (parentTabFolderManager.getTabFolder() != null && parentTabFolderManager.getTabFolder().getItemCount() == 0) {
+                               parentTabFolderManager.getParentView().switchToEmptyPageControl();
+                       }
+                       // Fire selection changed event
+                       parentTabFolderManager.fireSelectionChanged();
+                       // Fire the terminal console disposed event
+                       ITerminalService service = TerminalServiceFactory.getService();
+                       if (service instanceof TerminalService) {
+                               ((TerminalService)service).fireTerminalTabEvent(TerminalService.TAB_DISPOSED, e.getSource(), ((CTabItem)e.getSource()).getData("customData")); //$NON-NLS-1$
+                       }
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderManager.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderManager.java
new file mode 100644 (file)
index 0000000..41e120b
--- /dev/null
@@ -0,0 +1,858 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.tabs;
+
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.tm.internal.terminal.control.ITerminalListener;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.control.TerminalViewControlFactory;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
+import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
+import org.eclipse.tm.terminal.view.ui.interfaces.ImageConsts;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Terminal tab folder manager.
+ */
+public class TabFolderManager extends PlatformObject implements ISelectionProvider {
+       // Reference to the parent terminal consoles view
+       private final ITerminalsView parentView;
+       // Reference to the selection listener instance
+       private final SelectionListener selectionListener;
+
+       /**
+        * List of selection changed listeners.
+        */
+       private final List<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+       /**
+        * Map of tab command input field handler per tab item
+        */
+       private final Map<CTabItem, TabCommandFieldHandler> commandFieldHandler = new HashMap<CTabItem, TabCommandFieldHandler>();
+
+       /**
+        * The terminal control selection listener implementation.
+        */
+       private class TerminalControlSelectionListener implements DisposeListener, MouseListener {
+               private final ITerminalViewControl terminal;
+               private boolean selectMode;
+
+               /**
+                * Constructor.
+                *
+                * @param terminal The terminal control. Must not be <code>null</code>.
+                */
+               public TerminalControlSelectionListener(ITerminalViewControl terminal) {
+                       Assert.isNotNull(terminal);
+                       this.terminal = terminal;
+
+                       // Register ourself as the required listener
+                       terminal.getControl().addDisposeListener(this);
+                       terminal.getControl().addMouseListener(this);
+               }
+
+               /**
+                * Returns the associated terminal view control.
+                *
+                * @return The terminal view control.
+                */
+               protected final ITerminalViewControl getTerminal() {
+                       return terminal;
+               }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+                */
+               @Override
+               public void widgetDisposed(DisposeEvent e) {
+                       // Widget got disposed, check if it is ours
+                       // If a tab item gets disposed, we have to dispose the terminal as well
+                       if (e.getSource().equals(terminal.getControl())) {
+                               // Remove as listener
+                               getTerminal().getControl().removeDisposeListener(this);
+                               getTerminal().getControl().removeMouseListener(this);
+                       }
+               }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.swt.events.MouseListener#mouseDown(org.eclipse.swt.events.MouseEvent)
+                */
+               @Override
+               public void mouseDown(MouseEvent e) {
+                       // Left button down -> select mode starts
+                       if (e.button == 1) selectMode = true;
+               }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.swt.events.MouseListener#mouseUp(org.eclipse.swt.events.MouseEvent)
+                */
+               @Override
+               public void mouseUp(MouseEvent e) {
+                       if (e.button == 1 && selectMode) {
+                               selectMode = false;
+                               // Fire a selection changed event with the terminal controls selection
+                       try {
+                           Display display = PlatformUI.getWorkbench().getDisplay();
+                           display.asyncExec(new Runnable() {
+                                               @Override
+                                               public void run() {
+                                                       fireSelectionChanged(new StructuredSelection(getTerminal().getSelection()));
+                                               }
+                                       });
+                       }
+                       catch (Exception ex) {
+                           // if display is disposed, silently ignore.
+                       }
+                       }
+               }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.swt.events.MouseListener#mouseDoubleClick(org.eclipse.swt.events.MouseEvent)
+                */
+               @Override
+               public void mouseDoubleClick(MouseEvent e) {
+               }
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param parentView The parent terminals console view. Must not be <code>null</code>.
+        */
+       public TabFolderManager(ITerminalsView parentView) {
+               super();
+               Assert.isNotNull(parentView);
+               this.parentView = parentView;
+
+               // Attach a selection listener to the tab folder
+               selectionListener = doCreateTabFolderSelectionListener(this);
+               if (getTabFolder() != null) getTabFolder().addSelectionListener(selectionListener);
+       }
+
+       /**
+        * Creates the terminal console tab folder selection listener instance.
+        *
+        * @param parent The parent terminal console tab folder manager. Must not be <code>null</code>.
+        * @return The selection listener instance.
+        */
+       protected TabFolderSelectionListener doCreateTabFolderSelectionListener(TabFolderManager parent) {
+               Assert.isNotNull(parent);
+               return new TabFolderSelectionListener(parent);
+       }
+
+       /**
+        * Returns the parent terminal consoles view.
+        *
+        * @return The terminal consoles view instance.
+        */
+       protected final ITerminalsView getParentView() {
+               return parentView;
+       }
+
+       /**
+        * Returns the tab folder associated with the parent view.
+        *
+        * @return The tab folder or <code>null</code>.
+        */
+       @SuppressWarnings("cast")
+    protected final CTabFolder getTabFolder() {
+               return (CTabFolder) getParentView().getAdapter(CTabFolder.class);
+       }
+
+       /**
+        * Returns the selection changed listeners currently registered.
+        *
+        * @return The registered selection changed listeners or an empty array.
+        */
+       protected final ISelectionChangedListener[] getSelectionChangedListeners() {
+               return selectionChangedListeners.toArray(new ISelectionChangedListener[selectionChangedListeners.size()]);
+       }
+
+       /**
+        * Dispose the tab folder manager instance.
+        */
+       public void dispose() {
+               // Dispose the selection listener
+               if (getTabFolder() != null && !getTabFolder().isDisposed()) getTabFolder().removeSelectionListener(selectionListener);
+               // Dispose the tab command field handler
+               for (TabCommandFieldHandler handler : commandFieldHandler.values()) {
+                       handler.dispose();
+               }
+               commandFieldHandler.clear();
+       }
+
+       /**
+        * Creates a new tab item with the given title and connector.
+        *
+        * @param title The tab title. Must not be <code>null</code>.
+        * @param encoding The terminal encoding or <code>null</code>.
+        * @param connector The terminal connector. Must not be <code>null</code>.
+        * @param data The custom terminal data node or <code>null</code>.
+        * @param flags The flags controlling how the console is opened or <code>null</code> to use defaults.
+        *
+        * @return The created tab item or <code>null</code> if failed.
+        */
+       @SuppressWarnings({ "unused", "cast" })
+       public CTabItem createTabItem(String title, String encoding, ITerminalConnector connector, Object data, Map<String, Boolean> flags) {
+               Assert.isNotNull(title);
+               Assert.isNotNull(connector);
+
+               // The result tab item
+               CTabItem item = null;
+
+               // Get the tab folder from the parent viewer
+               CTabFolder tabFolder = getTabFolder();
+               if (tabFolder != null) {
+                       // Generate a unique title string for the new tab item (must be called before creating the item itself)
+                       title = makeUniqueTitle(title, tabFolder);
+                       // Create the tab item
+                       item = new CTabItem(tabFolder, SWT.CLOSE);
+                       // Set the tab item title
+                       item.setText(title);
+                       // Set the tab icon
+                       Image image = getTabItemImage(connector, data);
+                       if (image != null) item.setImage(image);
+
+                       // Setup the tab item listeners
+                       setupTerminalTabListeners(item);
+
+                       // Create the composite to create the terminal control within
+                       Composite composite = new Composite(tabFolder, SWT.NONE);
+                       composite.setLayout(new FillLayout());
+                       // Associate the composite with the tab item
+                       item.setControl(composite);
+
+                       // Refresh the layout
+                       tabFolder.getParent().layout(true);
+
+                       // Create the terminal control
+                       ITerminalViewControl terminal = TerminalViewControlFactory.makeControl(doCreateTerminalTabTerminalListener(this, item), composite, new ITerminalConnector[] { connector }, true);
+                       if (terminal instanceof ITerminalControl) {
+                               Object value = flags != null ? flags.get(ITerminalsConnectorConstants.PROP_DATA_NO_RECONNECT) : null;
+                               boolean noReconnect = value instanceof Boolean ? ((Boolean)value).booleanValue() : false;
+                               ((ITerminalControl)terminal).setConnectOnEnterIfClosed(!noReconnect);
+                       }
+
+                       // Add middle mouse button paste support
+                       addMiddleMouseButtonPasteSupport(terminal);
+                       // Add the "selection" listener to the terminal control
+                       new TerminalControlSelectionListener(terminal);
+                       // Configure the terminal encoding
+                       try { terminal.setEncoding(encoding); } catch (UnsupportedEncodingException e) { /* ignored on purpose */ }
+                       // Associated the terminal with the tab item
+                       item.setData(terminal);
+                       // Associated the custom data node with the tab item (if any)
+                       if (data != null) item.setData("customData", data); //$NON-NLS-1$
+
+                       // Overwrite the text canvas help id
+                       String contextHelpId = getParentView().getContextHelpId();
+                       if (contextHelpId != null) {
+                               PlatformUI.getWorkbench().getHelpSystem().setHelp(terminal.getControl(), contextHelpId);
+                       }
+
+                       // Set the context menu
+                       TabFolderMenuHandler menuHandler = (TabFolderMenuHandler) getParentView().getAdapter(TabFolderMenuHandler.class);
+                       if (menuHandler != null) {
+                               Menu menu = (Menu)menuHandler.getAdapter(Menu.class);
+                               if (menu != null) {
+                                       // One weird occurrence of IllegalArgumentException: Widget has wrong parent.
+                                       // Inspecting the code, this seem extremely unlikely. The terminal is created
+                                       // from a composite parent, the composite parent from the tab folder and the menu
+                                       // from the tab folder. Means, at the end all should have the same menu shell, shouldn't they?
+                                       try {
+                                               terminal.getControl().setMenu(menu);
+                                       } catch (IllegalArgumentException e) {
+                                               // Log exception only if debug mode is set to 1.
+                                               if (UIPlugin.getTraceHandler().isSlotEnabled(1, null)) {
+                                                       e.printStackTrace();
+                                               }
+                                       }
+                               }
+                       }
+
+                       // Select the created item within the tab folder
+                       tabFolder.setSelection(item);
+
+                       // Set the connector
+                       terminal.setConnector(connector);
+
+                       // And connect the terminal
+                       terminal.connectTerminal();
+
+                       // Fire selection changed event
+                       fireSelectionChanged();
+               }
+
+               // Return the create tab item finally.
+               return item;
+       }
+
+       /**
+        * Used for DnD of terminal tab items between terminal views
+        * <p>
+        * Create a new tab item in the "dropped" terminal view using the
+        * information stored in the given item.
+        *
+        * @param oldItem The old dragged tab item. Must not be <code>null</code>.
+        * @return The new dropped tab item.
+        */
+       @SuppressWarnings({ "unchecked", "cast" })
+    public CTabItem cloneTabItemAfterDrop(CTabItem oldItem) {
+               Assert.isNotNull(oldItem);
+
+               ITerminalViewControl terminal = (ITerminalViewControl)oldItem.getData();
+               ITerminalConnector connector = terminal.getTerminalConnector();
+               Object data = oldItem.getData("customData"); //$NON-NLS-1$
+               Map<String, Object> properties = (Map<String, Object>)oldItem.getData("properties"); //$NON-NLS-1$
+               String title = oldItem.getText();
+
+               // The result tab item
+               CTabItem item = null;
+
+               // Get the tab folder from the parent viewer
+               CTabFolder tabFolder = getTabFolder();
+               if (tabFolder != null) {
+                       // Generate a unique title string for the new tab item (must be called before creating the item itself)
+                       title = makeUniqueTitle(title, tabFolder);
+                       // Create the tab item
+                       item = new CTabItem(tabFolder, SWT.CLOSE);
+                       // Set the tab item title
+                       item.setText(title);
+                       // Set the tab icon
+                       Image image = getTabItemImage(connector, data);
+                       if (image != null) item.setImage(image);
+
+                       // Setup the tab item listeners
+                       setupTerminalTabListeners(item);
+                       // Move the terminal listener to the new item
+                       TabTerminalListener.move(oldItem, item);
+
+                       // Create the composite to create the terminal control within
+                       Composite composite = new Composite(tabFolder, SWT.NONE);
+                       composite.setLayout(new FillLayout());
+                       // Associate the composite with the tab item
+                       item.setControl(composite);
+
+                       // Refresh the layout
+                       tabFolder.getParent().layout(true);
+
+                       // Remember terminal state
+                       TerminalState oldState = terminal.getState();
+
+                       // Keep the context menu from being disposed
+                       terminal.getControl().setMenu(null);
+
+                       // change the "parent".
+                       Assert.isTrue(terminal instanceof ITerminalControl);
+                       ((ITerminalControl)terminal).setupTerminal(composite);
+
+                       // Add middle mouse button paste support
+                       addMiddleMouseButtonPasteSupport(terminal);
+
+                       item.setData(terminal);
+
+                       // Associate the custom data node with the tab item (if any)
+                       if (data != null) item.setData("customData", data); //$NON-NLS-1$
+                       // Associate the properties with the tab item (if any)
+                       if (properties != null) item.setData("properties", properties); //$NON-NLS-1$
+
+                       // Overwrite the text canvas help id
+                       String contextHelpId = getParentView().getContextHelpId();
+                       if (contextHelpId != null) {
+                               PlatformUI.getWorkbench().getHelpSystem().setHelp(terminal.getControl(), contextHelpId);
+                       }
+
+                       // Set the context menu
+                       TabFolderMenuHandler menuHandler = (TabFolderMenuHandler) getParentView().getAdapter(TabFolderMenuHandler.class);
+                       if (menuHandler != null) {
+                               Menu menu = (Menu)menuHandler.getAdapter(Menu.class);
+                               if (menu != null) {
+                                       // One weird occurrence of IllegalArgumentException: Widget has wrong parent.
+                                       // Inspecting the code, this seem extremely unlikely. The terminal is created
+                                       // from a composite parent, the composite parent from the tab folder and the menu
+                                       // from the tab folder. Means, at the end all should have the same menu shell, shouldn't they?
+                                       try {
+                                               terminal.getControl().setMenu(menu);
+                                       } catch (IllegalArgumentException e) {
+                                               // Log exception only if debug mode is set to 1.
+                                               if (UIPlugin.getTraceHandler().isSlotEnabled(1, null)) {
+                                                       e.printStackTrace();
+                                               }
+                                       }
+                               }
+                       }
+
+                       // Select the created item within the tab folder
+                       tabFolder.setSelection(item);
+
+                       // Set the connector
+                       terminal.setConnector(connector);
+
+                       // needed to get the focus and cursor
+                       Assert.isTrue(terminal instanceof ITerminalControl);
+                       ((ITerminalControl)terminal).setState(oldState);
+
+                       // Fire selection changed event
+                       fireSelectionChanged();
+               }
+
+               // Return the create tab item finally.
+               return item;
+       }
+
+
+       protected void addMiddleMouseButtonPasteSupport(final ITerminalViewControl terminal) {
+               terminal.getControl().addMouseListener(new MouseAdapter(){
+                       @Override
+            public void mouseDown(MouseEvent e) {
+                               // paste when the middle button is clicked
+                               if (e.button == 2) {
+                                       Clipboard clipboard = terminal.getClipboard();
+                                       if (clipboard.isDisposed()) return;
+                                       int clipboardType = DND.SELECTION_CLIPBOARD;
+                                       if (clipboard.getAvailableTypes(clipboardType).length == 0)
+                                               // use normal clipboard if selection clipboard is not available
+                                               clipboardType = DND.CLIPBOARD;
+                                       String text = (String) clipboard.getContents(TextTransfer.getInstance(), clipboardType);
+                                       if (text != null && text.length() > 0)
+                                               terminal.pasteString(text);
+                               }
+                       }
+               });
+    }
+
+       /**
+        * Generate a unique title string based on the given proposal.
+        *
+        * @param proposal The proposal. Must not be <code>null</code>.
+        * @return The unique title string.
+        */
+       protected String makeUniqueTitle(String proposal, CTabFolder tabFolder) {
+               Assert.isNotNull(proposal);
+               Assert.isNotNull(tabFolder);
+
+               String title = proposal;
+               int index = 0;
+
+               // Loop all existing tab items and check the titles. We have to remember
+               // all found titles as modifying the proposal might in turn conflict again
+               // with the title of a tab already checked.
+               List<String> titles = new ArrayList<String>();
+               for (CTabItem item : tabFolder.getItems()) {
+                       // Get the tab item title
+                       titles.add(item.getText());
+               }
+               // Make the proposal unique be appending (<n>) against all known titles.
+               while (titles.contains(title)) title = proposal + " (" + ++index + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+
+               return title;
+       }
+
+       /**
+        * Setup the terminal console tab item listeners.
+        *
+        * @param item The tab item. Must not be <code>null</code>.
+        */
+       protected void setupTerminalTabListeners(final CTabItem item) {
+               Assert.isNotNull(item);
+
+               // Create and associate the disposal listener
+               DisposeListener disposeListener = doCreateTerminalTabDisposeListener(this);
+
+               // store the listener to make access easier e.g. needed in DnD
+               item.setData("disposeListener", disposeListener); //$NON-NLS-1$
+               item.addDisposeListener(disposeListener);
+       }
+
+       /**
+        * Creates a new terminal console tab terminal listener instance.
+        *
+        * @param tabFolderManager The tab folder manager. Must not be <code>null</code>.
+        * @param item The tab item. Must not be <code>null</code>.
+        *
+        * @return The terminal listener instance.
+        */
+       protected ITerminalListener doCreateTerminalTabTerminalListener(TabFolderManager tabFolderManager, CTabItem item) {
+               Assert.isNotNull(item);
+               return new TabTerminalListener(tabFolderManager, item);
+       }
+
+       /**
+        * Creates a new terminal console tab dispose listener instance.
+        *
+        * @param parent The parent terminal console tab folder manager. Must not be <code>null</code>.
+        * @return The dispose listener instance.
+        */
+       protected DisposeListener doCreateTerminalTabDisposeListener(TabFolderManager parent) {
+               Assert.isNotNull(parent);
+               return new TabDisposeListener(parent);
+       }
+
+       /**
+        * Returns the tab item image.
+        *
+        * @param connector The terminal connector. Must not be <code>null</code>.
+        * @param data The custom terminal data node or <code>null</code>.
+        *
+        * @return The tab item image or <code>null</code>.
+        */
+       protected Image getTabItemImage(ITerminalConnector connector, Object data) {
+               Assert.isNotNull(connector);
+               return UIPlugin.getImage(ImageConsts.VIEW_Terminals);
+       }
+
+       /**
+        * Lookup a tab item with the given title and the given terminal connector.
+        * <p>
+        * <b>Note:</b> The method will handle unified tab item titles itself.
+        *
+        * @param title The tab item title. Must not be <code>null</code>.
+        * @param connector The terminal connector. Must not be <code>null</code>.
+        * @param data The custom terminal data node or <code>null</code>.
+        *
+        * @return The corresponding tab item or <code>null</code>.
+        */
+       public CTabItem findTabItem(String title, ITerminalConnector connector, Object data) {
+               Assert.isNotNull(title);
+               Assert.isNotNull(connector);
+
+               // Get the tab folder
+               CTabFolder tabFolder = getTabFolder();
+               if (tabFolder == null) return null;
+
+               // Loop all existing tab items and try to find a matching title
+               for (CTabItem item : tabFolder.getItems()) {
+                       // Disposed items cannot be matched
+                       if (item.isDisposed()) continue;
+                       // Get the title from the current tab item
+                       String itemTitle = item.getText();
+                       // The terminal console state might be signaled to the user via the
+                       // terminal console tab title. Filter out any prefix "<.*>\s*".
+                       itemTitle = itemTitle.replaceFirst("^<.*>\\s*", ""); //$NON-NLS-1$ //$NON-NLS-2$
+                       if (itemTitle.startsWith(title)) {
+                               // The title string matches -> double check with the terminal connector
+                               ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
+                               ITerminalConnector connector2 = terminal.getTerminalConnector();
+                               // If the connector id and name matches -> check on the settings
+                               if (connector.getId().equals(connector2.getId()) && connector.getName().equals(connector2.getName())) {
+                                       if (!connector.isInitialized()) {
+                                               // an uninitialized connector does not yield a sensible summary
+                                               return item;
+                                       }
+                                       String summary = connector.getSettingsSummary();
+                                       String summary2 = connector2.getSettingsSummary();
+                                       // If we have matching settings -> we've found the matching item
+                                       if (summary.equals(summary2)) return item;
+                               }
+                       }
+               }
+
+               return null;
+       }
+
+       /**
+        * Make the given tab item the active tab and bring the tab to the top.
+        *
+        * @param item The tab item. Must not be <code>null</code>.
+        */
+       public void bringToTop(CTabItem item) {
+               Assert.isNotNull(item);
+
+               // Get the tab folder
+               CTabFolder tabFolder = getTabFolder();
+               if (tabFolder == null) return;
+
+               // Set the given tab item as selection to the tab folder
+               tabFolder.setSelection(item);
+               // Fire selection changed event
+               fireSelectionChanged();
+       }
+
+       /**
+        * Returns the currently active tab.
+        *
+        * @return The active tab item or <code>null</code> if none.
+        */
+       public CTabItem getActiveTabItem() {
+               // Get the tab folder
+               CTabFolder tabFolder = getTabFolder();
+               if (tabFolder == null) return null;
+
+               return tabFolder.getSelection();
+       }
+
+       /**
+        * Remove all terminated tab items.
+        */
+       public void removeTerminatedItems() {
+               // Get the tab folder
+               CTabFolder tabFolder = getTabFolder();
+               if (tabFolder == null) return;
+
+               // Loop the items and check for terminated status
+               for (CTabItem item: tabFolder.getItems()) {
+                       // Disposed items cannot be matched
+                       if (item.isDisposed()) continue;
+                       // Check if the item is terminated
+                       if (isTerminatedTabItem(item)) {
+                               // item is terminated -> dispose
+                               item.dispose();
+                       }
+               }
+       }
+
+       /**
+        * Checks if the given tab item represents a terminated console. Subclasses may
+        * overwrite this method to extend the definition of terminated.
+        *
+        * @param item The tab item or <code>null</code>.
+        * @return <code>True</code> if the tab item represents a terminated console, <code>false</code> otherwise.
+        */
+       protected boolean isTerminatedTabItem(CTabItem item) {
+               // Null items or disposed items cannot be matched
+               if (item == null || item.isDisposed()) return false;
+
+               // First, match the item title. If it contains "<terminated>", the item can be removed
+               String itemTitle = item.getText();
+               if (itemTitle != null && itemTitle.contains("<terminated>")) { //$NON-NLS-1$
+                       return true;
+               }
+               // Second, check if the associated terminal control is closed
+               // The title string matches -> double check with the terminal connector
+               ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
+               if (terminal != null && terminal.getState() == TerminalState.CLOSED) {
+                       return true;
+               }
+
+               return false;
+       }
+
+       /**
+        * Returns the command input field handler for the given tab item.
+        *
+        * @param item The tab item or <code>null</code>.
+        * @return The command input field handler or <code>null</code>.
+        */
+       public final TabCommandFieldHandler getTabCommandFieldHandler(CTabItem item) {
+               // Null items or disposed items cannot be matched
+               if (item == null || item.isDisposed()) return null;
+
+               TabCommandFieldHandler handler = commandFieldHandler.get(item);
+               if (handler == null) {
+                       handler = createTabCommandFieldHandler(this, item);
+                       Assert.isNotNull(handler);
+                       commandFieldHandler.put(item, handler);
+               }
+               return handler;
+       }
+
+       /**
+        * Create the command input field handler for the given tab item.
+        *
+        * @param tabFolderManager The parent tab folder manager. Must not be <code>null</code>
+        * @param item The associated tab item. Must not be <code>null</code>.
+        *
+        * @return The command input field handler. Must not be <code>null</code>.
+        *
+        * @since 4.1
+        */
+       protected TabCommandFieldHandler createTabCommandFieldHandler(TabFolderManager tabFolderManager, CTabItem item) {
+               return new TabCommandFieldHandler(tabFolderManager, item);
+       }
+
+       /**
+        * Dispose the command input field handler for the given tab item.
+        *
+        * @param item The tab item or <code>null</code>.
+        */
+       protected void disposeTabCommandFieldHandler(CTabItem item) {
+               // Null items or disposed items cannot be matched
+               if (item == null || item.isDisposed()) return;
+
+               TabCommandFieldHandler handler = commandFieldHandler.remove(item);
+               if (handler != null) handler.dispose();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+        */
+       @Override
+       public void addSelectionChangedListener(ISelectionChangedListener listener) {
+               if (listener != null && !selectionChangedListeners.contains(listener)) selectionChangedListeners.add(listener);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+        */
+       @Override
+       public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+               if (listener != null) selectionChangedListeners.remove(listener);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
+        */
+       @Override
+       public ISelection getSelection() {
+               CTabItem activeTabItem = getActiveTabItem();
+               return activeTabItem != null ? new StructuredSelection(activeTabItem) : new StructuredSelection();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
+        */
+       @Override
+       public void setSelection(ISelection selection) {
+               if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+                       // The first selection element which is a CTabItem will become the active item
+                       Iterator<?> iterator = ((IStructuredSelection)selection).iterator();
+                       while (iterator.hasNext()) {
+                               Object candidate = iterator.next();
+                               if (candidate instanceof CTabItem) { bringToTop((CTabItem)candidate); return; }
+                       }
+               }
+               // fire a changed event in any case
+               fireSelectionChanged(selection);
+       }
+
+       /**
+        * Fire the selection changed event to the registered listeners.
+        */
+       protected void fireSelectionChanged() {
+               updateStatusLine();
+               fireSelectionChanged(getSelection());
+       }
+
+       /**
+        * Fire the selection changed event with the terminal text!
+        * to the registered listeners.
+        * see also TerminalControlSelectionListener- mouseUp
+        *
+        * @since 4.1
+        */
+       protected void fireTerminalSelectionChanged() {
+               updateStatusLine();
+               CTabItem item = getActiveTabItem();
+               if (item != null && !item.isDisposed()) {
+                       ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
+                       if (terminal != null && !terminal.isDisposed()) {
+                               fireSelectionChanged(new StructuredSelection(terminal.getSelection()));
+                       }
+               }
+       }
+
+       /**
+        * Fire the selection changed event to the registered listeners.
+        */
+       protected final void fireSelectionChanged(ISelection selection) {
+               // Create the selection changed event
+               SelectionChangedEvent event = new SelectionChangedEvent(TabFolderManager.this, selection);
+
+               // First, invoke the registered listeners and let them do their job
+               for (ISelectionChangedListener listener : selectionChangedListeners) {
+                       listener.selectionChanged(event);
+               }
+       }
+
+       /**
+        * Update the parent view status line.
+        */
+       public final void updateStatusLine() {
+               String message = null;
+               IStatusLineManager manager = parentView.getViewSite().getActionBars().getStatusLineManager();
+
+               CTabItem item = getActiveTabItem();
+               if (item != null && !item.isDisposed()) {
+                       ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
+                       if (terminal != null && !terminal.isDisposed()) {
+                               StringBuilder buffer = new StringBuilder();
+
+                               buffer.append(state2msg(item, terminal.getState()));
+                               buffer.append(" - "); //$NON-NLS-1$
+
+                               String encoding = terminal.getEncoding();
+                               if (encoding == null || "ISO-8859-1".equals(encoding)) { //$NON-NLS-1$
+                                       encoding = "Default (ISO-8859-1)"; //$NON-NLS-1$
+                               }
+                               buffer.append(NLS.bind(Messages.TabFolderManager_encoding, encoding));
+
+                               message = buffer.toString();
+                       }
+               }
+
+               manager.setMessage(message);
+       }
+
+       /**
+        * Returns the string representation of the given terminal state.
+        *
+        * @param item The tab folder item. Must not be <code>null</code>.
+        * @param state The terminal state. Must not be <code>null</code>.
+        *
+        * @return The string representation.
+        */
+       @SuppressWarnings("unchecked")
+    protected String state2msg(CTabItem item, TerminalState state) {
+               Assert.isNotNull(item);
+               Assert.isNotNull(state);
+
+               // Determine the terminal properties of the tab folder
+               Map<String, Object> properties = (Map<String, Object>)item.getData("properties"); //$NON-NLS-1$
+
+               // Get he current terminal state as string
+               String stateStr = state.toString();
+               // Lookup a matching text representation of the state
+               String key = "TabFolderManager_state_" + stateStr.replaceAll("\\.", " ").trim().toLowerCase(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+               String stateMsg = null;
+               if (properties != null) stateMsg = properties.get(key) instanceof String ? (String) properties.get(key) : null;
+               if (stateMsg == null) stateMsg = Messages.getString(key);
+               if (stateMsg == null) stateMsg = stateStr;
+
+               return stateMsg;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderMenuHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderMenuHandler.java
new file mode 100644 (file)
index 0000000..973594c
--- /dev/null
@@ -0,0 +1,398 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.tabs;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IMenuListener2;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
+import org.eclipse.tm.internal.terminal.control.actions.TerminalActionClearAll;
+import org.eclipse.tm.internal.terminal.control.actions.TerminalActionCopy;
+import org.eclipse.tm.internal.terminal.control.actions.TerminalActionPaste;
+import org.eclipse.tm.internal.terminal.control.actions.TerminalActionSelectAll;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.actions.SelectEncodingAction;
+import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
+import org.eclipse.ui.IWorkbenchActionConstants;
+
+/**
+ * Terminal tab folder menu handler.
+ */
+public class TabFolderMenuHandler extends PlatformObject {
+       // Reference to the parent terminals console view
+       private final ITerminalsView parentView;
+       // Reference to the tab folder context menu manager
+       private MenuManager contextMenuManager;
+       // Reference to the tab folder context menu
+       private Menu contextMenu;
+       // The list of actions available within the context menu
+       private final List<AbstractTerminalAction> contextMenuActions = new ArrayList<AbstractTerminalAction>();
+
+       // The list of invalid context menu contributions "startsWith" expressions
+       /* default */ static final String[] INVALID_CONTRIBUTIONS_STARTS_WITH = {
+               "org.eclipse.cdt", "org.eclipse.ui.edit" //$NON-NLS-1$ //$NON-NLS-2$
+       };
+
+       /**
+        * Default menu listener implementation.
+        */
+       protected class MenuListener implements IMenuListener2 {
+
+               /* (non-Javadoc)
+                * @see org.eclipse.jface.action.IMenuListener2#menuAboutToHide(org.eclipse.jface.action.IMenuManager)
+                */
+               @Override
+               public void menuAboutToHide(IMenuManager manager) {
+                       // CQ:WIND00192293 and CQ:WIND194204 - don't update actions on menuAboutToHide
+                       // See also http://bugs.eclipse.org/296212
+                       //                      updateMenuItems(false);
+               }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.jface.action.IMenuListener#menuAboutToShow(org.eclipse.jface.action.IMenuManager)
+                */
+               @Override
+               public void menuAboutToShow(IMenuManager manager) {
+                       removeInvalidContributions(manager);
+                       updateMenuItems(true);
+               }
+
+               /**
+                * Bug 392249: Remove contributions that appear in the context in Eclipse 4.x which are
+                * not visible in Eclipse 3.8.x. Re-evaluate from time to time!
+                *
+                * @param manager The menu manager or <code>null</code>
+                */
+               private void removeInvalidContributions(IMenuManager manager) {
+                       if (manager == null) return;
+
+                       IContributionItem[] items = manager.getItems();
+                       for (IContributionItem item : items) {
+                               String id = item.getId();
+                               if (id != null) {
+                                       for (String prefix : INVALID_CONTRIBUTIONS_STARTS_WITH) {
+                                               if (id.startsWith(prefix)) {
+                                                       manager.remove(item);
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param parentView The parent terminals console view. Must not be <code>null</code>.
+        */
+       public TabFolderMenuHandler(ITerminalsView parentView) {
+               super();
+               Assert.isNotNull(parentView);
+               this.parentView = parentView;
+       }
+
+       /**
+        * Returns the parent terminals console view.
+        *
+        * @return The parent terminals console view instance.
+        */
+       protected final ITerminalsView getParentView() {
+               return parentView;
+       }
+
+       /**
+        * Returns the tab folder associated with the parent view.
+        *
+        * @return The tab folder or <code>null</code>.
+        */
+       @SuppressWarnings("cast")
+    protected final CTabFolder getTabFolder() {
+               return (CTabFolder) getParentView().getAdapter(CTabFolder.class);
+       }
+
+       /**
+        * Dispose the tab folder menu handler instance.
+        */
+       public void dispose() {
+               // Dispose the context menu
+               if (contextMenu != null) { contextMenu.dispose(); contextMenu = null; }
+               // Dispose the context menu manager
+               if (contextMenuManager != null) { contextMenuManager.dispose(); contextMenuManager = null; }
+               // Clear all actions
+               contextMenuActions.clear();
+       }
+
+       /**
+        * Setup the context menu for the tab folder. The method will return
+        * immediately if the menu handler had been initialized before.
+        *
+        * @param tabFolder The tab folder control. Must not be <code>null</code>.
+        */
+       public void initialize() {
+               // Return immediately if the menu manager and menu got initialized already
+               if (contextMenuManager != null && contextMenu != null) {
+                       return;
+               }
+
+               // Get the tab folder
+               CTabFolder tabFolder = getTabFolder();
+               if (tabFolder == null) {
+                       return;
+               }
+
+               // Create the menu manager if not done before
+               contextMenuManager = new MenuManager("#PopupMenu"); //$NON-NLS-1$
+
+               // Bug 392249: Register our menu listener after registering the context menu
+               //             for contributions. That way we can use our menu listener to get
+               //             rid of unwanted/misguided contributions. At least until this is
+               //             fixed in the Eclipse 4.x platform.
+
+               // Create the context menu
+               contextMenu = contextMenuManager.createContextMenu(tabFolder);
+               // Temporarily set the menu on the tab folder to avoid the case
+               // where the menu has a different parent shell than the control.
+               // This can be the case if the tab folder is re-parented to the
+               // "PartRenderingEngine's limbo".
+               tabFolder.setMenu(contextMenu);
+
+               // Create the context menu action instances
+               doCreateContextMenuActions();
+
+               // Fill the context menu
+               doFillContextMenu(contextMenuManager);
+
+               // Register to the view site to open the menu for contributions
+               getParentView().getSite().registerContextMenu(contextMenuManager, getParentView().getSite().getSelectionProvider());
+
+               // Create and associated the menu listener
+               contextMenuManager.addMenuListener(new MenuListener());
+       }
+
+       /**
+        * Adds the given action to the context menu actions list.
+        *
+        * @param action The action instance. Must not be <code>null</code>.
+        */
+       protected final void add(AbstractTerminalAction action) {
+               Assert.isNotNull(action);
+               contextMenuActions.add(action);
+       }
+
+       /**
+        * Create the context menu actions.
+        */
+       @SuppressWarnings("cast")
+    protected void doCreateContextMenuActions() {
+               // Create and add the copy action
+               add(new TerminalActionCopy() {
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
+                        */
+                       @Override
+                       protected ITerminalViewControl getTarget() {
+                               return getActiveTerminalViewControl();
+                       }
+               });
+
+               // Create and add the paste action
+               add(new TerminalActionPaste() {
+                       @SuppressWarnings({ "unchecked" })
+            @Override
+                       public void run() {
+                               // Determine if pasting to the active tab require backslash translation
+                               boolean needsTranslation = false;
+
+                               TabFolderManager manager = (TabFolderManager) getParentView().getAdapter(TabFolderManager.class);
+                               if (manager != null) {
+                                       // If we have the active tab item, we can get the active terminal control
+                                       CTabItem activeTabItem = manager.getActiveTabItem();
+                                       if (activeTabItem != null) {
+                                               Map<String, Object> properties = (Map<String, Object>)activeTabItem.getData("properties"); //$NON-NLS-1$
+                                               if (properties != null && properties.containsKey(ITerminalsConnectorConstants.PROP_TRANSLATE_BACKSLASHES_ON_PASTE)) {
+                                                       Object value = properties.get(ITerminalsConnectorConstants.PROP_TRANSLATE_BACKSLASHES_ON_PASTE);
+                                                       needsTranslation = value instanceof Boolean ? ((Boolean)value).booleanValue() : false;
+                                               }
+                                       }
+                               }
+
+                               if (needsTranslation) {
+                                       ITerminalViewControl target = getTarget();
+                                       if (target != null && target.getClipboard() != null && !target.getClipboard().isDisposed()) {
+                                               String text = (String) target.getClipboard().getContents(TextTransfer.getInstance());
+                                               if (text != null) {
+                                                       text = text.replace('\\', '/');
+
+                                                       Object[] data = new Object[] { text };
+                                                       Transfer[] types = new Transfer[] { TextTransfer.getInstance() };
+                                                       target.getClipboard().setContents(data, types, DND.CLIPBOARD);
+                                               }
+                                       }
+                               }
+
+                           super.run();
+                       }
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
+                        */
+                       @Override
+                       protected ITerminalViewControl getTarget() {
+                               return getActiveTerminalViewControl();
+                       }
+               });
+
+               // Create and add the clear all action
+               add(new TerminalActionClearAll() {
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
+                        */
+                       @Override
+                       protected ITerminalViewControl getTarget() {
+                               return getActiveTerminalViewControl();
+                       }
+
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.TerminalActionPaste#updateAction(boolean)
+                        */
+                       @Override
+                       public void updateAction(boolean aboutToShow) {
+                           super.updateAction(aboutToShow);
+                           if (getTarget() != null && getTarget().getState() != TerminalState.CONNECTED) {
+                               setEnabled(false);
+                           }
+                       }
+               });
+
+               // Create and add the select all action
+               add(new TerminalActionSelectAll() {
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
+                        */
+                       @Override
+                       protected ITerminalViewControl getTarget() {
+                               return getActiveTerminalViewControl();
+                       }
+               });
+
+               // Create and add the select encoding action
+               add (new SelectEncodingAction((TabFolderManager) getParentView().getAdapter(TabFolderManager.class)) {
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
+                        */
+                       @Override
+                       protected ITerminalViewControl getTarget() {
+                               return getActiveTerminalViewControl();
+                       }
+               });
+       }
+
+       /**
+        * Returns the currently active terminal control.
+        *
+        * @return The currently active terminal control or <code>null</code>.
+        */
+       @SuppressWarnings("cast")
+    protected ITerminalViewControl getActiveTerminalViewControl() {
+               ITerminalViewControl terminal = null;
+
+               // Get the active tab item from the tab folder manager
+               TabFolderManager manager = (TabFolderManager) getParentView().getAdapter(TabFolderManager.class);
+               if (manager != null) {
+                       // If we have the active tab item, we can get the active terminal control
+                       CTabItem activeTabItem = manager.getActiveTabItem();
+                       if (activeTabItem != null) {
+                               terminal = (ITerminalViewControl)activeTabItem.getData();
+                       }
+               }
+
+               return terminal;
+       }
+
+       /**
+        * Fill in the context menu content within the given manager.
+        *
+        * @param manager The menu manager. Must not be <code>null</code>.
+        */
+       protected void doFillContextMenu(MenuManager manager) {
+               Assert.isNotNull(manager);
+
+               // Loop all actions and add them to the menu manager
+               for (AbstractTerminalAction action : contextMenuActions) {
+                       manager.add(action);
+                       // Add a separator after the paste action
+                       if (action instanceof TerminalActionPaste) {
+                               manager.add(new Separator());
+                       }
+                       // Add a separator after the select all action
+                       if (action instanceof TerminalActionSelectAll) {
+                               manager.add(new Separator());
+                       }
+               }
+
+               // Menu contributions will end up here
+               manager.add(new Separator());
+               manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+       }
+
+       /**
+        * Update the context menu items on showing or hiding the context menu.
+        *
+        * @param aboutToShow <code>True</code> if the menu is about to show, <code>false</code> otherwise.
+        */
+       protected void updateMenuItems(boolean aboutToShow) {
+               // Loop all actions and update the status
+               for (AbstractTerminalAction action : contextMenuActions) {
+                       action.updateAction(aboutToShow);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.WorkbenchPart#getAdapter(java.lang.Class)
+        */
+       @SuppressWarnings({ "unchecked", "rawtypes" })
+       @Override
+       public Object getAdapter(Class adapter) {
+               if (MenuManager.class.isAssignableFrom(adapter)) {
+                       return contextMenuManager;
+               } else if (Menu.class.isAssignableFrom(adapter)) {
+                       if (contextMenu == null || contextMenu.isDisposed()) {
+                               contextMenu = contextMenuManager.createContextMenu(getTabFolder());
+                       }
+                       // Clear the menu from the tab folder now - see initialize()
+                       getTabFolder().setMenu(null);
+                       return contextMenu;
+               }
+
+               // Try the parent view
+               Object adapted = getParentView().getAdapter(adapter);
+               if (adapted != null) {
+                       return adapted;
+               }
+
+               return super.getAdapter(adapter);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderSelectionListener.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderSelectionListener.java
new file mode 100644 (file)
index 0000000..54ba5d9
--- /dev/null
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.tabs;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+
+/**
+ * Terminal tab folder default selection listener implementation.
+ */
+public class TabFolderSelectionListener implements SelectionListener {
+       private final TabFolderManager parentTabFolderManager;
+
+       /**
+        * Constructor.
+        *
+        * @param parentTabFolderManager The parent tab folder manager. Must not be <code>null</code>
+        */
+       public TabFolderSelectionListener(TabFolderManager parentTabFolderManager) {
+               Assert.isNotNull(parentTabFolderManager);
+               this.parentTabFolderManager = parentTabFolderManager;
+       }
+
+       /**
+        * Returns the parent terminal console tab folder manager instance.
+        *
+        * @return The parent terminal console tab folder manager instance.
+        */
+       protected final TabFolderManager getParentTabFolderManager() {
+               return parentTabFolderManager;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
+        */
+       @Override
+       public void widgetDefaultSelected(SelectionEvent e) {
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+        */
+       @Override
+       public void widgetSelected(SelectionEvent e) {
+               parentTabFolderManager.fireSelectionChanged();
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderToolbarHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderToolbarHandler.java
new file mode 100644 (file)
index 0000000..9a972cc
--- /dev/null
@@ -0,0 +1,373 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.tabs;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction;
+import org.eclipse.tm.internal.terminal.control.actions.TerminalActionClearAll;
+import org.eclipse.tm.internal.terminal.control.actions.TerminalActionCopy;
+import org.eclipse.tm.internal.terminal.control.actions.TerminalActionPaste;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.view.ui.actions.AbstractAction;
+import org.eclipse.tm.terminal.view.ui.actions.NewTerminalViewAction;
+import org.eclipse.tm.terminal.view.ui.actions.TabScrollLockAction;
+import org.eclipse.tm.terminal.view.ui.actions.ToggleCommandFieldAction;
+import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchActionConstants;
+
+
+/**
+ * Terminal tab folder toolbar handler.
+ */
+public class TabFolderToolbarHandler extends PlatformObject {
+       // Reference to the parent terminals console view
+       private final ITerminalsView parentView;
+       // Reference to the toolbar manager
+       private IToolBarManager toolbarManager;
+       // Reference to the selection listener
+       private ToolbarSelectionChangedListener selectionChangedListener;
+       // The list of actions available within the toolbar
+       private final List<AbstractTerminalAction> toolbarActions = new ArrayList<AbstractTerminalAction>();
+
+       /**
+        * Default selection listener implementation.
+        */
+       protected class ToolbarSelectionChangedListener implements ISelectionChangedListener {
+
+               /* (non-Javadoc)
+                * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+                */
+               @Override
+               public void selectionChanged(SelectionChangedEvent event) {
+                       boolean enable = event != null;
+
+                       // The VlmConsoleTabFolderManager is listening to the selection changes of the
+                       // TabFolder and fires selection changed events.
+                       if (enable && event.getSource() instanceof TabFolderManager) {
+                               enable = event.getSelection() instanceof StructuredSelection
+                               && !event.getSelection().isEmpty()
+                               && (((StructuredSelection)event.getSelection()).getFirstElement() instanceof CTabItem
+                                       || ((StructuredSelection)event.getSelection()).getFirstElement() instanceof String);
+                       }
+
+                       updateToolbarItems(enable);
+               }
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param parentView The parent terminals console view. Must not be <code>null</code>.
+        */
+       public TabFolderToolbarHandler(ITerminalsView parentView) {
+               super();
+               Assert.isNotNull(parentView);
+               this.parentView = parentView;
+       }
+
+       /**
+        * Returns the parent terminals console view.
+        *
+        * @return The terminals console view instance.
+        */
+       protected final ITerminalsView getParentView() {
+               return parentView;
+       }
+
+       /**
+        * Returns the tab folder associated with the parent view.
+        *
+        * @return The tab folder or <code>null</code>.
+        */
+       @SuppressWarnings("cast")
+    protected final CTabFolder getTabFolder() {
+               return (CTabFolder) getParentView().getAdapter(CTabFolder.class);
+       }
+
+       /**
+        * Returns the currently active terminal control.
+        *
+        * @return The currently active terminal control or <code>null</code>.
+        */
+       @SuppressWarnings("cast")
+    public ITerminalViewControl getActiveTerminalViewControl() {
+               ITerminalViewControl terminal = null;
+
+               // Get the active tab item from the tab folder manager
+               TabFolderManager manager = (TabFolderManager) getParentView().getAdapter(TabFolderManager.class);
+               if (manager != null) {
+                       // If we have the active tab item, we can get the active terminal control
+                       CTabItem activeTabItem = manager.getActiveTabItem();
+                       if (activeTabItem != null && !activeTabItem.isDisposed()) {
+                               terminal = (ITerminalViewControl)activeTabItem.getData();
+                       }
+               }
+
+               return terminal;
+       }
+
+       /**
+        * Dispose the tab folder menu handler instance.
+        */
+       public void dispose() {
+               // Dispose the selection changed listener
+               if (selectionChangedListener != null) {
+                       getParentView().getViewSite().getSelectionProvider().removeSelectionChangedListener(selectionChangedListener);
+                       selectionChangedListener = null;
+               }
+
+               // Clear all actions
+               toolbarActions.clear();
+       }
+
+       /**
+        * Setup the context menu for the tab folder. The method will return
+        * immediately if the toolbar handler had been initialized before.
+        *
+        * @param tabFolder The tab folder control. Must not be <code>null</code>.
+        */
+       public void initialize() {
+               // Return immediately if the toolbar manager got initialized already
+               if (toolbarManager != null) {
+                       return;
+               }
+
+               // Register ourself as selection listener to the tab folder
+               selectionChangedListener = doCreateSelectionChangedListener();
+               Assert.isNotNull(selectionChangedListener);
+               getParentView().getViewSite().getSelectionProvider().addSelectionChangedListener(selectionChangedListener);
+
+               // Get the parent view action bars
+               IActionBars bars = getParentView().getViewSite().getActionBars();
+
+               // From the action bars, get the toolbar manager
+               toolbarManager = bars.getToolBarManager();
+
+               // Create the toolbar action instances
+               doCreateToolbarActions();
+
+               // Fill the toolbar
+               doFillToolbar(toolbarManager);
+
+               // Update actions
+               updateToolbarItems(false);
+       }
+
+       /**
+        * Creates a new selection changed listener instance.
+        *
+        * @return The new selection changed listener instance.
+        */
+       protected ToolbarSelectionChangedListener doCreateSelectionChangedListener() {
+               return new ToolbarSelectionChangedListener();
+       }
+
+       /**
+        * Adds the given action to the toolbar actions list.
+        *
+        * @param action The action instance. Must not be <code>null</code>.
+        */
+       protected final void add(AbstractTerminalAction action) {
+               Assert.isNotNull(action);
+               toolbarActions.add(action);
+       }
+
+       /**
+        * Removes the given action from the toolbar actions list.
+        *
+        * @param action The action instance. Must not be <code>null</code>.
+        */
+       protected final void remove(AbstractTerminalAction action) {
+               Assert.isNotNull(action);
+               toolbarActions.remove(action);
+       }
+
+       /**
+        * Create the toolbar actions.
+        */
+       protected void doCreateToolbarActions() {
+               // Create and add the paste action
+               add(new TerminalActionPaste() {
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
+                        */
+                       @Override
+                       protected ITerminalViewControl getTarget() {
+                               return getActiveTerminalViewControl();
+                       }
+               });
+
+               // Create and add the copy action
+               add(new TerminalActionCopy() {
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
+                        */
+                       @Override
+                       protected ITerminalViewControl getTarget() {
+                               return getActiveTerminalViewControl();
+                       }
+               });
+
+               // Create and add the scroll lock action
+               add (new TabScrollLockAction() {
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
+                        */
+                       @Override
+                       protected ITerminalViewControl getTarget() {
+                               return getActiveTerminalViewControl();
+                       }
+               });
+
+               // Create and add the clear all action
+               add(new TerminalActionClearAll() {
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
+                        */
+                       @Override
+                       protected ITerminalViewControl getTarget() {
+                               return getActiveTerminalViewControl();
+                       }
+
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.TerminalActionPaste#updateAction(boolean)
+                        */
+                       @Override
+                       public void updateAction(boolean aboutToShow) {
+                           super.updateAction(aboutToShow);
+                           if (getTarget() != null && getTarget().getState() != TerminalState.CONNECTED) {
+                               setEnabled(false);
+                           }
+                       }
+               });
+
+               // Create and add the toggle command input field action
+               add (new ToggleCommandFieldAction(getParentView()) {
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
+                        */
+                       @Override
+                       protected ITerminalViewControl getTarget() {
+                               return getActiveTerminalViewControl();
+                       }
+               });
+
+               // Create and add the new terminal view action
+               add (new NewTerminalViewAction(getParentView()) {
+                       /* (non-Javadoc)
+                        * @see org.eclipse.tm.internal.terminal.control.actions.AbstractTerminalAction#getTarget()
+                        */
+                       @Override
+                       protected ITerminalViewControl getTarget() {
+                               return getActiveTerminalViewControl();
+                       }
+               });
+       }
+
+       /**
+        * Fill in the context menu content within the given manager.
+        *
+        * @param manager The menu manager. Must not be <code>null</code>.
+        */
+       protected void doFillToolbar(IToolBarManager manager) {
+               Assert.isNotNull(manager);
+
+               // Note: For the toolbar, the actions are added from left to right!
+               //       So we start with the additions marker here which is the most
+               //       left contribution item.
+               manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+               manager.add(new Separator("anchor")); //$NON-NLS-1$
+
+               // we want that at the end
+               NewTerminalViewAction newTerminalAction = null;
+
+               // Loop all actions and add them to the menu manager
+               for (AbstractTerminalAction action : toolbarActions) {
+                       // Add a separator before the clear all action or if the action is a separator
+                       if (action instanceof TabScrollLockAction
+                               || (action instanceof AbstractAction && ((AbstractAction)action).isSeparator())) {
+                               manager.insertAfter("anchor", new Separator()); //$NON-NLS-1$
+                       }
+                       // skip new terminal view action for now
+                       if (action instanceof NewTerminalViewAction){
+                               newTerminalAction = (NewTerminalViewAction)action;
+                               continue;
+                       }
+                       // Add the action itself
+                       manager.insertAfter("anchor", action); //$NON-NLS-1$
+               }
+               // now add to the end
+               if (newTerminalAction != null){
+                       manager.add(newTerminalAction);
+               }
+       }
+
+       /**
+        * Update the toolbar items.
+        *
+        * @param enabled <code>True</code> if the items shall be enabled, <code>false</code> otherwise.
+        */
+       protected void updateToolbarItems(boolean enabled) {
+               // Determine the currently active terminal control
+               ITerminalViewControl control = getActiveTerminalViewControl();
+               // Loop all actions and update the status
+               for (AbstractTerminalAction action : toolbarActions) {
+                       // If the terminal control is not available, the updateAction
+                       // method of certain actions enable the action (bugzilla #260372).
+                       // Workaround by forcing the action to get disabled with setEnabled.
+                       if (control == null && !(action instanceof NewTerminalViewAction)) {
+                               action.setEnabled(false);
+                       }
+                       else {
+                               action.updateAction(enabled);
+                       }
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.WorkbenchPart#getAdapter(java.lang.Class)
+        */
+       @SuppressWarnings({ "unchecked", "rawtypes" })
+       @Override
+       public Object getAdapter(Class adapter) {
+               if (IToolBarManager.class.isAssignableFrom(adapter)) {
+                       return toolbarManager;
+               }
+
+               // Try the toolbar actions
+               for (AbstractTerminalAction action : toolbarActions) {
+                       if (adapter.isAssignableFrom(action.getClass())) {
+                               return action;
+                       }
+               }
+
+               // Try the parent view
+               Object adapted = getParentView().getAdapter(adapter);
+               if (adapted != null) {
+                       return adapted;
+               }
+
+               return super.getAdapter(adapter);
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabTerminalListener.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabTerminalListener.java
new file mode 100644 (file)
index 0000000..2b711be
--- /dev/null
@@ -0,0 +1,160 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.tabs;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tm.internal.terminal.control.ITerminalListener2;
+import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+
+/**
+ * Terminal tab default terminal listener implementation.
+ */
+public class TabTerminalListener implements ITerminalListener2 {
+       private static final String TAB_TERMINAL_LISTENER = "TabTerminalListener"; //$NON-NLS-1$
+       /* default */ final TabFolderManager tabFolderManager;
+       private CTabItem tabItem;
+       private final String tabItemTitle;
+
+       /**
+        * Move a TabTerminalListener instance to another item (for DnD).
+        *
+        * @param fromItem  item to detach the listener from
+        * @param toItem    item to attach listener to
+        */
+       static void move(CTabItem fromItem, CTabItem toItem) {
+               TabTerminalListener listener = (TabTerminalListener) fromItem.getData(TAB_TERMINAL_LISTENER);
+               if (listener != null) {
+                       listener.attachTo(toItem);
+               }
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param tabFolderManager The parent tab folder manager. Must not be <code>null</code>.
+        * @param tabItem The parent tab item. Must not be <code>null</code>.
+        */
+       public TabTerminalListener(TabFolderManager tabFolderManager, CTabItem tabItem) {
+               super();
+               Assert.isNotNull(tabFolderManager);
+               Assert.isNotNull(tabItem);
+               this.tabFolderManager = tabFolderManager;
+               // Remember the original tab item title
+               tabItemTitle = tabItem.getText();
+
+               attachTo(tabItem);
+       }
+
+       private void attachTo(CTabItem item) {
+               if (tabItem != null) tabItem.setData(TAB_TERMINAL_LISTENER, null);
+               item.setData(TAB_TERMINAL_LISTENER, this);
+               tabItem = item;
+       }
+
+       /**
+        * Returns the associated parent tab item.
+        *
+        * @return The parent tab item.
+        */
+       protected final CTabItem getTabItem() {
+               return tabItem;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.ITerminalListener#setState(org.eclipse.tm.internal.terminal.provisional.api.TerminalState)
+        */
+       @Override
+       public void setState(final TerminalState state) {
+               // The tab item must have been not yet disposed
+               final CTabItem item = getTabItem();
+               if (item == null || item.isDisposed()) return;
+
+               // Run asynchronously in the display thread
+               item.getDisplay().asyncExec(new Runnable() {
+                       @Override
+                       public void run() {
+                               // Update the tab item title
+                               String newTitle = getTerminalConsoleTabTitle(state);
+                               if (newTitle != null) item.setText(newTitle);
+
+                               // Turn off the command field (if necessary)
+                               TabCommandFieldHandler handler = tabFolderManager.getTabCommandFieldHandler(item);
+                               if (TerminalState.CLOSED.equals(state) && handler != null && handler.hasCommandInputField()) {
+                                       handler.setCommandInputField(false);
+                                       // Trigger a selection changed event to update the action enablements
+                                       // and the status line
+                                       ISelectionProvider provider = tabFolderManager.getParentView().getViewSite().getSelectionProvider();
+                                       Assert.isNotNull(provider);
+                                       provider.setSelection(provider.getSelection());
+                               } else {
+                                       // Update the status line
+                                       tabFolderManager.updateStatusLine();
+                               }
+                       }
+               });
+       }
+
+       /**
+        * Returns the title to set to the terminal console tab for the given state.
+        * <p>
+        * <b>Note:</b> This method is called from {@link #setState(TerminalState)} and
+        *              is expected to by called within the UI thread.
+        *
+        * @param state The terminal state. Must not be <code>null</code>.
+        * @return The terminal console tab title to set or <code>null</code> to leave the title unchanged.
+        */
+       protected String getTerminalConsoleTabTitle(TerminalState state) {
+               Assert.isNotNull(state);
+               Assert.isNotNull(Display.findDisplay(Thread.currentThread()));
+
+               // The tab item must have been not yet disposed
+               CTabItem item = getTabItem();
+               if (item == null || item.isDisposed()) return null;
+
+               // Get the current tab title
+               String oldTitle = item.getText();
+
+               // Construct the new title
+               String newTitle = null;
+
+               if (TerminalState.CLOSED.equals(state)) {
+                       newTitle = NLS.bind(Messages.TabTerminalListener_consoleClosed, tabItemTitle, tabFolderManager.state2msg(item, state));
+               }
+               else if (TerminalState.CONNECTING.equals(state)) {
+                       newTitle = NLS.bind(Messages.TabTerminalListener_consoleConnecting, tabItemTitle, tabFolderManager.state2msg(item, state));
+               }
+               else if (TerminalState.CONNECTED.equals(state)) {
+                       newTitle = tabItemTitle;
+               }
+
+               return newTitle != null && !newTitle.equals(oldTitle) ? newTitle : null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.internal.terminal.control.ITerminalListener#setTerminalTitle(java.lang.String)
+        */
+       @Override
+       public void setTerminalTitle(String title) {
+       }
+
+       /**
+        * @see org.eclipse.tm.internal.terminal.control.ITerminalListener2#setTerminalSelectionChanged()
+        * @since 4.1
+        */
+       @Override
+       public void setTerminalSelectionChanged() {
+               tabFolderManager.fireTerminalSelectionChanged();
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/view/OldTerminalsViewHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/view/OldTerminalsViewHandler.java
new file mode 100644 (file)
index 0000000..3317a49
--- /dev/null
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.view;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.tm.terminal.view.ui.interfaces.IUIConstants;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * Old terminals view handler implementation.
+ * <p>
+ * If invoked, the view implementation opens the new terminals view and
+ * closes itself afterwards.
+ */
+public class OldTerminalsViewHandler extends ViewPart {
+
+       boolean fReplaced;
+       IPartListener2 fPartlistener;
+
+       /**
+        * Constructor.
+        */
+       public OldTerminalsViewHandler() {
+               super();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       public void createPartControl(Composite parent) {
+               replaceWithTerminalsView();
+       }
+
+       protected void replaceWithTerminalsView() {
+               if (fReplaced)
+                       return;
+           IViewSite site = getViewSite();
+               final IWorkbenchPage page = site.getPage();
+
+               site.getShell().getDisplay().asyncExec(new Runnable() {
+                       @Override
+                       public void run() {
+                               if (fReplaced)
+                                       return;
+                               if (!page.isPageZoomed() || page.getActivePart() instanceof TerminalsView) {
+                                       fReplaced = true;
+                                       // Show the new view
+                                       try {
+                                               page.showView(IUIConstants.ID, null, IWorkbenchPage.VIEW_CREATE);
+                                       }
+                                       catch (PartInitException e) { /* ignored on purpose */ }
+
+                                       // Hide ourself in the current perspective
+                                       page.hideView(OldTerminalsViewHandler.this);
+                               } else if (fPartlistener == null) {
+                                       final IWorkbenchPart maximizedPart = page.getActivePart();
+                                       page.addPartListener(fPartlistener = new IPartListener2() {
+                                               @Override
+                                               public void partVisible(IWorkbenchPartReference partRef) {
+                                                       if (partRef.getPart(false) == OldTerminalsViewHandler.this) {
+                                                               page.removePartListener(this);
+                                                               fPartlistener = null;
+                                                               replaceWithTerminalsView();
+                                                       }
+                                               }
+                                               @Override
+                                               public void partOpened(IWorkbenchPartReference partRef) {
+                                               }
+                                               @Override
+                                               public void partInputChanged(IWorkbenchPartReference partRef) {
+                                               }
+                                               @Override
+                                               public void partHidden(IWorkbenchPartReference partRef) {
+                                               }
+                                               @Override
+                                               public void partDeactivated(IWorkbenchPartReference partRef) {
+                                               }
+                                               @Override
+                                               public void partClosed(IWorkbenchPartReference partRef) {
+                                                       if (partRef.getPart(false) == OldTerminalsViewHandler.this) {
+                                                               page.removePartListener(this);
+                                                               fPartlistener = null;
+                                                       } else if (partRef.getPart(false) == maximizedPart) {
+                                                               page.removePartListener(this);
+                                                               fPartlistener = null;
+                                                               replaceWithTerminalsView();
+                                                       }
+                                               }
+                                               @Override
+                                               public void partBroughtToTop(IWorkbenchPartReference partRef) {
+                                               }
+                                               @Override
+                                               public void partActivated(IWorkbenchPartReference partRef) {
+                                               }
+                                       });
+                               }
+                       }
+               });
+    }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+        */
+       @Override
+       public void setFocus() {
+               // should not happen, but just in case - replace on focus
+               replaceWithTerminalsView();
+       }
+
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/view/TerminalsView.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/view/TerminalsView.java
new file mode 100644 (file)
index 0000000..9f12b26
--- /dev/null
@@ -0,0 +1,778 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Max Weninger (Wind River) - [361363] [TERMINALS] Implement "Pin&Clone" for the "Terminals" view
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.view;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.UUID;
+
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.dnd.ByteArrayTransfer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSource;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DragSourceListener;
+import org.eclipse.swt.dnd.DropTarget;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.DropTargetListener;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.tm.terminal.view.ui.activator.UIPlugin;
+import org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView;
+import org.eclipse.tm.terminal.view.ui.nls.Messages;
+import org.eclipse.tm.terminal.view.ui.tabs.TabFolderManager;
+import org.eclipse.tm.terminal.view.ui.tabs.TabFolderMenuHandler;
+import org.eclipse.tm.terminal.view.ui.tabs.TabFolderToolbarHandler;
+import org.eclipse.tm.terminal.view.ui.view.showin.GitShowInContextHandler;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.ISources;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPreferenceConstants;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.part.IShowInTarget;
+import org.eclipse.ui.part.PageBook;
+import org.eclipse.ui.part.ShowInContext;
+import org.eclipse.ui.part.ViewPart;
+import org.osgi.framework.Bundle;
+
+/**
+ * Terminal view.
+ */
+public class TerminalsView extends ViewPart implements ITerminalsView, IShowInTarget {
+
+       // Reference to the main page book control
+       private PageBook pageBookControl;
+       // Reference to the tab folder maintaining the consoles
+       /* default */ CTabFolder tabFolderControl;
+       // Reference to the tab folder manager
+       /* default */ TabFolderManager tabFolderManager;
+       // Reference to the tab folder menu handler
+       private TabFolderMenuHandler tabFolderMenuHandler;
+       // Reference to the tab folder toolbar handler
+       private TabFolderToolbarHandler tabFolderToolbarHandler;
+       // Reference to the empty page control (to be show if no console is open)
+       private Control emptyPageControl;
+       // The view's memento handler
+       private final TerminalsViewMementoHandler mementoHandler = new TerminalsViewMementoHandler();
+
+       /**
+        * "dummy" transfer just to store the information needed for the DnD
+        *
+        */
+       private static class TerminalTransfer extends ByteArrayTransfer {
+               // The static terminal transfer type name. Unique per terminals view instance.
+               private static final String TYPE_NAME = "terminal-transfer-format:" + UUID.randomUUID().toString(); //$NON-NLS-1$
+               // Register the type name and remember the associated unique type id.
+               private static final int TYPEID = registerType(TYPE_NAME);
+
+               private CTabItem draggedFolderItem;
+               private TabFolderManager draggedTabFolderManager;
+
+               /*
+                * Thread save singleton instance creation.
+                */
+               private static class LazyInstanceHolder {
+                       public static TerminalTransfer instance = new TerminalTransfer();
+               }
+
+               /**
+                * Constructor.
+                */
+               TerminalTransfer() {
+               }
+
+               /**
+                * Returns the singleton terminal transfer instance.
+                * @return
+                */
+               public static TerminalTransfer getInstance() {
+                       return LazyInstanceHolder.instance;
+               }
+
+               /**
+                * Sets the dragged folder item.
+                *
+                * @param tabFolderItem The dragged folder item or <code>null</code>.
+                */
+               public void setDraggedFolderItem(CTabItem tabFolderItem) {
+                       draggedFolderItem = tabFolderItem;
+               }
+
+               /**
+                * Returns the dragged folder item.
+                *
+                * @return The dragged folder item or <code>null</code>.
+                */
+               public CTabItem getDraggedFolderItem() {
+                       return draggedFolderItem;
+               }
+
+               /**
+                * Sets the tab folder manager the associated folder item is dragged from.
+                *
+                * @param tabFolderManager The tab folder manager or <code>null</code>.
+                */
+               public void setTabFolderManager(TabFolderManager tabFolderManager) {
+                       draggedTabFolderManager = tabFolderManager;
+               }
+
+               /**
+                * Returns the tab folder manager the associated folder item is dragged from.
+                *
+                * @return The tab folder manager or <code>null</code>.
+                */
+               public TabFolderManager getTabFolderManager() {
+                       return draggedTabFolderManager;
+               }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.swt.dnd.Transfer#getTypeIds()
+                */
+               @Override
+               protected int[] getTypeIds() {
+                       return new int[] { TYPEID };
+               }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.swt.dnd.Transfer#getTypeNames()
+                */
+               @Override
+               protected String[] getTypeNames() {
+                       return new String[] { TYPE_NAME };
+               }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.swt.dnd.ByteArrayTransfer#javaToNative(java.lang.Object, org.eclipse.swt.dnd.TransferData)
+                */
+               @Override
+               public void javaToNative(Object data, TransferData transferData) {
+               }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(org.eclipse.swt.dnd.TransferData)
+                */
+               @Override
+               public Object nativeToJava(TransferData transferData) {
+                       return null;
+               }
+       }
+
+       /**
+        * Constructor.
+        */
+       public TerminalsView() {
+               super();
+       }
+
+       /**
+        * Initialize the drag support.
+        */
+       private void addDragSupport() {
+               // The event listener is registered as filter. It will receive events from all widgets.
+               PlatformUI.getWorkbench().getDisplay().addFilter(SWT.DragDetect, new Listener() {
+                       /* (non-Javadoc)
+                        * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+                        */
+                       @Override
+                       public void handleEvent(Event event) {
+                               // Only handle events where a CTabFolder is the source
+                               if (!(event.widget instanceof CTabFolder)) return;
+                               // TabFolderManager must be created
+                               if (tabFolderManager == null) return;
+
+                               // only for own tab folders
+                               if (event.widget != tabFolderControl) return;
+
+                               // Skip drag if DnD is still ongoing (bug 443787)
+                               if (tabFolderControl.getData(DND.DRAG_SOURCE_KEY) != null) return;
+
+                               final CTabFolder draggedFolder = (CTabFolder) event.widget;
+
+                               int operations = DND.DROP_MOVE | DND.DROP_DEFAULT;
+                               final DragSource dragSource = new DragSource(draggedFolder, operations);
+
+                               // Initialize the terminal transfer type data
+                               TerminalTransfer.getInstance().setDraggedFolderItem(tabFolderManager.getActiveTabItem());
+                               TerminalTransfer.getInstance().setTabFolderManager(tabFolderManager);
+
+                               Transfer[] transferTypes = new Transfer[] { TerminalTransfer.getInstance() };
+                               dragSource.setTransfer(transferTypes);
+
+                               // Add a drag source listener to cleanup after the drag operation finished
+                               dragSource.addDragListener(new DragSourceListener() {
+                                       @Override
+                                       public void dragStart(DragSourceEvent event) {
+                                       }
+
+                                       @Override
+                                       public void dragSetData(DragSourceEvent event) {
+                                       }
+
+                                       @Override
+                                       public void dragFinished(DragSourceEvent event) {
+                                               // dispose this drag-source-listener by disposing its drag-source
+                                               dragSource.dispose();
+
+                                               // Inhibit the action of CTabFolder's default DragDetect-listeners,
+                                               // fire a mouse-click event on the widget that was dragged.
+                                               draggedFolder.notifyListeners(SWT.MouseUp, null);
+                                       }
+                               });
+                       }
+               });
+       }
+
+       /**
+        * Initialize the drop support on the terminals page book control.
+        */
+       private void addDropSupport() {
+               int operations = DND.DROP_MOVE | DND.DROP_DEFAULT;
+               final DropTarget target = new DropTarget(pageBookControl, operations);
+
+               Transfer[] transferTypes = new Transfer[] { TerminalTransfer.getInstance() };
+               target.setTransfer(transferTypes);
+
+               target.addDropListener(new DropTargetListener() {
+                       @Override
+                       public void dragEnter(DropTargetEvent event) {
+                               // only if the drop target is different then the drag source
+                               if (TerminalTransfer.getInstance().getTabFolderManager() == tabFolderManager) {
+                                       event.detail = DND.DROP_NONE;
+                               }
+                               else {
+                                       event.detail = DND.DROP_MOVE;
+                               }
+                       }
+
+                       @Override
+                       public void dragOver(DropTargetEvent event) {
+                       }
+
+                       @Override
+                       public void dragOperationChanged(DropTargetEvent event) {
+                       }
+
+                       @Override
+                       public void dragLeave(DropTargetEvent event) {
+                       }
+
+                       @Override
+                       public void dropAccept(DropTargetEvent event) {
+                       }
+
+                       @Override
+                       public void drop(DropTargetEvent event) {
+                               if (TerminalTransfer.getInstance().getDraggedFolderItem() != null && tabFolderManager != null) {
+                                       CTabItem draggedItem = TerminalTransfer.getInstance().getDraggedFolderItem();
+
+                                       CTabItem item = tabFolderManager.cloneTabItemAfterDrop(draggedItem);
+                                       tabFolderManager.bringToTop(item);
+                                       switchToTabFolderControl();
+
+                                       // dispose tab item control
+                                       final Control control = draggedItem.getControl();
+                                       draggedItem.setControl(null);
+                                       if (control != null) control.dispose();
+
+                                       // need to remove the dispose listener first
+                                       DisposeListener disposeListener = (DisposeListener) draggedItem.getData("disposeListener"); //$NON-NLS-1$
+                                       draggedItem.removeDisposeListener(disposeListener);
+                                       draggedItem.dispose();
+
+                                       // make sure the "new" terminals view has the focus after dragging a terminal
+                                       setFocus();
+                               }
+                       }
+               });
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+        */
+       @Override
+       public void dispose() {
+               // Dispose the tab folder manager
+               if (tabFolderManager != null) {
+                       tabFolderManager.dispose();
+                       tabFolderManager = null;
+               }
+               // Dispose the tab folder menu handler
+               if (tabFolderMenuHandler != null) {
+                       tabFolderMenuHandler.dispose();
+                       tabFolderMenuHandler = null;
+               }
+               // Dispose the tab folder toolbar handler
+               if (tabFolderToolbarHandler != null) {
+                       tabFolderToolbarHandler.dispose();
+                       tabFolderToolbarHandler = null;
+               }
+
+               super.dispose();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite, org.eclipse.ui.IMemento)
+        */
+       @Override
+       public void init(IViewSite site, IMemento memento) throws PartInitException {
+           super.init(site, memento);
+           restoreState(memento);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+        */
+       @Override
+       public void createPartControl(Composite parent) {
+               // Create the page book control
+               pageBookControl = doCreatePageBookControl(parent);
+               Assert.isNotNull(pageBookControl);
+               // Configure the page book control
+               doConfigurePageBookControl(pageBookControl);
+
+               // Create the empty page control
+               emptyPageControl = doCreateEmptyPageControl(pageBookControl);
+               Assert.isNotNull(emptyPageControl);
+               // Configure the empty page control
+               doConfigureEmptyPageControl(emptyPageControl);
+
+               // Create the tab folder control (empty)
+               tabFolderControl = doCreateTabFolderControl(pageBookControl);
+               Assert.isNotNull(tabFolderControl);
+               // Configure the tab folder control
+               doConfigureTabFolderControl(tabFolderControl);
+
+               // Create the tab folder manager
+               tabFolderManager = doCreateTabFolderManager(this);
+               Assert.isNotNull(tabFolderManager);
+               // Set the tab folder manager as the selection provider
+               getSite().setSelectionProvider(tabFolderManager);
+
+               // Setup the tab folder menu handler
+               tabFolderMenuHandler = doCreateTabFolderMenuHandler(this);
+               Assert.isNotNull(tabFolderMenuHandler);
+               doConfigureTabFolderMenuHandler(tabFolderMenuHandler);
+
+               // Setup the tab folder toolbar handler
+               tabFolderToolbarHandler = doCreateTabFolderToolbarHandler(this);
+               Assert.isNotNull(tabFolderToolbarHandler);
+               doConfigureTabFolderToolbarHandler(tabFolderToolbarHandler);
+
+               // Show the empty page control by default
+               switchToEmptyPageControl();
+
+               String secondaryId = ((IViewSite) getSite()).getSecondaryId();
+               if (secondaryId != null) {
+                       String defaultTitle = getPartName();
+                       // set title
+                       setPartName(defaultTitle + " " + secondaryId); //$NON-NLS-1$
+               }
+
+               // Initialize DnD support
+               addDragSupport();
+               addDropSupport();
+       }
+
+       /**
+        * Creates the {@link PageBook} instance.
+        *
+        * @param parent The parent composite. Must not be <code>null</code>.
+        * @return The page book instance. Must never be <code>null</code>.
+        */
+       protected PageBook doCreatePageBookControl(Composite parent) {
+               return new PageBook(parent, SWT.NONE);
+       }
+
+       /**
+        * Configure the given page book control.
+        *
+        * @param pagebook The page book control. Must not be <code>null</code>.
+        */
+       protected void doConfigurePageBookControl(PageBook pagebook) {
+               Assert.isNotNull(pagebook);
+
+               if (getContextHelpId() != null) PlatformUI.getWorkbench().getHelpSystem().setHelp(pagebook, getContextHelpId());
+       }
+
+       /**
+        * Returns the context help id associated with the terminals console view instance.
+        * <p>
+        * <b>Note:</b> The default implementation returns the view id as context help id.
+        *
+        * @return The context help id or <code>null</code> if none is associated.
+        */
+       @Override
+       public String getContextHelpId() {
+               return getViewSite().getId();
+       }
+
+       /**
+        * Creates the empty page control instance.
+        *
+        * @param parent The parent composite. Must not be <code>null</code>.
+        * @return The empty page control instance. Must never be <code>null</code>.
+        */
+       protected Control doCreateEmptyPageControl(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NONE);
+               composite.setLayout(new GridLayout());
+               composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+               return composite;
+       }
+
+       /**
+        * Configures the empty page control.
+        *
+        * @param control The empty page control. Must not be <code>null</code>.
+        */
+       protected void doConfigureEmptyPageControl(Control control) {
+               Assert.isNotNull(control);
+       }
+
+       /**
+        * Creates the tab folder control instance.
+        *
+        * @param parent The parent composite. Must not be <code>null</code>.
+        * @return The tab folder control instance. Must never be <code>null</code>.
+        */
+       protected CTabFolder doCreateTabFolderControl(Composite parent) {
+               return new CTabFolder(parent, SWT.NO_REDRAW_RESIZE | SWT.NO_TRIM | SWT.FLAT | SWT.BORDER);
+       }
+
+       /**
+        * Configures the tab folder control.
+        *
+        * @param tabFolder The tab folder control. Must not be <code>null</code>.
+        */
+       protected void doConfigureTabFolderControl(final CTabFolder tabFolder) {
+               Assert.isNotNull(tabFolder);
+
+               // Set the layout data
+               tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+               // Set the tab gradient coloring from the global preferences
+               if (useGradientTabBackgroundColor()) {
+                       tabFolder.setSelectionBackground(new Color[] {
+                                                                                                       JFaceResources.getColorRegistry().get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_START"), //$NON-NLS-1$
+                                                                                                       JFaceResources.getColorRegistry().get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_END") //$NON-NLS-1$
+                                                                                               }, new int[] { 100 }, true);
+               }
+               // Apply the tab folder selection foreground color
+               tabFolder.setSelectionForeground(JFaceResources.getColorRegistry().get("org.eclipse.ui.workbench.ACTIVE_TAB_TEXT_COLOR")); //$NON-NLS-1$
+
+               // Set the tab style from the global preferences
+               tabFolder.setSimple(PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS));
+
+               // Attach the mouse listener
+               tabFolder.addMouseListener(new MouseAdapter() {
+                       @Override
+                       public void mouseDown(MouseEvent e) {
+                               if (e.button == 2) {
+                                       // middle mouse button click - close tab
+                                       CTabItem item = tabFolder.getItem(new Point(e.x, e.y));
+                                       if (item != null) item.dispose();
+                               }
+                       }
+               });
+       }
+
+       /**
+        * If <code>True</code> is returned, the inner tabs are colored with gradient coloring set in
+        * the Eclipse workbench color settings.
+        *
+        * @return <code>True</code> to use gradient tab colors, <code>false</code> otherwise.
+        */
+       protected boolean useGradientTabBackgroundColor() {
+               return false;
+       }
+
+       /**
+        * Creates the tab folder manager.
+        *
+        * @param parentView The parent view instance. Must not be <code>null</code>.
+        * @return The tab folder manager. Must never be <code>null</code>.
+        */
+       protected TabFolderManager doCreateTabFolderManager(ITerminalsView parentView) {
+               Assert.isNotNull(parentView);
+               return new TabFolderManager(parentView);
+       }
+
+       /**
+        * Creates the tab folder menu handler.
+        *
+        * @param parentView The parent view instance. Must not be <code>null</code>.
+        * @return The tab folder menu handler. Must never be <code>null</code>.
+        */
+       protected TabFolderMenuHandler doCreateTabFolderMenuHandler(ITerminalsView parentView) {
+               Assert.isNotNull(parentView);
+               return new TabFolderMenuHandler(parentView);
+       }
+
+       /**
+        * Configure the tab folder menu handler
+        *
+        * @param menuHandler The tab folder menu handler. Must not be <code>null</code>.
+        */
+       protected void doConfigureTabFolderMenuHandler(TabFolderMenuHandler menuHandler) {
+               Assert.isNotNull(menuHandler);
+               menuHandler.initialize();
+       }
+
+       /**
+        * Creates the tab folder toolbar handler.
+        *
+        * @param parentView The parent view instance. Must not be <code>null</code>.
+        * @return The tab folder toolbar handler. Must never be <code>null</code>.
+        */
+       protected TabFolderToolbarHandler doCreateTabFolderToolbarHandler(ITerminalsView parentView) {
+               Assert.isNotNull(parentView);
+               return new TabFolderToolbarHandler(parentView);
+       }
+
+       /**
+        * Configure the tab folder toolbar handler
+        *
+        * @param toolbarHandler The tab folder toolbar handler. Must not be <code>null</code>.
+        */
+       protected void doConfigureTabFolderToolbarHandler(TabFolderToolbarHandler toolbarHandler) {
+               Assert.isNotNull(toolbarHandler);
+               toolbarHandler.initialize();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+        */
+       @Override
+       public void setFocus() {
+               if (pageBookControl != null) pageBookControl.setFocus();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView#switchToEmptyPageControl()
+        */
+       @Override
+       public void switchToEmptyPageControl() {
+               if (pageBookControl != null && !pageBookControl.isDisposed()
+                                               && emptyPageControl != null && !emptyPageControl.isDisposed()) {
+                       pageBookControl.showPage(emptyPageControl);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.tm.terminal.view.ui.interfaces.ITerminalsView#switchToTabFolderControl()
+        */
+       @Override
+       public void switchToTabFolderControl() {
+               if (pageBookControl != null && !pageBookControl.isDisposed()
+                                               && tabFolderControl != null && !tabFolderControl.isDisposed()) {
+                       pageBookControl.showPage(tabFolderControl);
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.WorkbenchPart#getAdapter(java.lang.Class)
+        */
+       @SuppressWarnings({ "unchecked", "rawtypes" })
+    @Override
+       public Object getAdapter(Class adapter) {
+               if (CTabFolder.class.isAssignableFrom(adapter)) {
+                       return tabFolderControl;
+               }
+               if (TabFolderManager.class.isAssignableFrom(adapter)) {
+                       return tabFolderManager;
+               }
+               if (TabFolderMenuHandler.class.isAssignableFrom(adapter)) {
+                       return tabFolderMenuHandler;
+               }
+               if (TabFolderToolbarHandler.class.isAssignableFrom(adapter)) {
+                       return tabFolderToolbarHandler;
+               }
+               if (TerminalsViewMementoHandler.class.isAssignableFrom(adapter)) {
+                       return mementoHandler;
+               }
+
+               return super.getAdapter(adapter);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento)
+        */
+       @Override
+       public void saveState(IMemento memento) {
+               super.saveState(memento);
+           if (memento == null) return;
+           mementoHandler.saveState(this, memento);
+       }
+
+       /**
+        * Restore the view state from the given memento.
+        *
+        * @param memento The memento or <code>null</code>.
+        */
+       public void restoreState(IMemento memento) {
+               if (memento == null) return;
+               mementoHandler.restoreState(this, memento);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.IShowInTarget#show(org.eclipse.ui.part.ShowInContext)
+        */
+       @SuppressWarnings("cast")
+    @Override
+       public boolean show(ShowInContext context) {
+               if (context != null) {
+                       // Get the selection from the context
+                       ISelection selection = context.getSelection();
+
+                       // If the selection is not set or empty, look at the input element of
+                       // the show in context.
+                       if (!(selection instanceof IStructuredSelection) || selection.isEmpty()) {
+                               Object input = context.getInput();
+                               // If coming from the EGit repository viewer, the input element is
+                               // org.eclipse.egit.ui.internal.history.HistoryPageInput
+                               if ("org.eclipse.egit.ui.internal.history.HistoryPageInput".equals(input.getClass().getName())) { //$NON-NLS-1$
+                                       Bundle bundle = Platform.getBundle("org.eclipse.egit.ui"); //$NON-NLS-1$
+                                       if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                                               selection = GitShowInContextHandler.getSelection(input);
+                                       }
+                               }
+                       }
+
+                       // The selection must contain elements that can be adapted to IResource, File or IPath
+                       if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+                               boolean isValid = true;
+
+                               // Build a new structured selection with the adapted elements
+                               List<Object> elements = new ArrayList<Object>();
+
+                               Iterator<?> iterator = ((IStructuredSelection)selection).iterator();
+                               while (iterator.hasNext() && isValid) {
+                                       Object element = iterator.next();
+                                       Object adapted = null;
+
+                                       if (element instanceof File) {
+                                               if (!elements.contains(element)) elements.add(element);
+                                               continue;
+                                       }
+                                       adapted = element instanceof IAdaptable ? ((IAdaptable)element).getAdapter(File.class) : null;
+                                       if (adapted == null) adapted = Platform.getAdapterManager().getAdapter(element, File.class);
+                                       if (adapted == null) adapted = Platform.getAdapterManager().loadAdapter(element, File.class.getName());
+                                       if (adapted != null) {
+                                               if (!elements.contains(adapted)) elements.add(adapted);
+                                               continue;
+                                       }
+
+                                       if (element instanceof IPath) {
+                                               if (!elements.contains(element)) elements.add(element);
+                                               continue;
+                                       }
+                                       adapted = element instanceof IAdaptable ? ((IAdaptable)element).getAdapter(IPath.class) : null;
+                                       if (adapted == null) adapted = Platform.getAdapterManager().getAdapter(element, IPath.class);
+                                       if (adapted == null) adapted = Platform.getAdapterManager().loadAdapter(element, IPath.class.getName());
+                                       if (adapted != null) {
+                                               if (!elements.contains(adapted)) elements.add(adapted);
+                                               continue;
+                                       }
+
+                                       Bundle bundle = Platform.getBundle("org.eclipse.core.resources"); //$NON-NLS-1$
+                                       if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                                               if (element instanceof org.eclipse.core.resources.IResource) {
+                                                       if (!elements.contains(element)) elements.add(element);
+                                                       continue;
+                                               }
+
+                                               adapted = element instanceof IAdaptable ? ((IAdaptable)element).getAdapter(org.eclipse.core.resources.IResource.class) : null;
+                                               if (adapted == null) adapted = Platform.getAdapterManager().getAdapter(element, org.eclipse.core.resources.IResource.class);
+                                               if (adapted == null) adapted = Platform.getAdapterManager().loadAdapter(element, org.eclipse.core.resources.IResource.class.getName());
+                                       }
+                                       if (adapted != null) {
+                                               if (!elements.contains(adapted)) elements.add(adapted);
+                                               continue;
+                                       }
+
+                                       // The EGit repository view can also set a RepositoryTreeNode (and subclasses)
+                                       // "org.eclipse.egit.ui.internal.repository.tree...."
+                                       if (element.getClass().getName().startsWith("org.eclipse.egit.ui.internal.repository.tree")) { //$NON-NLS-1$
+                                               bundle = Platform.getBundle("org.eclipse.egit.ui"); //$NON-NLS-1$
+                                               if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
+                                                       adapted = GitShowInContextHandler.getPath(element);
+                                               }
+                                       }
+                                       if (adapted != null) {
+                                               if (!elements.contains(adapted)) elements.add(adapted);
+                                               continue;
+                                       }
+
+                                       isValid = false;
+                               }
+
+                               // If the selection is valid, fire the command to open the local terminal
+                               if (isValid) {
+                                       selection =  new StructuredSelection(elements);
+                                       ICommandService service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
+                                       Command command = service != null ? service.getCommand("org.eclipse.tm.terminal.connector.local.command.launch") : null; //$NON-NLS-1$
+                                       if (command != null && command.isDefined() && command.isEnabled()) {
+                                               try {
+                                                       ParameterizedCommand pCmd = ParameterizedCommand.generateCommand(command, null);
+                                                       Assert.isNotNull(pCmd);
+                                                       IHandlerService handlerSvc = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
+                                                       Assert.isNotNull(handlerSvc);
+                                                       IEvaluationContext ctx = handlerSvc.getCurrentState();
+                                                       ctx = new EvaluationContext(ctx, selection);
+                                                       ctx.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection);
+                                                       handlerSvc.executeCommandInContext(pCmd, null, ctx);
+                                               } catch (Exception e) {
+                                                       // If the platform is in debug mode, we print the exception to the log view
+                                                       if (Platform.inDebugMode()) {
+                                                               IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
+                                                                                                                       Messages.AbstractTriggerCommandHandler_error_executionFailed, e);
+                                                               UIPlugin.getDefault().getLog().log(status);
+                                                       }
+                                               }
+                                       }
+                                       return true;
+                               }
+                       }
+               }
+           return false;
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/view/TerminalsViewMementoHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/view/TerminalsViewMementoHandler.java
new file mode 100644 (file)
index 0000000..9826c31
--- /dev/null
@@ -0,0 +1,178 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.view;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.tm.internal.terminal.control.ITerminalViewControl;
+import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants;
+import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate;
+import org.eclipse.tm.terminal.view.ui.interfaces.IMementoHandler;
+import org.eclipse.tm.terminal.view.ui.launcher.LauncherDelegateManager;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Take care of the persisted state handling of the "Terminal" view.
+ */
+public class TerminalsViewMementoHandler {
+       // The list of items to save. See the workbench listener implementation
+       // in o.e.tm.terminal.view.ui.activator.UIPlugin.
+       private final List<CTabItem> saveables = new ArrayList<CTabItem>();
+
+       /**
+        * Sets the list of saveable items.
+        *
+        * @param saveables The list of saveable items. Must not be <code>null</code>.
+        */
+       public void setSaveables(List<CTabItem> saveables) {
+               Assert.isNotNull(saveables);
+               this.saveables.clear();
+               this.saveables.addAll(saveables);
+       }
+
+       /**
+        * Saves the view state in the given memento.
+        *
+        * @param view The terminals view. Must not be <code>null</code>.
+        * @param memento The memento. Must not be <code>null</code>.
+        */
+       @SuppressWarnings("unchecked")
+    public void saveState(TerminalsView view, IMemento memento) {
+               Assert.isNotNull(view);
+               Assert.isNotNull(memento);
+
+               // Create a child element within the memento holding the
+               // connection info of the open, non-terminated tab items
+               memento = memento.createChild("terminalConnections"); //$NON-NLS-1$
+               Assert.isNotNull(memento);
+
+               // Write the view id and secondary id
+               memento.putString("id", view.getViewSite().getId()); //$NON-NLS-1$
+               memento.putString("secondaryId", view.getViewSite().getSecondaryId()); //$NON-NLS-1$
+
+               // Loop the saveable items and store the connection data of each
+               // item to the memento
+               for (CTabItem item : saveables) {
+                       // Ignore disposed items
+                       if (item.isDisposed()) continue;
+
+                       // Get the original terminal properties associated with the tab item
+                       Map<String, Object> properties = (Map<String, Object>)item.getData("properties"); //$NON-NLS-1$
+                       if (properties == null) continue;
+
+                       // Get the terminal launcher delegate
+                       String delegateId = (String)properties.get(ITerminalsConnectorConstants.PROP_DELEGATE_ID);
+                       ILauncherDelegate delegate = delegateId != null ? LauncherDelegateManager.getInstance().getLauncherDelegate(delegateId, false) : null;
+                       IMementoHandler mementoHandler = delegate != null ? (IMementoHandler)delegate.getAdapter(IMementoHandler.class) : null;
+                       if (mementoHandler != null) {
+                               // Create terminal connection child memento
+                               IMemento connectionMemento = memento.createChild("connection"); //$NON-NLS-1$
+                               Assert.isNotNull(connectionMemento);
+                               // Store the common attributes
+                               connectionMemento.putString(ITerminalsConnectorConstants.PROP_DELEGATE_ID, delegateId);
+
+                               String terminalConnectorId = (String)properties.get(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID);
+                               if (terminalConnectorId != null) {
+                                       connectionMemento.putString(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, terminalConnectorId);
+                               }
+
+                               if (properties.get(ITerminalsConnectorConstants.PROP_FORCE_NEW) instanceof Boolean) {
+                                       connectionMemento.putBoolean(ITerminalsConnectorConstants.PROP_FORCE_NEW, ((Boolean)properties.get(ITerminalsConnectorConstants.PROP_FORCE_NEW)).booleanValue());
+                               }
+
+                               // Store the current encoding
+                               ITerminalViewControl terminal = (ITerminalViewControl)item.getData();
+                               String encoding = terminal != null ? terminal.getEncoding() : null;
+                               if (encoding == null || "".equals(encoding)) encoding = (String)properties.get(ITerminalsConnectorConstants.PROP_ENCODING); //$NON-NLS-1$
+                               if (encoding != null && !"".equals(encoding)) { //$NON-NLS-1$
+                                       connectionMemento.putString(ITerminalsConnectorConstants.PROP_ENCODING, encoding);
+                               }
+
+                               // Pass on to the memento handler
+                               mementoHandler.saveState(connectionMemento, properties);
+                       }
+               }
+       }
+
+       /**
+        * Restore the view state from the given memento.
+        *
+        * @param view The terminals view. Must not be <code>null</code>.
+        * @param memento The memento. Must not be <code>null</code>.
+        */
+       protected void restoreState(final TerminalsView view, IMemento memento) {
+               Assert.isNotNull(view);
+               Assert.isNotNull(memento);
+
+               // Get the "terminalConnections" memento
+               memento = memento.getChild("terminalConnections"); //$NON-NLS-1$
+               if (memento != null) {
+                       // Read view id and secondary id
+                       String id = memento.getString("id"); //$NON-NLS-1$
+                       String secondaryId = memento.getString("secondaryId"); //$NON-NLS-1$
+                       if ("null".equals(secondaryId)) secondaryId = null; //$NON-NLS-1$
+
+                       // Get all the "connection" memento's.
+                       IMemento[] connections = memento.getChildren("connection"); //$NON-NLS-1$
+                       for (IMemento connection : connections) {
+                               // Create the properties container that holds the terminal properties
+                               Map<String, Object> properties = new HashMap<String, Object>();
+
+                               // Set the view id attributes
+                               properties.put(ITerminalsConnectorConstants.PROP_ID, id);
+                               properties.put(ITerminalsConnectorConstants.PROP_SECONDARY_ID, secondaryId);
+
+                               // Restore the common attributes
+                               properties.put(ITerminalsConnectorConstants.PROP_DELEGATE_ID, connection.getString(ITerminalsConnectorConstants.PROP_DELEGATE_ID));
+                               properties.put(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID, connection.getString(ITerminalsConnectorConstants.PROP_TERMINAL_CONNECTOR_ID));
+                               if (connection.getBoolean(ITerminalsConnectorConstants.PROP_FORCE_NEW) != null) {
+                                       properties.put(ITerminalsConnectorConstants.PROP_FORCE_NEW, connection.getBoolean(ITerminalsConnectorConstants.PROP_FORCE_NEW));
+                               }
+
+                               // Restore the encoding
+                               if (connection.getString(ITerminalsConnectorConstants.PROP_ENCODING) != null) {
+                                       properties.put(ITerminalsConnectorConstants.PROP_ENCODING, connection.getString(ITerminalsConnectorConstants.PROP_ENCODING));
+                               }
+
+                // Get the terminal launcher delegate
+                String delegateId = (String)properties.get(ITerminalsConnectorConstants.PROP_DELEGATE_ID);
+                ILauncherDelegate delegate = delegateId != null ? LauncherDelegateManager.getInstance().getLauncherDelegate(delegateId, false) : null;
+                IMementoHandler mementoHandler = delegate != null ? (IMementoHandler)delegate.getAdapter(IMementoHandler.class) : null;
+                if (mementoHandler != null) {
+                       // Pass on to the memento handler
+                       mementoHandler.restoreState(connection, properties);
+                }
+
+                // Restore the terminal connection
+                if (delegate != null && !properties.isEmpty()) {
+                       delegate.execute(properties, null);
+                }
+                       }
+               }
+       }
+
+       /**
+        * Executes the given runnable asynchronously in the display thread.
+        *
+        * @param runnable The runnable. Must not be <code>null</code>.
+        */
+       /* default */ void asyncExec(Runnable runnable) {
+               Assert.isNotNull(runnable);
+               if (PlatformUI.getWorkbench() != null && PlatformUI.getWorkbench().getDisplay() != null && !PlatformUI.getWorkbench().getDisplay().isDisposed()) {
+                       PlatformUI.getWorkbench().getDisplay().asyncExec(runnable);
+               }
+       }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/view/showin/GitShowInContextHandler.java b/rt-ide/org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/view/showin/GitShowInContextHandler.java
new file mode 100644 (file)
index 0000000..cdd4381
--- /dev/null
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tm.terminal.view.ui.view.showin;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+/**
+ * Git show in context handler implementation.
+ */
+@SuppressWarnings("restriction")
+public class GitShowInContextHandler {
+
+       /**
+        * Converts the data from the input object into a selection.
+        *
+        * @param input The input element. Must not be <code>null</code>.
+        * @return The selection or <code>null</code>.
+        */
+    public static ISelection getSelection(Object input) {
+               Assert.isNotNull(input);
+
+               List<Object> elements = new ArrayList<Object>();
+
+               if (input instanceof org.eclipse.egit.ui.internal.history.HistoryPageInput) {
+                       org.eclipse.egit.ui.internal.history.HistoryPageInput inp = (org.eclipse.egit.ui.internal.history.HistoryPageInput) input;
+
+                       if (inp.isSingleFile()) {
+                               elements.add(inp.getSingleFile());
+                       } else {
+                               File[] fl = inp.getFileList();
+                               if (fl != null && fl.length > 0) {
+                                       for (File f : fl) {
+                                               if (f.canRead() && !elements.contains(f)) {
+                                                       elements.add(f);
+                                               }
+                                       }
+                               }
+
+                               IResource[] rl = inp.getItems();
+                               if (rl != null && rl.length > 0) {
+                                       for (IResource r : rl) {
+                                               if (r.isAccessible() && !elements.contains(r)) {
+                                                       elements.add(r);
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               return elements.isEmpty() ? null : new StructuredSelection(elements);
+       }
+
+    /**
+     * Returns the path of the given element.
+     *
+     * @param element The element. Must not be <code>null</code>.
+     * @return The path or <code>null</code>.
+     */
+    public static IPath getPath(Object element) {
+       Assert.isNotNull(element);
+
+       IPath path = null;
+
+       if (element instanceof org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode) {
+               path = ((org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode<?>)element).getPath();
+       }
+
+       return path;
+    }
+}
diff --git a/rt-ide/org.eclipse.tm.terminal/pom.xml b/rt-ide/org.eclipse.tm.terminal/pom.xml
new file mode 100644 (file)
index 0000000..4d5d00d
--- /dev/null
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.eclipse.tm.terminal</groupId>
+        <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+        <version>4.2.0-SNAPSHOT</version>
+        <relativePath>admin/pom-build.xml</relativePath>
+    </parent>
+
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>terminal-parent</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <name>TM Terminal, Maven Master</name>
+
+    <modules>
+        <!-- Terminal Control features and plug-ins -->
+        <module>plugins/org.eclipse.tm.terminal.control</module>
+
+<!--
+        <module>features/org.eclipse.tm.terminal.control.feature</module>
+        <module>features/org.eclipse.tm.terminal.control.sdk.feature</module>
+        -->
+
+        <!-- Terminal Connector features and plug-ins -->
+        
+        <!--
+        
+        <module>plugins/org.eclipse.tm.terminal.connector.local</module>
+        <module>plugins/org.eclipse.tm.terminal.connector.process</module>
+        <module>plugins/org.eclipse.tm.terminal.connector.remote</module>
+        <module>plugins/org.eclipse.tm.terminal.connector.serial</module>
+        <module>plugins/org.eclipse.tm.terminal.connector.ssh</module>
+        <module>plugins/org.eclipse.tm.terminal.connector.telnet</module>
+        
+        <module>features/org.eclipse.tm.terminal.connector.local.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.local.sdk.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.remote.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.remote.sdk.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.serial.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.serial.sdk.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.ssh.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.ssh.sdk.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.telnet.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.telnet.sdk.feature</module>
+        
+-->
+        <!-- Terminals View features and plug-ins -->
+        <module>plugins/org.eclipse.tm.terminal.view.core</module>
+        <module>plugins/org.eclipse.tm.terminal.view.ui</module>
+        <!--
+        
+        <module>plugins/org.eclipse.tm.terminal.view.ui.rse</module>
+        
+        <module>features/org.eclipse.tm.terminal.view.feature</module>
+        <module>features/org.eclipse.tm.terminal.view.sdk.feature</module>
+        <module>features/org.eclipse.tm.terminal.view.rse.feature</module>
+        <module>features/org.eclipse.tm.terminal.view.rse.sdk.feature</module>
+
+-->
+
+        <!-- TM Terminal "all-in-one" features -->
+        <!--
+        <module>features/org.eclipse.tm.terminal.feature</module>
+        <module>features/org.eclipse.tm.terminal.sdk.feature</module>
+-->
+
+        <!-- TM Terminal Repository -->
+        <!--
+        <module>repos/org.eclipse.tm.terminal.repo</module>
+        
+        -->
+    </modules>
+
+    <profiles>
+        <profile>
+        <id>tests</id>
+        <modules>
+            <module>plugins/org.eclipse.tm.terminal.test</module>
+        </modules>
+    </profile>
+    </profiles>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/pom.xml_bak b/rt-ide/org.eclipse.tm.terminal/pom.xml_bak
new file mode 100644 (file)
index 0000000..ba4bc05
--- /dev/null
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.eclipse.tm.terminal</groupId>
+        <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+        <version>4.2.0-SNAPSHOT</version>
+        <relativePath>admin/pom-build.xml</relativePath>
+    </parent>
+
+    <groupId>org.eclipse.tm.terminal</groupId>
+    <artifactId>terminal-parent</artifactId>
+    <version>4.2.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <name>TM Terminal, Maven Master</name>
+
+    <modules>
+        <!-- Terminal Control features and plug-ins -->
+        <module>plugins/org.eclipse.tm.terminal.control</module>
+
+        <module>features/org.eclipse.tm.terminal.control.feature</module>
+        <module>features/org.eclipse.tm.terminal.control.sdk.feature</module>
+
+        <!-- Terminal Connector features and plug-ins -->
+        <module>plugins/org.eclipse.tm.terminal.connector.local</module>
+        <module>plugins/org.eclipse.tm.terminal.connector.process</module>
+        <module>plugins/org.eclipse.tm.terminal.connector.remote</module>
+        <module>plugins/org.eclipse.tm.terminal.connector.serial</module>
+        <module>plugins/org.eclipse.tm.terminal.connector.ssh</module>
+        <module>plugins/org.eclipse.tm.terminal.connector.telnet</module>
+        
+        <module>features/org.eclipse.tm.terminal.connector.local.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.local.sdk.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.remote.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.remote.sdk.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.serial.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.serial.sdk.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.ssh.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.ssh.sdk.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.telnet.feature</module>
+        <module>features/org.eclipse.tm.terminal.connector.telnet.sdk.feature</module>
+
+        <!-- Terminals View features and plug-ins -->
+        <module>plugins/org.eclipse.tm.terminal.view.core</module>
+        <module>plugins/org.eclipse.tm.terminal.view.ui</module>
+        <module>plugins/org.eclipse.tm.terminal.view.ui.rse</module>
+        
+        <module>features/org.eclipse.tm.terminal.view.feature</module>
+        <module>features/org.eclipse.tm.terminal.view.sdk.feature</module>
+        <module>features/org.eclipse.tm.terminal.view.rse.feature</module>
+        <module>features/org.eclipse.tm.terminal.view.rse.sdk.feature</module>
+
+        <!-- TM Terminal "all-in-one" features -->
+        <module>features/org.eclipse.tm.terminal.feature</module>
+        <module>features/org.eclipse.tm.terminal.sdk.feature</module>
+
+        <!-- TM Terminal Repository -->
+        <module>repos/org.eclipse.tm.terminal.repo</module>
+    </modules>
+
+    <profiles>
+        <profile>
+        <id>tests</id>
+        <modules>
+            <module>plugins/org.eclipse.tm.terminal.test</module>
+        </modules>
+    </profile>
+    </profiles>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/readme.txt b/rt-ide/org.eclipse.tm.terminal/readme.txt
new file mode 100644 (file)
index 0000000..4b5151f
--- /dev/null
@@ -0,0 +1,4 @@
+This repository holds the TM Terminal Component.
+Its core depends on Eclipse RCP only.
+All these Git modules should be named "org.eclipse.tm.terminal.*".
+See http://www.eclipse.org/tm/
diff --git a/rt-ide/org.eclipse.tm.terminal/repos/org.eclipse.tm.terminal.repo/.project b/rt-ide/org.eclipse.tm.terminal/repos/org.eclipse.tm.terminal.repo/.project
new file mode 100644 (file)
index 0000000..37c94f9
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.eclipse.tm.terminal.repo</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+       </buildSpec>
+       <natures>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.eclipse.tm.terminal/repos/org.eclipse.tm.terminal.repo/category.xml b/rt-ide/org.eclipse.tm.terminal/repos/org.eclipse.tm.terminal.repo/category.xml
new file mode 100644 (file)
index 0000000..83ea3ee
--- /dev/null
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<site>
+   <!-- Terminal Control Features -->
+   <feature url="features/org.eclipse.tm.terminal.control.feature_0.0.0.jar" id="org.eclipse.tm.terminal.control.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.control.sdk.feature_0.0.0.jar" id="org.eclipse.tm.terminal.control.sdk.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   
+   <!-- Terminal Connector Features -->
+   <feature url="features/org.eclipse.tm.terminal.connector.local.feature_0.0.0.jar" id="org.eclipse.tm.terminal.connector.local.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.connector.local.sdk.feature_0.0.0.jar" id="org.eclipse.tm.terminal.connector.local.sdk.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.connector.serial.feature_0.0.0.jar" id="org.eclipse.tm.terminal.connector.serial.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.connector.serial.sdk.feature_0.0.0.jar" id="org.eclipse.tm.terminal.connector.serial.sdk.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.connector.ssh.feature_0.0.0.jar" id="org.eclipse.tm.terminal.connector.ssh.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.connector.ssh.sdk.feature_0.0.0.jar" id="org.eclipse.tm.terminal.connector.ssh.sdk.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.connector.telnet.feature_0.0.0.jar" id="org.eclipse.tm.terminal.connector.telnet.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.connector.telnet.sdk.feature_0.0.0.jar" id="org.eclipse.tm.terminal.connector.telnet.sdk.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.connector.remote.feature_0.0.0.jar" id="org.eclipse.tm.terminal.connector.remote.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.connector.remote.sdk.feature_0.0.0.jar" id="org.eclipse.tm.terminal.connector.remote.sdk.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+
+   <!-- Terminal View Features -->
+   <feature url="features/org.eclipse.tm.terminal.view.feature_0.0.0.jar" id="org.eclipse.tm.terminal.view.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.view.sdk.feature_0.0.0.jar" id="org.eclipse.tm.terminal.view.sdk.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.view.rse.feature_0.0.0.jar" id="org.eclipse.tm.terminal.view.rse.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.view.rse.sdk.feature_0.0.0.jar" id="org.eclipse.tm.terminal.view.rse.sdk.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+
+   <!-- TM Terminal "all-in-one" features -->
+   <feature url="features/org.eclipse.tm.terminal.feature_0.0.0.jar" id="org.eclipse.tm.terminal.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   <feature url="features/org.eclipse.tm.terminal.sdk.feature_0.0.0.jar" id="org.eclipse.tm.terminal.sdk.feature" version="0.0.0">
+      <category name="terminal_main"/>
+   </feature>
+   
+   <category-def name="terminal_main" label="TM Terminal Main Features">
+      <description>
+         TM Terminal Main Features
+      </description>
+   </category-def>
+</site>
diff --git a/rt-ide/org.eclipse.tm.terminal/repos/org.eclipse.tm.terminal.repo/pom.xml b/rt-ide/org.eclipse.tm.terminal/repos/org.eclipse.tm.terminal.repo/pom.xml
new file mode 100644 (file)
index 0000000..3e98b77
--- /dev/null
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+       xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.eclipse.tm.terminal</groupId>
+               <artifactId>org.eclipse.tm.terminal.maven-build</artifactId>
+               <version>4.2.0-SNAPSHOT</version>
+               <relativePath>../../admin/pom-build.xml</relativePath>
+       </parent>
+
+       <version>4.2.0-SNAPSHOT</version>
+    <artifactId>org.eclipse.tm.terminal.repo</artifactId>
+    <packaging>eclipse-repository</packaging>
+
+    <profiles>
+        <profile>
+            <id>deploy</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>deploy</id>
+                                <phase>install</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <target>
+                                        <delete includeemptydirs="true">
+                                            <fileset dir="${terminal-install}">
+                                                <include name="**"/>
+                                            </fileset>
+                                        </delete>
+                                        <mkdir dir="${terminal-install}/common"/>
+                                        <mkdir dir="${terminal-install}/remote"/>
+                                        <copy includeemptydirs="false" todir="${terminal-install}">
+                                            <fileset dir="target/repository">
+                                                <include name="**"/>
+                                            </fileset>
+                                            <fileset dir="target">
+                                                <include name="${terminal-zipfile}"/>
+                                            </fileset>
+                                        </copy>
+                                        <chmod perm="g+w">
+                                            <fileset dir="${terminal-install}">
+                                                <include name="**"/>
+                                            </fileset>
+                                        </chmod>
+                                    </target>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+</project>
diff --git a/rt-ide/org.eclipse.tm.terminal/terminals.psf b/rt-ide/org.eclipse.tm.terminal/terminals.psf
new file mode 100644 (file)
index 0000000..02f70a5
--- /dev/null
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<psf version="2.0">
+<provider id="org.eclipse.egit.core.GitProvider">
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,admin"/>
+<project reference="1.0,https://git.eclipse.org/r/ptp/org.eclipse.remote,master,features/org.eclipse.remote-feature"/>
+<project reference="1.0,https://git.eclipse.org/r/ptp/org.eclipse.remote,master,bundles/org.eclipse.remote.core"/>
+<project reference="1.0,https://git.eclipse.org/r/ptp/org.eclipse.remote,master,bundles/org.eclipse.remote.jsch.core"/>
+<project reference="1.0,https://git.eclipse.org/r/ptp/org.eclipse.remote,master,bundles/org.eclipse.remote.jsch.ui"/>
+<project reference="1.0,https://git.eclipse.org/r/ptp/org.eclipse.remote,master,bundles/org.eclipse.remote.ui"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,plugins/org.eclipse.tm.terminal.connector.local"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.connector.local.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.connector.local.sdk.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,plugins/org.eclipse.tm.terminal.connector.process"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,plugins/org.eclipse.tm.terminal.connector.serial"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.connector.serial.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.connector.serial.sdk.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,plugins/org.eclipse.tm.terminal.connector.ssh"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.connector.ssh.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.connector.ssh.sdk.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,plugins/org.eclipse.tm.terminal.connector.telnet"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.connector.telnet.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.connector.telnet.sdk.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,plugins/org.eclipse.tm.terminal.control"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.control.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.control.sdk.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,plugins/org.eclipse.tm.terminal.connector.remote"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.connector.remote.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.connector.remote.sdk.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,repos/org.eclipse.tm.terminal.repo"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.sdk.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,plugins/org.eclipse.tm.terminal.test"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,plugins/org.eclipse.tm.terminal.view.core"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.view.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.view.rse.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.view.rse.sdk.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,features/org.eclipse.tm.terminal.view.sdk.feature"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,plugins/org.eclipse.tm.terminal.view.ui"/>
+<project reference="1.0,https://git.eclipse.org/r/tm/org.eclipse.tm.terminal,master,plugins/org.eclipse.tm.terminal.view.ui.rse"/>
+</provider>
+<workingSets editPageId="org.eclipse.jdt.ui.JavaWorkingSetPage" id="1424180520433_7" label="Remote Services" name="Remote Services">
+<item elementID="=org.eclipse.remote.jsch.core" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+<item elementID="=org.eclipse.remote.jsch.ui" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+<item elementID="=org.eclipse.remote.core" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+<item elementID="=org.eclipse.remote.ui" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+</workingSets>
+<workingSets editPageId="org.eclipse.jdt.ui.JavaWorkingSetPage" id="1424180691591_8" label="Remote Services (Features)" name="Remote Services (Features)">
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.remote-feature" type="4"/>
+</workingSets>
+<workingSets editPageId="org.eclipse.jdt.ui.JavaWorkingSetPage" id="1429262080908_11" label="Terminal &quot;All-In-One&quot; (Features)" name="Terminal &quot;All-In-One&quot; (Features)">
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.sdk.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.feature" type="4"/>
+</workingSets>
+<workingSets editPageId="org.eclipse.jdt.ui.JavaWorkingSetPage" id="1429252903893_9" label="Terminal Connectors" name="Terminal Connectors">
+<item elementID="=org.eclipse.tm.terminal.connector.remote" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+<item elementID="=org.eclipse.tm.terminal.connector.serial" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+<item elementID="=org.eclipse.tm.terminal.connector.telnet" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+<item elementID="=org.eclipse.tm.terminal.connector.process" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+<item elementID="=org.eclipse.tm.terminal.connector.ssh" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+<item elementID="=org.eclipse.tm.terminal.connector.local" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+</workingSets>
+<workingSets editPageId="org.eclipse.jdt.ui.JavaWorkingSetPage" id="1429252914126_10" label="Terminal Connectors (Features)" name="Terminal Connectors (Features)">
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.connector.telnet.sdk.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.connector.ssh.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.connector.ssh.sdk.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.connector.remote.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.connector.serial.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.connector.local.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.connector.local.sdk.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.connector.telnet.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.connector.serial.sdk.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.connector.remote.sdk.feature" type="4"/>
+</workingSets>
+<workingSets editPageId="org.eclipse.jdt.ui.JavaWorkingSetPage" id="1424167614352_4" label="Terminal Control" name="Terminal Control">
+<item elementID="=org.eclipse.tm.terminal.test" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+<item elementID="=org.eclipse.tm.terminal.control" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+</workingSets>
+<workingSets editPageId="org.eclipse.jdt.ui.JavaWorkingSetPage" id="1424167619686_5" label="Terminal Control (Features)" name="Terminal Control (Features)">
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.control.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.control.sdk.feature" type="4"/>
+</workingSets>
+<workingSets editPageId="org.eclipse.jdt.ui.JavaWorkingSetPage" id="1424167596901_2" label="Terminals View" name="Terminals View">
+<item elementID="=org.eclipse.tm.terminal.view.ui.rse" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+<item elementID="=org.eclipse.tm.terminal.view.ui" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+<item elementID="=org.eclipse.tm.terminal.view.core" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/>
+</workingSets>
+<workingSets editPageId="org.eclipse.jdt.ui.JavaWorkingSetPage" id="1424167602531_3" label="Terminals View (Features)" name="Terminals View (Features)">
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.view.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.view.sdk.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.view.rse.feature" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.view.rse.sdk.feature" type="4"/>
+</workingSets>
+<workingSets editPageId="org.eclipse.jdt.ui.JavaWorkingSetPage" id="1424172791946_6" label="Administration" name="Administration">
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.tm.terminal.repo" type="4"/>
+<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/Administration (TM Terminal)" type="4"/>
+</workingSets>
+</psf>
\ No newline at end of file
diff --git a/rt-ide/org.tizen.common.ui.theme/.classpath b/rt-ide/org.tizen.common.ui.theme/.classpath
new file mode 100644 (file)
index 0000000..098194c
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/rt-ide/org.tizen.common.ui.theme/.project b/rt-ide/org.tizen.common.ui.theme/.project
new file mode 100644 (file)
index 0000000..d37b1ba
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.tizen.common.ui.theme</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/org.tizen.common.ui.theme/.settings/org.eclipse.jdt.core.prefs b/rt-ide/org.tizen.common.ui.theme/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..f42de36
--- /dev/null
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/rt-ide/org.tizen.common.ui.theme/META-INF/MANIFEST.MF b/rt-ide/org.tizen.common.ui.theme/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..e1bf8e5
--- /dev/null
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.tizen.common.ui.theme;singleton:=true
+Bundle-Version: 3.0.0.qualifier
+Bundle-Activator: org.tizen.common.ui.theme.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.e4.ui.css.swt.theme,
+ org.eclipse.e4.ui.css.core,
+ org.eclipse.e4.ui.css.swt,
+ org.eclipse.e4.ui.workbench.renderers.swt
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: %Bundle-Vendor
+Export-Package: org.tizen.common.ui.theme
diff --git a/rt-ide/org.tizen.common.ui.theme/OSGI-INF/l10n/bundle.properties b/rt-ide/org.tizen.common.ui.theme/OSGI-INF/l10n/bundle.properties
new file mode 100644 (file)
index 0000000..9cd4002
--- /dev/null
@@ -0,0 +1,3 @@
+#Properties file for org.tizen.common.ui.theme\r
+Bundle-Vendor = The Linux Foundation\r
+Bundle-Name = Tizen Common Theme
\ No newline at end of file
diff --git a/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/Activator.class b/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/Activator.class
new file mode 100644 (file)
index 0000000..8385b2a
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/Activator.class differ
diff --git a/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererSeparatorSWTHandler.class b/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererSeparatorSWTHandler.class
new file mode 100644 (file)
index 0000000..063736d
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererSeparatorSWTHandler.class differ
diff --git a/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererUnderlineSWTHandler.class b/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererUnderlineSWTHandler.class
new file mode 100644 (file)
index 0000000..d16aad6
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererUnderlineSWTHandler.class differ
diff --git a/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/CSSPropertySashWidthSWTHandler.class b/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/CSSPropertySashWidthSWTHandler.class
new file mode 100644 (file)
index 0000000..76320f1
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/CSSPropertySashWidthSWTHandler.class differ
diff --git a/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/ReflectionUtil.class b/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/ReflectionUtil.class
new file mode 100644 (file)
index 0000000..ac9497b
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/bin/org/tizen/common/ui/theme/properties/custom/ReflectionUtil.class differ
diff --git a/rt-ide/org.tizen.common.ui.theme/build.properties b/rt-ide/org.tizen.common.ui.theme/build.properties
new file mode 100644 (file)
index 0000000..575bc43
--- /dev/null
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               OSGI-INF/l10n/bundle.properties,\
+               resources/
diff --git a/rt-ide/org.tizen.common.ui.theme/plugin.xml b/rt-ide/org.tizen.common.ui.theme/plugin.xml
new file mode 100644 (file)
index 0000000..53b79a4
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+    <extension
+          point="org.eclipse.e4.ui.css.swt.theme">
+       <theme
+             basestylesheeturi="resources/css/tizen_windows.css"
+             id="org.tizen.common.ui.theme.tizen"
+             label="Tizen"
+             os="win32">
+       </theme>
+       <theme
+             basestylesheeturi="resources/css/tizen_linux.css"
+             id="org.tizen.common.ui.theme.tizen"
+             label="Tizen"
+             os="linux">
+       </theme>
+       <theme
+             basestylesheeturi="resources/css/tizen_macosx.css"
+             id="org.tizen.common.ui.theme.tizen"
+             label="Tizen"
+             os="macosx">
+       </theme>
+    </extension>
+    <extension
+          point="org.eclipse.e4.ui.css.core.propertyHandler">
+       <handler
+             adapter="org.eclipse.e4.ui.css.swt.dom.CompositeElement"
+             composite="false"
+             handler="org.tizen.common.ui.theme.properties.custom.CSSPropertySashWidthSWTHandler">
+          <property-name
+                name="sash-width">
+          </property-name>
+       </handler>
+    </extension>
+    <extension
+          point="org.eclipse.e4.ui.css.core.propertyHandler">
+       <handler
+             adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
+             composite="false"
+             handler="org.tizen.common.ui.theme.properties.custom.CSSPropertyRendererUnderlineSWTHandler">
+          <property-name
+                name="tizen-selected-tab-underline">
+          </property-name>
+       </handler>
+    </extension>
+    <extension
+          point="org.eclipse.e4.ui.css.core.propertyHandler">
+       <handler
+             adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
+             composite="false"
+             handler="org.tizen.common.ui.theme.properties.custom.CSSPropertyRendererSeparatorSWTHandler">
+          <property-name
+                name="tizen-unselected-tab-separator">
+          </property-name>
+       </handler>
+    </extension>
+
+</plugin>
diff --git a/rt-ide/org.tizen.common.ui.theme/pom.xml b/rt-ide/org.tizen.common.ui.theme/pom.xml
new file mode 100644 (file)
index 0000000..f3f637a
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+      <groupId>org.tizen.rt</groupId>
+      <artifactId>tizen-rt-parent</artifactId>
+      <version>3.0.0-SNAPSHOT</version>
+      <relativePath>../tizen.rt.parent</relativePath>
+  </parent>
+
+  <groupId>org.tizen.rt</groupId>
+  <artifactId>org.tizen.common.ui.theme</artifactId>
+  <version>3.0.0-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/css/basestyle.css b/rt-ide/org.tizen.common.ui.theme/resources/css/basestyle.css
new file mode 100644 (file)
index 0000000..93790fa
--- /dev/null
@@ -0,0 +1,267 @@
+/*************************************************/
+/* New ColorDefinitions for the E4 default theme */
+/*************************************************/
+ThemesExtension {
+    color-definition:
+    '#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_START', /* Inactive, unselected part color begin */
+    '#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_END',   /* Inactive, unselected part color end */
+    '#org-eclipse-ui-workbench-INACTIVE_TAB_OUTER_KEYLINE_COLOR',     /* Inactive part outer keyline color */
+    '#org-eclipse-ui-workbench-INACTIVE_TAB_INNER_KEYLINE_COLOR',     /* Inactive part inner keyline color */
+    '#org-eclipse-ui-workbench-INACTIVE_TAB_OUTLINE_COLOR',           /* Inactive part outline color */
+    '#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_START',   /* Active, unselected part color begin */
+    '#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_END',     /* Active, unselected part color end */
+    '#org-eclipse-ui-workbench-ACTIVE_TAB_OUTER_KEYLINE_COLOR',       /* Active part outer keyline color */
+    '#org-eclipse-ui-workbench-ACTIVE_TAB_INNER_KEYLINE_COLOR',       /* Active part inner keyline color */
+    '#org-eclipse-ui-workbench-ACTIVE_TAB_OUTLINE_COLOR';             /* Active part outline color */
+}
+
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_START {
+    color: #D7D7D7;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_UNSELECTED_TABS_COLOR_START')
+}
+
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_END {
+    color: #D7D7D7;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_UNSELECTED_TABS_COLOR_END');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_OUTER_KEYLINE_COLOR {
+    color: #AAAAAA;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_TAB_OUTER_KEYLINE_COLOR');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_INNER_KEYLINE_COLOR {
+    color: #AAAAAA;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_TAB_INNER_KEYLINE_COLOR');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_OUTLINE_COLOR {
+    color: #AAAAAA;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_TAB_OUTLINE_COLOR');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_START {
+    color: #D7D7D7;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_UNSELECTED_TABS_COLOR_START');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_END {
+    color: #D7D7D7;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_UNSELECTED_TABS_COLOR_END');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_OUTER_KEYLINE_COLOR {
+    color: #AAAAAA;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_TAB_OUTER_KEYLINE_COLOR');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_INNER_KEYLINE_COLOR {
+    color: #AAAAAA;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_TAB_INNER_KEYLINE_COLOR');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_OUTLINE_COLOR {
+    color: #AAAAAA;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_TAB_OUTLINE_COLOR');
+}
+
+/* Already existing ColorDefinitions overridden for the E4 default theme */
+/* Inactive, selected part background begin */
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_BG_START {
+    color: #FFFFFF;
+}
+/* Inactive, selected part background end */
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_BG_END {
+    color: #FFFFFF;
+}
+/* Active, selected part background begin */
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_BG_START{
+    color: #FFFFFF;
+}
+/* Active, selected part background end */
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_BG_END {
+    color: #FFFFFF;
+}
+/* Active (no focus), selected part background begin */
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_NOFOCUS_TAB_BG_START {
+    color: #FFFFFF;
+}
+/* Active (no focus), selected part background end */
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_NOFOCUS_TAB_BG_END {
+    color: #FFFFFF;
+}
+
+
+/*********************/
+/* Default resource  */
+/*********************/
+.MToolControl.TrimStack {
+    frame-image: url(./winXPTSFrame.png);
+    handle-image: url(./winXPHandle.png);
+    frame-cuts: 5px 1px 5px 16px;
+}
+
+.MToolBar.Draggable {
+    handle-image: url(./tizenDragHandle.png);
+}
+
+.MToolControl.Draggable {
+    handle-image: url(./tizenDragHandle.png);
+}
+
+
+/*************/
+/* Common UI */
+/*************/
+.MPart.busy {
+    font-style: italic;
+}
+
+.MPart.highlighted {
+    font-weight: bold;
+}
+
+.MPartStack, .MPart {
+    font-family: '#org-eclipse-ui-workbench-TAB_TEXT_FONT';
+}
+
+.DragFeedback {
+    background-color: COLOR-WIDGET-NORMAL-SHADOW;
+}
+
+.ModifiedDragFeedback {
+    background-color: #A0A000;
+}
+
+/* Shell#IDEWindow */
+.MTrimmedWindow {
+    background-color: #999999;
+}
+
+.MTrimmedWindow.topLevel {
+    margin-bottom: 1px;
+    margin-left: 0px;
+    margin-right: 0px;
+    margin-top: 1px;
+}
+
+/* Custom Sash Width */
+.MPartSashContainer {
+    sash-width: 2px;
+}
+
+/* View BG */
+.MPartStack > .MPlaceholder {
+    background-color: #F4F4F4;
+}
+
+/* CTabFolder */
+.MPlaceholder > CTabFolder {
+    background-color: #FFFFFF;
+}
+.MPartStack {
+    padding: 0px 0px 0px;
+    color: #666666; /* unselected tab text */
+
+    swt-tab-renderer: url('bundleclass://org.eclipse.e4.ui.workbench.renderers.swt/org.eclipse.e4.ui.workbench.renderers.swt.TizenTabRendering');
+    swt-selected-tab-fill: #E1E1E1;
+    swt-unselected-tabs-color: #D7D7D7;
+    swt-outer-keyline-color: #AAAAAA;
+    swt-inner-keyline-color: '#org-eclipse-ui-workbench-INACTIVE_TAB_INNER_KEYLINE_COLOR';
+    swt-tab-outline: #AAAAAA;
+    unselected-hot-tab-color-background: #CDE9FF;
+
+    swt-single: false;
+    swt-simple: true;
+    swt-minimize-visible: true;
+    swt-maximize-visible: true;
+    swt-unselected-close-visible: false;
+    swt-shadow-visible: false;
+    swt-tab-height: 30px;
+}
+.MPartStack.active {
+    /**
+     * This color value must match the outerKeyline definitions in TizenTabRendering class
+     * from org.eclipse.e4.ui.workbench.renderers.swt package.
+     */
+    swt-outer-keyline-color: #008AEE;
+}
+
+/* CTabItem */
+.MPartStack > CTabItem:selected {
+    color: #0097DC;
+    swt-show-close: true;
+}
+
+/* Editor */
+#org-eclipse-ui-editorss .MPart {
+    background-color: #F8F8F8;
+}
+
+/* MultiPageEditorPart */
+#org-eclipse-e4-ui-compatibility-editor Composite CTabFolder {
+    padding: 0px 0px 0px;
+    color: #585858; /* unselected tab text */
+
+    swt-tab-renderer: url('bundleclass://org.eclipse.e4.ui.workbench.renderers.swt/org.eclipse.e4.ui.workbench.renderers.swt.Tizen2ndTabRendering');
+    swt-tab-position: top;
+    swt-selected-tab-fill: #FFFFFF;
+    swt-unselected-tabs-color: #FFFFFF;
+    swt-outer-keyline-color: #AAAAAA;
+    swt-inner-keyline-color: '#org-eclipse-ui-workbench-INACTIVE_TAB_INNER_KEYLINE_COLOR';
+    swt-tab-outline: #AAAAAA;
+    unselected-hot-tab-color-background: #CDE9FF;
+
+    swt-single: false;
+    swt-simple: true;
+    swt-shadow-visible: false;
+    swt-tab-height: 30px;
+
+    tizen-selected-tab-underline: false;
+    tizen-unselected-tab-separator: false;
+}
+#org-eclipse-e4-ui-compatibility-editor Composite CTabFolder > CTabItem:selected {
+    color: #0097DC;
+    font-weight: bold;
+    swt-show-close: false;
+}
+
+/* View toolbar BG */
+.MPartStack > Composite {
+    background-color: #E1E1E1;
+}
+
+/* Perspective Line */
+#PerspectiveSwitcher {
+    eclipse-perspective-keyline-color: #F8F8F8 #F8F8F8;
+}
+
+/* Toolbar BG */
+#org-eclipse-ui-main-toolbar {
+    background-color: #F8F8F8;
+}
+
+/* Toolbar - Left Vertical */
+#org-eclipse-ui-trim-vertical1 {
+    background-color: #F8F8F8;
+}
+
+/* Toolbar - Right Vertical */
+#org-eclipse-ui-trim-vertical2 {
+    background-color: #F8F8F8;
+}
+
+/* Status bar BG */
+#org-eclipse-ui-trim-status {
+    background-color: #E1E1E1;
+}
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/css/tizen_linux.css b/rt-ide/org.tizen.common.ui.theme/resources/css/tizen_linux.css
new file mode 100644 (file)
index 0000000..ad0bfca
--- /dev/null
@@ -0,0 +1,14 @@
+@import url("basestyle.css");
+
+/***************/
+/* Linux Image */
+/***************/
+.MToolControl.TrimStack {
+    frame-image: url(./gtkTSFrame.png);
+    handle-image: url(./gtkHandle.png);
+}
+
+/**************/
+/* Linux UI */
+/**************/
+// TODO:
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/css/tizen_macosx.css b/rt-ide/org.tizen.common.ui.theme/resources/css/tizen_macosx.css
new file mode 100644 (file)
index 0000000..a8108d8
--- /dev/null
@@ -0,0 +1,15 @@
+@import url("basestyle.css");
+
+/*************/
+/* Mac Image */
+/*************/
+.MToolControl.TrimStack {
+    frame-image: url(./macTSFrame.png);
+    handle-image: url(./macHandle.png);
+}
+
+
+/**************/
+/* MacOS X UI */
+/**************/
+// TODO:
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/css/tizen_windows.css b/rt-ide/org.tizen.common.ui.theme/resources/css/tizen_windows.css
new file mode 100644 (file)
index 0000000..4cf884d
--- /dev/null
@@ -0,0 +1,16 @@
+@import url("basestyle.css");
+
+/*****************/
+/* Windows Image */
+/*****************/
+.MToolControl.TrimStack {
+    frame-image: url(./winClassicTSFrame.png);
+    handle-image: url(./winClassicHandle.png);
+    frame-cuts: 5px 1px 5px 16px;
+}
+
+
+/**************/
+/* Windows UI */
+/**************/
+// TODO:
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/dragHandle.png b/rt-ide/org.tizen.common.ui.theme/resources/images/dragHandle.png
new file mode 100644 (file)
index 0000000..bea1179
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/dragHandle.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/gtkHandle.png b/rt-ide/org.tizen.common.ui.theme/resources/images/gtkHandle.png
new file mode 100644 (file)
index 0000000..b0288cf
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/gtkHandle.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/gtkTSFrame.png b/rt-ide/org.tizen.common.ui.theme/resources/images/gtkTSFrame.png
new file mode 100644 (file)
index 0000000..dd08bba
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/gtkTSFrame.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/macGrey.png b/rt-ide/org.tizen.common.ui.theme/resources/images/macGrey.png
new file mode 100644 (file)
index 0000000..59075ad
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/macGrey.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/macHandle.png b/rt-ide/org.tizen.common.ui.theme/resources/images/macHandle.png
new file mode 100644 (file)
index 0000000..98b2193
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/macHandle.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/macTSFrame.png b/rt-ide/org.tizen.common.ui.theme/resources/images/macTSFrame.png
new file mode 100644 (file)
index 0000000..ee32cf5
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/macTSFrame.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/tizenDragHandle.png b/rt-ide/org.tizen.common.ui.theme/resources/images/tizenDragHandle.png
new file mode 100644 (file)
index 0000000..16d3d9f
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/tizenDragHandle.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/win7.png b/rt-ide/org.tizen.common.ui.theme/resources/images/win7.png
new file mode 100644 (file)
index 0000000..b9bf09d
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/win7.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/win7Handle.png b/rt-ide/org.tizen.common.ui.theme/resources/images/win7Handle.png
new file mode 100644 (file)
index 0000000..b73a963
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/win7Handle.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/win7TSFrame.png b/rt-ide/org.tizen.common.ui.theme/resources/images/win7TSFrame.png
new file mode 100644 (file)
index 0000000..eec6be6
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/win7TSFrame.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/winClassicHandle.png b/rt-ide/org.tizen.common.ui.theme/resources/images/winClassicHandle.png
new file mode 100644 (file)
index 0000000..cfeb6dd
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/winClassicHandle.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/winClassicTSFrame.png b/rt-ide/org.tizen.common.ui.theme/resources/images/winClassicTSFrame.png
new file mode 100644 (file)
index 0000000..0b9101c
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/winClassicTSFrame.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/winXPBluHandle.png b/rt-ide/org.tizen.common.ui.theme/resources/images/winXPBluHandle.png
new file mode 100644 (file)
index 0000000..45441b3
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/winXPBluHandle.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/winXPBluTSFrame.png b/rt-ide/org.tizen.common.ui.theme/resources/images/winXPBluTSFrame.png
new file mode 100644 (file)
index 0000000..5880d78
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/winXPBluTSFrame.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/winXPBlue.png b/rt-ide/org.tizen.common.ui.theme/resources/images/winXPBlue.png
new file mode 100644 (file)
index 0000000..fc27964
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/winXPBlue.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/winXPHandle.png b/rt-ide/org.tizen.common.ui.theme/resources/images/winXPHandle.png
new file mode 100644 (file)
index 0000000..17eb69a
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/winXPHandle.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/winXPOlive.png b/rt-ide/org.tizen.common.ui.theme/resources/images/winXPOlive.png
new file mode 100644 (file)
index 0000000..c745ee1
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/winXPOlive.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/resources/images/winXPTSFrame.png b/rt-ide/org.tizen.common.ui.theme/resources/images/winXPTSFrame.png
new file mode 100644 (file)
index 0000000..baf45b9
Binary files /dev/null and b/rt-ide/org.tizen.common.ui.theme/resources/images/winXPTSFrame.png differ
diff --git a/rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/Activator.java b/rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/Activator.java
new file mode 100644 (file)
index 0000000..d6a8a55
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * ChangHyun Lee <leechwin.lee@samsung.com>
+ * SangHo Park <sangho.p@samsung.com>
+ *
+ * Licensed 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.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd.
+ *
+ */
+package org.tizen.common.ui.theme;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+    // The plug-in ID
+    public static final String PLUGIN_ID = "org.tizen.common.ui.theme"; //$NON-NLS-1$
+
+    // The shared instance
+    private static Activator plugin;
+
+    /**
+     * The constructor
+     */
+    public Activator() {
+    }
+
+    public void start(BundleContext context) throws Exception {
+        super.start(context);
+        plugin = this;
+    }
+
+    public void stop(BundleContext context) throws Exception {
+        plugin = null;
+        super.stop(context);
+    }
+
+    /**
+     * Returns the shared instance
+     * @return the shared instance
+     */
+    public static Activator getDefault() {
+        return plugin;
+    }
+
+}
diff --git a/rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererSeparatorSWTHandler.java b/rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererSeparatorSWTHandler.java
new file mode 100644 (file)
index 0000000..623d545
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * GiWoong Kim <giwoong.kim@samsung.com>
+ * SangHo Park <sangho.p@samsung.com>
+ *
+ * Licensed 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.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd.
+ *
+ */
+package org.tizen.common.ui.theme.properties.custom;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.e4.ui.css.core.dom.properties.ICSSPropertyHandler;
+import org.eclipse.e4.ui.css.core.engine.CSSEngine;
+import org.eclipse.e4.ui.css.swt.properties.AbstractCSSPropertySWTHandler;
+import org.eclipse.e4.ui.workbench.renderers.swt.TizenTabRendering;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabFolderRenderer;
+import org.eclipse.swt.widgets.Control;
+import org.w3c.dom.css.CSSValue;
+
+@SuppressWarnings("restriction")
+public class CSSPropertyRendererSeparatorSWTHandler extends AbstractCSSPropertySWTHandler {
+
+       public static final String METHOD_SEPARATOR = "setUnselectedTabSeparator";
+
+    public static final ICSSPropertyHandler INSTANCE = new CSSPropertyRendererSeparatorSWTHandler();
+
+    @Override
+    protected void applyCSSProperty(Control control, String property,
+            CSSValue value, String pseudo, CSSEngine engine) throws Exception {
+        if (!(control instanceof CTabFolder)) {
+            return;
+        }
+
+        if (value.getCssValueType() != CSSValue.CSS_PRIMITIVE_VALUE) {
+            return;
+        }
+
+        if ("selected".equals(pseudo)) {
+            CTabFolderRenderer renderer = ((CTabFolder) control).getRenderer();
+            if (!(renderer instanceof TizenTabRendering)) {
+                return;
+            }
+
+            boolean isSeparator = (Boolean) engine.convert(value, Boolean.class, null);
+            Class<?>[] parameterTypes = { Boolean.TYPE };
+            Object[] obj = { isSeparator };
+
+            try {
+                // renderer.setUnselectedTabSeparator(isSeparator);
+                ReflectionUtil.callMethod((Object) renderer, METHOD_SEPARATOR, parameterTypes, obj, true);
+            } catch (InvocationTargetException e) {
+                return;
+            }
+        }
+    }
+
+    @Override
+    protected String retrieveCSSProperty(Control control, String property,
+            String pseudo, CSSEngine engine) throws Exception {
+        return null;
+    }
+}
diff --git a/rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererUnderlineSWTHandler.java b/rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/properties/custom/CSSPropertyRendererUnderlineSWTHandler.java
new file mode 100644 (file)
index 0000000..a51584c
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * GiWoong Kim <giwoong.kim@samsung.com>
+ * SangHo Park <sangho.p@samsung.com>
+ *
+ * Licensed 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.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd.
+ *
+ */
+package org.tizen.common.ui.theme.properties.custom;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.e4.ui.css.core.dom.properties.ICSSPropertyHandler;
+import org.eclipse.e4.ui.css.core.engine.CSSEngine;
+import org.eclipse.e4.ui.css.swt.properties.AbstractCSSPropertySWTHandler;
+import org.eclipse.e4.ui.workbench.renderers.swt.TizenTabRendering;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabFolderRenderer;
+import org.eclipse.swt.widgets.Control;
+import org.w3c.dom.css.CSSValue;
+
+@SuppressWarnings("restriction")
+public class CSSPropertyRendererUnderlineSWTHandler extends AbstractCSSPropertySWTHandler {
+
+    public static final String METHOD_UNDERLINE = "setSelectedTabUnderline";
+
+    public static final ICSSPropertyHandler INSTANCE = new CSSPropertyRendererUnderlineSWTHandler();
+
+    @Override
+    protected void applyCSSProperty(Control control, String property,
+            CSSValue value, String pseudo, CSSEngine engine) throws Exception {
+        if (!(control instanceof CTabFolder)) {
+            return;
+        }
+
+        if (value.getCssValueType() != CSSValue.CSS_PRIMITIVE_VALUE) {
+            return;
+        }
+
+        if ("selected".equals(pseudo)) {
+            CTabFolderRenderer renderer = ((CTabFolder) control).getRenderer();
+            if (!(renderer instanceof TizenTabRendering)) {
+                return;
+            }
+
+            boolean isUnderline = (Boolean) engine.convert(value, Boolean.class, null);
+            Class<?>[] parameterTypes = { Boolean.TYPE };
+            Object[] obj = { isUnderline };
+
+            try {
+                // renderer.setSelectedTabUnderline(isUnderline);
+                ReflectionUtil.callMethod((Object) renderer, METHOD_UNDERLINE, parameterTypes, obj, true);
+            } catch (InvocationTargetException e) {
+                return;
+            }
+        }
+    }
+
+    @Override
+    protected String retrieveCSSProperty(Control control, String property,
+            String pseudo, CSSEngine engine) throws Exception {
+        return null;
+    }
+}
diff --git a/rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/properties/custom/CSSPropertySashWidthSWTHandler.java b/rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/properties/custom/CSSPropertySashWidthSWTHandler.java
new file mode 100644 (file)
index 0000000..4a68fb8
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * ChangHyun Lee <leechwin.lee@samsung.com>
+ * SangHo Park <sangho.p@samsung.com>
+ *
+ * Licensed 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.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd.
+ *
+ */
+package org.tizen.common.ui.theme.properties.custom;
+
+import java.lang.reflect.Field;
+
+import org.eclipse.e4.ui.css.core.dom.properties.ICSSPropertyHandler;
+import org.eclipse.e4.ui.css.core.engine.CSSEngine;
+import org.eclipse.e4.ui.css.swt.dom.CompositeElement;
+import org.eclipse.e4.ui.workbench.renderers.swt.SashLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Layout;
+import org.w3c.dom.css.CSSPrimitiveValue;
+import org.w3c.dom.css.CSSValue;
+
+@SuppressWarnings("restriction")
+/*
+ * TODO: extend AbstractCSSPropertySWTHandler and declare custom adapter
+ * @author giwoong.kim@samsung.com
+ * @since 2016-05-17
+ */
+public class CSSPropertySashWidthSWTHandler implements ICSSPropertyHandler {
+
+    public static final String FIELD_SASH_WIDTH = "sashWidth";
+
+    public CSSPropertySashWidthSWTHandler() {
+    }
+
+    @Override
+    public boolean applyCSSProperty(Object element, String property, CSSValue value, String pseudo, CSSEngine engine) throws Exception {
+        if (!(element instanceof CompositeElement)) {
+            return false;
+        }
+
+        CompositeElement compositeElement = (CompositeElement) element;
+        Object nativeWidget = compositeElement.getNativeWidget();
+        if (!(nativeWidget instanceof Composite)) {
+            return false;
+        }
+
+        Composite composite = (Composite) nativeWidget;
+        Layout layout = composite.getLayout();
+        if (!(layout instanceof SashLayout)) {
+            return false;
+        }
+
+        if (!(value instanceof CSSPrimitiveValue)) {
+            return false;
+        }
+
+        int width = (int) ((CSSPrimitiveValue) value).getFloatValue(CSSPrimitiveValue.CSS_PX);
+        Field field = ReflectionUtil.getField(layout, FIELD_SASH_WIDTH, true);
+        if (field != null) {
+            field.set(layout, width);
+            composite.layout(true, true);
+            return true;
+        }
+
+        return false;
+    }
+
+    @Override
+    public String retrieveCSSProperty(Object element, String property, String pseudo, CSSEngine engine) throws Exception {
+        if (!(element instanceof CompositeElement)) {
+            return null;
+        }
+        CompositeElement compositeElement = (CompositeElement) element;
+        Object nativeWidget = compositeElement.getNativeWidget();
+        if (!(nativeWidget instanceof Composite)) {
+            return null;
+        }
+
+        Composite composite = (Composite) nativeWidget;
+        Layout layout = composite.getLayout();
+        if (!(layout instanceof SashLayout)) {
+            return null;
+        }
+
+        Object obj = ReflectionUtil.getObject(layout, FIELD_SASH_WIDTH, true);
+        if (obj != null) {
+            Integer sashWidth = (Integer) obj;
+            return Integer.toString(sashWidth);
+        }
+
+        return null;
+    }
+
+}
diff --git a/rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/properties/custom/ReflectionUtil.java b/rt-ide/org.tizen.common.ui.theme/src/org/tizen/common/ui/theme/properties/custom/ReflectionUtil.java
new file mode 100644 (file)
index 0000000..f55d064
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: 
+ * BonYong Lee <bonyong.lee@samsung.com>
+ * 
+ * Licensed 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.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.ui.theme.properties.custom;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+
+
+/**
+ * ReflectionUtil. Helper related to java reflection
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class ReflectionUtil {
+    /**
+     * Logger for this class
+     */
+    /**
+     * Create instance whose class is {@code className}
+     * @param className class name
+     * @return instance of {@code className}
+     * @see #tryNewInstance(String, ClassLoader)
+     */
+    public static <T> T tryNewInstance(
+            final String className) {
+        final ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        return tryNewInstance(className, cl);
+    }
+
+    /**
+     * Create instance whose class is {@code className} from {@code loader} using {@link Class#newInstance()}. return {@code null} if creation fails.
+     * @param className class name
+     * @param loader classloader
+     * @return instance of {@code className}
+     * @see Class#newInstance()
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T tryNewInstance(
+            final String className,
+            final ClassLoader loader) {
+        try {
+            final Class<?> clazz = loader.loadClass(className);
+            return (T) clazz.newInstance();
+        } catch (final ClassNotFoundException e) {
+//            logger.info("Class not found:", e);
+        } catch (final InstantiationException e) {
+//            logger.info("Fail to instantiate:", e);
+        } catch (final IllegalAccessException e) {
+//            logger.info("An access of constructor fail:", e);
+        }
+        return null;
+
+    }
+
+    /**
+     * Get a field whose the field name of instance is fieldName.<br>
+     * This method try to traverse super classes.
+     * @param instance the actual instance.
+     * @param fieldName the field name of instance.
+     * @param force Although inaccessible, can access.
+     * @return If get successfully, return a field. otherwise, return null.
+     */
+    public static Field getField(Object instance, String fieldName, boolean force) {
+//        Assert.notNull(instance);
+        try {
+            Class<?> clazz = instance.getClass();
+            while (clazz != null) {
+                try {
+                    Field field = (Field) clazz.getDeclaredField(fieldName);
+                    if (force && !field.isAccessible()) {
+                        field.setAccessible(true);
+                    }
+                    return field;
+                } catch (NoSuchFieldException e) {
+                    // If the field is null, try to traverse super classes.
+                    // and then if not found super class, the clazz is null.
+                    clazz = clazz.getSuperclass();
+                }
+            }
+//            logger.debug("A field is not found.");
+        } catch (IllegalArgumentException e) {
+//            logger.debug("Failed to get a field from the instance: ", e);
+        }
+        return null;
+    }
+
+    /**
+     * Get a object whose the field name of instance is fieldName.<br>
+     * This method try to traverse super classes.
+     * @param instance the actual instance.
+     * @param fieldName the field name of instance.
+     * @param force Although inaccessible, can access.
+     * @return If get successfully, return a object. otherwise, return null.
+     */
+    public static Object getObject(Object instance, String fieldName, boolean force) {
+//        Assert.notNull(instance);
+
+        try {
+            Field field = getField(instance, fieldName, force);
+            if (field != null) {
+                return field.get(instance);
+            }
+//            logger.debug("A object is not found.");
+        } catch (IllegalArgumentException e) {
+//            logger.debug("Failed to get a field from the instance: ", e);
+        } catch (IllegalAccessException e) {
+//            logger.debug("A field is inaccessible: ", e);
+        }
+        return null;
+    }
+
+    /**
+     * Call a method whose the method name of instance is methodName with parameters.<br>
+     * This method try to traverse super classes.
+     * @param instance the actual instance.
+     * @param methodName the method name of instance.
+     * @param paramTypes the type of parameters
+     * @param params the parameters
+     * @param force Although inaccessible, can access.
+     * @return If call successfully, return a return object of method. otherwise, return null.
+     * @throws InvocationTargetException If the method of instance throws an exception.
+     */
+    public static Object callMethod(Object instance, String methodName,
+            Class<?>[] paramTypes, Object[] params, boolean force)
+            throws InvocationTargetException {
+
+//        Assert.notNull(instance);
+
+        try {
+            Class<?> clazz = instance.getClass();
+
+            while (clazz != null) {
+                try {
+                    Method method = clazz.getDeclaredMethod(methodName, paramTypes);
+                    if (force && !method.isAccessible()) {
+                        method.setAccessible(true);
+                    }
+
+                    return method.invoke(instance, params);
+                } catch (NoSuchMethodException e) {
+                    clazz = clazz.getSuperclass();
+                }
+            }
+
+//            logger.debug("A method is not found.");
+        } catch (IllegalArgumentException e) {
+//            logger.debug("Failed to get or call a method from the instance: ", e);
+        } catch (IllegalAccessException e) {
+//            logger.debug("A method is inaccessible: ", e);
+        }
+
+        return null;
+    }
+}
diff --git a/rt-ide/package/addingFiles/IDE.bat b/rt-ide/package/addingFiles/IDE.bat
new file mode 100644 (file)
index 0000000..574da8b
--- /dev/null
@@ -0,0 +1,28 @@
+@echo off
+
+set ide_path=%~dp0
+set sdk_info_path=%ide_path%\..\sdk.info
+
+if exist "%sdk_info_path%" (
+    set key=TIZEN_SDK_INSTALLED_PATH
+    for /f "tokens=1,2 delims==" %%i in ("%sdk_info_path%") do @if %%i==%key% (set sdk_path=%%j)
+) else (
+    set sdk_path=%ide_path%\..\
+)
+
+echo ide path : %ide_path%
+echo sdk_info_path : %sdk_info_path%
+echo sdk path : %sdk_path%
+
+cd /D "%ide_path%"
+
+set Path=%sdk_path%\tools\mingw\bin;%sdk_path%\tools\mingw\msys\1.0\bin;%Path%
+
+if exist "%ide_path%\init" (
+    set eclipse_options=-clean
+)  else (
+    set eclipse_options=
+)
+
+start eclipse.exe %eclipse_options% %*
+exit
diff --git a/rt-ide/package/addingFiles/TizenStudio.bat b/rt-ide/package/addingFiles/TizenStudio.bat
new file mode 100644 (file)
index 0000000..d43fc1b
--- /dev/null
@@ -0,0 +1,27 @@
+@echo off
+
+set ide_path=%~dp0
+set sdk_info_path=%ide_path%\..\sdk.info
+
+if exist "%sdk_info_path%" (
+    set key=TIZEN_SDK_INSTALLED_PATH
+    for /f "tokens=1,2 delims==" %%i in ("%sdk_info_path%") do @if %%i==%key% (set sdk_path=%%j)
+) else (
+    set sdk_path=%ide_path%\..\
+)
+
+echo ide path : %ide_path%
+echo sdk_info_path : %sdk_info_path%
+echo sdk path : %sdk_path%
+
+cd /D "%ide_path%"
+
+set Path=%sdk_path%\tools\mingw\bin;%sdk_path%\tools\mingw\msys\1.0\bin;%Path%
+
+if exist "%ide_path%\init" (
+    set eclipse_options=-clean
+)  else (
+    set eclipse_options=
+)
+
+eclipse.exe %eclipse_options% %*
diff --git a/rt-ide/package/addingFiles/TizenStudio.exe b/rt-ide/package/addingFiles/TizenStudio.exe
new file mode 100644 (file)
index 0000000..c4392fb
Binary files /dev/null and b/rt-ide/package/addingFiles/TizenStudio.exe differ
diff --git a/rt-ide/package/addingFiles/TizenStudio.sh b/rt-ide/package/addingFiles/TizenStudio.sh
new file mode 100644 (file)
index 0000000..193d621
--- /dev/null
@@ -0,0 +1,50 @@
+#!/bin/sh
+start_path=`pwd`
+
+IDE_PATH=`dirname "$(readlink -f $0)"`
+
+## set no_proxy environment
+if [ "x${no_proxy}" = "x" ]
+then
+    export no_proxy="127.0.0.1"
+else
+    export no_proxy="${no_proxy},127.0.0.1"
+fi
+
+## Execute IDE
+eclipse_options="-Dorg.eclipse.swt.browser.DefaultType=MOZILLA"
+
+eclipse_options="${eclipse_options} $@"
+
+cd "${IDE_PATH}"
+
+if [ -e "${IDE_PATH}/init" ]
+then
+    eclipse_options="-clean ${eclipse_options}"
+fi
+
+if [ -e /etc/os-release ]
+then
+    id=`cat /etc/os-release | grep "^ID=" | sed "s/^ID=//g"`
+    version=`cat /etc/os-release | grep "^VERSION_ID=" | sed "s/^VERSION_ID=//g" | sed "s/\"//g"`
+elif [ -e /etc/issue ]
+then
+    id=`cat /etc/issue | awk '{print $1}' | tr [A-Z] [a-z]`
+    ubuntu_version=`cat /etc/issue | awk '{print $2}'`
+    version=`expr substr $ubuntu_version 1 5`
+fi
+
+if [ "${id}" = "ubuntu" ]
+then
+    case "${version}" in
+        11.04|11.10|12.04|12.10|13.04|13.10|14.04)
+            UBUNTU_MENUPROXY=0 LIBOVERLAY_SCROLLBAR=0 ./eclipse ${eclipse_options}
+            ;;
+        *)
+            ./eclipse ${eclipse_options}
+    esac
+else
+    ./eclipse ${eclipse_options}
+fi
+
+cd "${start_path}"
diff --git a/rt-ide/package/addingFiles/base-ide-product/removeSite.xml b/rt-ide/package/addingFiles/base-ide-product/removeSite.xml
new file mode 100644 (file)
index 0000000..6f08eca
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+
+<project default="remove" basedir=".">
+    <echo message="Remove p2 installed local sites." />
+    
+    <property name="SDKPATH" location="${SDKPATH}" />
+    <property name="filename.metafile" value="org.eclipse.equinox.p2.metadata.repository.prefs" />
+    <property name="path.metafile" value="${SDKPATH}/ide/p2/org.eclipse.equinox.p2.engine/profileRegistry/profile.profile/.data/.settings/${filename.metafile}" />
+    <property name="path.newfile" value="${path.metafile}.modified" />
+
+    <target name="checkFile"
+            description="Check a metafile whether exist or not.">
+        <available file="${path.metafile}" property="test.metafile" />
+        <fail unless="test.metafile">
+            No exist "${path.metafile}".
+        </fail>
+        <echo message="Found meta: ${path.metafile}" />
+    </target>
+
+    <target name="remove" depends="checkFile"
+            description="Remove local site contents in a metafile">
+        <!-- create a modified file -->
+        <!-- without like "repositories/file\:__home_tizen-sdk_ide_updatablenative/uri=file\://home/tizen-sdk/ide/updatablenative" -->
+        <copy file="${path.metafile}" tofile="${path.newfile}">
+            <filterchain>
+                <linecontainsregexp>
+                    <regexp pattern="^(?!repositories/file.*_ide_updatable[native|web].*)" />
+                </linecontainsregexp>
+            </filterchain>
+        </copy>
+        <available file="${path.metafile}" property="test.newfile" />
+        <fail unless="test.newfile">
+            Failed to generate a metadata file.
+        </fail>
+        <echo message="Generated meta: ${path.newfile}" />
+
+        <!-- replace a modified file to original -->
+        <move file="${path.newfile}" tofile="${path.metafile}" />
+        <echo message="Replaced Completed." />
+    </target>
+</project>
diff --git a/rt-ide/package/addingFiles/base-web-ide-product/dropins/org.eclipse.jst.j2ee.ejb_1.1.700.v201305012100.jar b/rt-ide/package/addingFiles/base-web-ide-product/dropins/org.eclipse.jst.j2ee.ejb_1.1.700.v201305012100.jar
new file mode 100644 (file)
index 0000000..fee9263
Binary files /dev/null and b/rt-ide/package/addingFiles/base-web-ide-product/dropins/org.eclipse.jst.j2ee.ejb_1.1.700.v201305012100.jar differ
diff --git a/rt-ide/package/addingFiles/executable/windows/win32/eclipse_32.exe b/rt-ide/package/addingFiles/executable/windows/win32/eclipse_32.exe
new file mode 100644 (file)
index 0000000..389e00e
Binary files /dev/null and b/rt-ide/package/addingFiles/executable/windows/win32/eclipse_32.exe differ
diff --git a/rt-ide/package/addingFiles/executable/windows/win64/eclipse_64.exe b/rt-ide/package/addingFiles/executable/windows/win64/eclipse_64.exe
new file mode 100644 (file)
index 0000000..569f53a
Binary files /dev/null and b/rt-ide/package/addingFiles/executable/windows/win64/eclipse_64.exe differ
diff --git a/rt-ide/package/addingFiles/resources/icons/tizen_studio.ico b/rt-ide/package/addingFiles/resources/icons/tizen_studio.ico
new file mode 100644 (file)
index 0000000..7925a8d
Binary files /dev/null and b/rt-ide/package/addingFiles/resources/icons/tizen_studio.ico differ
diff --git a/rt-ide/package/addingFiles/resources/icons/tizen_studio_128.png b/rt-ide/package/addingFiles/resources/icons/tizen_studio_128.png
new file mode 100644 (file)
index 0000000..7578ff9
Binary files /dev/null and b/rt-ide/package/addingFiles/resources/icons/tizen_studio_128.png differ
diff --git a/rt-ide/package/addingFiles/resources/icons/tizen_studio_256.png b/rt-ide/package/addingFiles/resources/icons/tizen_studio_256.png
new file mode 100644 (file)
index 0000000..0ceba95
Binary files /dev/null and b/rt-ide/package/addingFiles/resources/icons/tizen_studio_256.png differ
diff --git a/rt-ide/package/ant-contrib.jar b/rt-ide/package/ant-contrib.jar
new file mode 100644 (file)
index 0000000..ea817cd
Binary files /dev/null and b/rt-ide/package/ant-contrib.jar differ
diff --git a/rt-ide/package/ant-product.xml b/rt-ide/package/ant-product.xml
new file mode 100644 (file)
index 0000000..bc1f451
--- /dev/null
@@ -0,0 +1,673 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<project name="product.build" default="build.all"  >
+
+<!-- =====================================================================
+     - Global properties.  See the build.properties for information on
+     ===================================================================== -->
+       <property name="build.path" value="${SRCDIR}/build_result"/>
+       <property name="build.time" value=""/>
+
+       <property name="build.type" value="N"/>
+       <property name="ide.root.path.name" value="rt-ide"/>
+       <property name="os" value=""/>
+       <property name="build.id" value=""/>
+       <property name="build.result.directory" value=""/>
+       <property name="build.result.path" value=""/>
+       <property name="install.ide.path" value=""/>
+
+       <property name="branding.path" value=""/>
+       <property name="branding.file" value=""/>
+       <property name="base.feature" value=""/>
+
+       <property name="archive.platform.name" value=""/>
+       <property name="windowing" value=""/>
+       <property name="architecture" value=""/>
+       <property name="os" value=""/>
+
+<!-- =====================================================================
+     - set class path for ant-contrib.jar
+     ===================================================================== -->
+       <path id="contrib_classpath">
+               <fileset dir="${SRCDIR}/package">
+                       <include name="ant-contrib.jar" />
+                       <include name="lib/**/*.jar" />
+               </fileset>
+       </path>
+
+<!-- =====================================================================
+     - define taskdef : antcontrib lib => if, for , foreeach
+     ===================================================================== -->
+  <taskdef classpathref="contrib_classpath" resource="net/sf/antcontrib/antlib.xml" />
+
+
+  <scriptdef name="pkgname.and.platform.list" language="javascript">
+       <attribute name="path"/>
+
+   var manifest = attributes.get('path');
+   var file = new java.io.File(manifest);
+   fr = new java.io.FileReader(file);
+   br = new java.io.BufferedReader(fr);
+   var line;
+   var linecount = 0;
+   var array = new Array();
+   var packageOs;
+   var packagename;
+   var osname;
+   while(( line = br.readLine()) != null){
+       linecount++;
+     if(line.contains('Package')){
+                       packagename = line.substring(8);
+     }else if(line.contains('OS')){
+               packageOs = packagename +'@'+line.substring(3);
+               array.push(packageOs);
+     }
+   }
+   project.setProperty('files',array);
+  </scriptdef>
+  <scriptdef name="pkgname.and.platform" language="javascript">
+    <attribute name="pkgname.and.platform"/>
+
+    var pkgandplatform = attributes.get('pkgname.and.platform');
+         var srcSplit = pkgandplatform.split('@');
+         var packagename = srcSplit[0];
+         var platform = srcSplit[1];
+
+         project.setProperty('package.name',srcSplit[0]);
+         project.setProperty('platform',srcSplit[1]);
+
+  </scriptdef>
+<!-- =====================================================================
+     - check supporting target os for curruent build.
+     ===================================================================== -->
+  <target name="build.plugins" description="check supporting target os for curruent build." >
+    <condition property="os.match">
+      <matches string="${platform}" pattern="ubuntu-32$|ubuntu-64$|windows-32$|windows-64$|macos-64$"/>
+    </condition>
+    <fail message="${platform} is not support yet."  unless="os.match"/>
+    <echo message="build plugin for ${platform}" />
+
+  </target>
+
+<!-- =====================================================================
+     - set parameter for build and packaging.
+     ===================================================================== -->
+  <target name="set.parameter" description="set parameter for build and packaging." >
+    <echo message="set parameter for build plugin to ${TARGET_OS}" />
+       <var name="build.id" unset="true"/>
+       <property name="build.id" value="${package.name}"/>
+       <var name="build.result.directory" unset="true"/>
+       <property name="build.result.directory" value="${build.type}.${build.id}"/>
+       <var name="build.result.path" unset="true"/>
+       <property name="build.result.path" value="${build.path}/${build.result.directory}"/>
+    <!-- Below properties would be replaced when target os is macos-->
+    <property name="eclipse.root.path" value="eclipse" /> <!---->
+    <property name="eclipse.root.path.parent" value=".." /> <!-- Idicate eclipse parent folder. In Mac, it should be parent foder of Eclipse.app (from 4.5)-->
+    <property name="archivePrefix" value="${build.id}" />
+    <property name="ide.root.package.name" value="${package.name}"/> <!--e.g. base-ide-product , base-ide-product.app(Mac) -->
+    <!-- End of replacable properties-->  
+    <switch value="${platform}">
+      <case value="ubuntu-32">
+        <var name="archive.platform.name" unset="true"/>
+                               <property name="archive.platform.name" value="linux"/>
+                               <var name="windowing" unset="true"/>
+                               <property name="windowing" value="gtk"/>
+                               <var name="architecture" unset="true"/>
+                               <property name="architecture" value="x86"/>
+                               <var name="os" unset="true"/>
+                               <property name="os" value="linux"/>
+      </case>
+      <case value="windows-32">
+        <var name="archive.platform.name" unset="true"/>
+                               <property name="archive.platform.name" value="win32"/>
+                               <var name="windowing" unset="true"/>
+                               <property name="windowing" value="win32"/>
+                               <var name="architecture" unset="true"/>
+                               <property name="architecture" value="x86"/>
+                               <var name="os" unset="true"/>
+                               <property name="os" value="windows"/>
+      </case>
+      <case value="ubuntu-64">
+        <var name="archive.platform.name" unset="true"/>
+                               <property name="archive.platform.name" value="linux"/>
+                               <var name="windowing" unset="true"/>
+                               <property name="windowing" value="gtk"/>
+                               <var name="architecture" unset="true"/>
+                               <property name="architecture" value="x86_64"/>
+                               <var name="os" unset="true"/>
+                               <property name="os" value="linux"/>
+      </case>
+      <case value="windows-64">
+        <var name="archive.platform.name" unset="true"/>
+                               <property name="archive.platform.name" value="win32"/>
+                               <var name="windowing" unset="true"/>
+                               <property name="windowing" value="win32"/>
+                               <var name="architecture" unset="true"/>
+                               <property name="architecture" value="x86_64"/>
+                               <var name="os" unset="true"/>
+                               <property name="os" value="windows"/>
+      </case>
+        <case value="macos-64">
+            <var name="archive.platform.name" unset="true"/>
+            <property name="archive.platform.name" value="macosx"/>
+            <var name="windowing" unset="true"/>
+            <property name="windowing" value="cocoa"/>
+            <var name="architecture" unset="true"/>
+            <property name="architecture" value="x86_64"/>
+            <var name="os" unset="true"/>
+            <property name="os" value="macos"/>
+            <var name="eclipse.root.path" unset="true" />
+            <property name="eclipse.root.path" value="Eclipse.app/Contents/Eclipse" />
+            <var name="eclipse.root.path.parent" unset="true" />
+            <property name="eclipse.root.path.parent" value="../../.." />
+            <var name="archivePrefix" unset="true" />
+            <property name="archivePrefix" value="${build.id}.app"/>
+            <var name="ide.root.package.name" unset="true" />
+            <property name="ide.root.package.name" value="${package.name}.app"/>
+        </case>
+      <default>
+       <fail message="${TARGET_OS} is not support yet."  unless="false"/>
+      </default>
+    </switch>
+
+    <property name="result.archive.file" value="${build.id}-${archive.platform.name}.${windowing}.${architecture}.zip"/>
+    <property name="reference.ide.path" value="${ROOTDIR}/eclipse-pde/${eclipse.root.path}"/>
+    <echo message="result.archive.file : ${result.archive.file}" />
+    <echo message="reference.ide.path : ${reference.ide.path}" />
+  </target>
+
+<!-- =====================================================================
+     - set parameter for feature properties of target build
+     ===================================================================== -->
+       <target name="set.build.parameter" description="remove leggacy directory and files.">
+         <var name="branding.path" unset="true"/>
+         <property name="branding.path" value="org.tizen.base.platform"/>
+
+         <switch value="${package.name}">
+        <case value="base-ide-product">
+          <var name="branding.file" unset="true"/>
+                 <property name="branding.file" value="TizenIDE_base_${os}.product"/>
+                 <var name="base.feature" unset="true"/>
+                 <property name="base.feature" value="org.tizen.base.feature"/>
+        </case>
+        <case value="base-native-ide-product">
+          <var name="branding.file" unset="true"/>
+                 <property name="branding.file" value="TizenIDE_base_${os}_native.product"/>
+                 <var name="base.feature" unset="true"/>
+                 <property name="base.feature" value="org.tizen.base.native.feature"/>
+        </case>
+<!--
+               <case value="base-web-ide-product">
+          <var name="branding.file" unset="true"/>
+                 <property name="branding.file" value="TizenIDE_base_${os}_web.product"/>
+                 <var name="base.feature" unset="true"/>
+                 <property name="base.feature" value="org.tizen.base.web.feature"/>
+        </case>
+-->
+      <default>
+       <fail message="${package.name} is not support yet."  unless="false"/>
+      </default>
+    </switch>
+
+  </target>
+
+<!-- =====================================================================
+     - set parameter for INSTALL.DIR
+     ===================================================================== -->
+  <target name="set.install.parameter" description="remove leggacy directory and files.">
+        <property name="install.dir" value="${SRCDIR}/package/${package.name}.package.${platform}/data"/>
+  </target>
+
+<!-- =====================================================================
+     - remove legacy directory and files.
+     ===================================================================== -->
+  <target name="build.clean" description="remove leggacy directory and files.">
+    <delete dir="${build.result.path}/${archive.platform.name}.${windowing}.${architecture}" />
+
+       <delete file="${build.result_path}/${result.archive.file}" />
+       <delete dir="${build.path}/buildRepo" />
+       <delete includeemptydirs="true">
+      <fileset dir="${build.path}" includes="*.xml, *.properties , *.clean" erroronmissingdir="false"/>
+    </delete>
+       <delete dir="${build.path}/plugins" />
+       <delete dir="${build.path}/features" />
+
+  </target>
+
+<!-- =====================================================================
+     - create build directory.
+     ===================================================================== -->
+  <target name="build.init" depends="build.clean" description="creage build directory." >
+    <mkdir dir="${build.path}" />
+    <mkdir dir="${build.path}/plugins" />
+       <mkdir dir="${build.path}/features" />
+       <var name="build.time" unset="true"/>
+       <tstamp>
+         <format property="build.time" pattern="yyyyMMdd-HHmm" locale="en"/>
+       </tstamp>
+  </target>
+
+<!-- =====================================================================
+     - copy features from ${SRCDIR} to $build.path/features.
+     ===================================================================== -->
+  <target name="copy.build.sources" description="copy features from ${SRCDIR} to $build.path/features." >
+    <copy todir="${build.path}/plugins" >
+      <fileset dir="${SRCDIR}" excludes="**/build_result/**" erroronmissingdir="false" />
+    </copy>
+    <copy todir="${build.path}/features" >
+      <fileset dir="${SRCDIR}" excludes="**/build_result/**" erroronmissingdir="false" />
+    </copy>
+
+       <delete includeemptydirs="true">
+      <fileset dir="${build.path}/plugins" includes="*.feature/**"/>
+    </delete>
+
+  </target>
+
+<!-- =====================================================================
+     - Set product's version (${product_version})
+     ===================================================================== -->
+  <target name="set.product.version" description="copy features from ${SRCDIR} to $build.path/features." >
+    <var name="build.time" unset="true"/>
+       <tstamp>
+         <format property="build.time" pattern="yyyyMMdd-HHmm" locale="en"/>
+       </tstamp>
+
+    <property name="product.path" value="${build.path}/plugins/${branding.path}/${branding.file}"/>
+       <property name="about.mapping.path" value="${build.path}/plugins/${branding.path}/about.mappings"/>
+       <property name="about.build.time.parameter" value="2"/>
+       <echo> product.path : ${product.path} || about.mapping.path : ${about.mapping.path} || about.build.time.parameter : ${about.build.time.parameter} || build.time : ${build.time}</echo>
+       <propertyfile file="${about.mapping.path}">
+      <entry  key="${about.build.time.parameter}" value="${build.time}"/>
+    </propertyfile>
+
+  </target>
+
+<!-- =====================================================================
+     - create properties file for ant build.
+     ===================================================================== -->
+       <target name="gen.ant.properties.file" description="create properties file for ant build." >
+    <property name="builder.path" value="${SRCDIR}/builder"/>
+    <property name="parent.path.of.based.eclipse" value="${reference.ide.path}/${eclipse.root.path.parent/}"/>
+    <echo>builder.path : ${builder.path}</echo>
+    <echo>parent.path.of.based.eclipse : ${parent.path.of.based.eclipse}</echo>
+
+    <if>
+        <available file="${builder.path}/build.properties.clean"/>
+        <then>
+           <echo>Make build.properties file...</echo>
+        </then>
+        <else>
+           <fail message="ERROR : ${builder.path}/build.properties.clean file does not exist..."  unless="false"/>
+        </else>
+    </if>
+
+    <copy file="${builder.path}/build.properties.clean" tofile="${build.path}/build.properties" />
+    <copy file="${builder.path}/customTargets.xml" tofile="${build.path}/customTargets.xml" />
+
+    <if>
+        <available file="${reference.ide.path}" type="dir"/>
+        <then>
+          <echo>${reference.ide.path} exist...</echo>
+          <propertyfile file="${build.path}/build.properties">
+                   <entry  key="product" value="${branding.path}/${branding.file}"/>
+                       <entry  key="outputUpdateJars" value="true"/>
+                       <entry  key="topLevelElementId" value="${base.feature}"/>
+            <entry  key="buildDirectory" value="${build.path}"/>
+                       <entry  key="base" value="${parent.path.of.based.eclipse}"/>
+                       <entry  key="baseLocation" value="${reference.ide.path}"/>
+            <entry  key="configs" value="${archive.platform.name},${windowing},${architecture}"/>
+            <entry  key="buildType" value="${build.type}"/>
+            <entry  key="buildId" value="${build.id}"/>
+            <entry  key="archivePrefix" value="${archivePrefix}"/>
+          </propertyfile>
+        </then>
+        <else>
+           <fail message="ERROR : Target(${reference.ide.path}) eclipse is not exist...."  unless="false"/>
+        </else>
+    </if>
+
+       </target>
+
+<!-- =====================================================================
+     - execute Product Ant Builder...
+     ===================================================================== -->
+  <target name="execute.pde.build" description="execute Product Ant Builder..." >
+    <dirset dir="${reference.ide.path}/plugins" id="dirId" >
+      <include name="org.eclipse.pde.build_*"/>
+    </dirset>
+    <property name="pde.build.path" refid="dirId" />
+
+    <fileset dir="${reference.ide.path}/plugins" id="fileId" >
+      <include name="org.eclipse.equinox.launcher_*.jar"/>
+    </fileset>
+       <property name="equinox.launcher" refid="fileId" />
+
+    <java jar="${reference.ide.path}/plugins/${equinox.launcher}"
+           fork="true"
+           failonerror="true"
+           maxmemory="256m"
+    >
+    <arg line="-server -XX:+UseParNewGC -application org.eclipse.ant.core.antRunner -buildfile ${reference.ide.path}/plugins/${pde.build.path}/scripts/productBuild/productBuild.xml
+       -Dbuilder=${build.path} -Dosgi.locking=none "/>
+
+    </java>
+  </target>
+
+<!-- =====================================================================
+     - unzip plugin pack.
+     ===================================================================== -->
+  <target name="unzip.plugin.pack" depends="build.plugins, set.parameter , set.build.parameter, build.init ,set.install.parameter, copy.build.sources, set.product.version , gen.ant.properties.file ,execute.pde.build" description="unzip plugin pack." >
+    <echo>unzip to ${package.name}</echo>
+    <!--<unzip src="${build.result.path}/${result.archive.file}" dest="${build.result.path}/${archive.platform.name}.${windowing}.${architecture}"/>    -->
+        <switch value="${package.name}">
+        <case value="base-ide-product">
+                 <mkdir dir="${build.path}/buildRepo_base" />
+                 <move todir="${build.path}/buildRepo_base">
+            <fileset dir="${build.path}/buildRepo"/>
+          </move>
+          <unzip src="${build.result.path}/${result.archive.file}" dest="${build.result.path}/${archive.platform.name}.${windowing}.${architecture}"/>
+        </case>
+        <case value="base-native-ide-product">
+                 <antcall target="buildRepo.clean">
+                 <param name="src.dir" value="${build.path}/buildRepo"/>
+                         <param name="base.dir" value="${build.path}/buildRepo_base"/>
+             </antcall>
+          <mkdir dir="${build.result.path}/${archive.platform.name}.${windowing}.${architecture}" />
+                 <move todir="${build.result.path}/${archive.platform.name}.${windowing}.${architecture}/${package.name}/">
+            <fileset dir="${build.path}/buildRepo"/>
+          </move>
+        </case>
+<!--
+               <case value="base-web-ide-product">
+                 <antcall target="buildRepo.clean">
+                 <param name="src.dir" value="${build.path}/buildRepo"/>
+                         <param name="base.dir" value="${build.path}/buildRepo_base"/>
+             </antcall>
+          <mkdir dir="${build.result.path}/${archive.platform.name}.${windowing}.${architecture}" />
+                 <move todir="${build.result.path}/${archive.platform.name}.${windowing}.${architecture}/${package.name}/">
+            <fileset dir="${build.path}/buildRepo"/>
+          </move>
+        </case>-->
+      <default>
+       <fail message="${package.name} is not support yet."  unless="false"/>
+      </default>
+    </switch>
+       <echo>${package.name} : ${build.result.path}/${archive.platform.name}.${windowing}.${architecture}</echo>
+  </target>
+
+<!-- =====================================================================
+     - request the package build.
+     ===================================================================== -->
+  <target name="build" description="request the package build.">
+               <pkgname.and.platform.list path="${SRCDIR}/package/pkginfo.manifest" />
+               <for param="line" list="${files}" >
+                       <sequential>
+        <pkgname.and.platform pkgname.and.platform="@{line}" />
+        <if>
+          <equals arg1="${TARGET_OS}" arg2="${platform}" />
+          <then>
+            <echo> Product Build Start : ${platform} : ${package.name} </echo>
+                       <antcall target="unzip.plugin.pack" />
+          </then>
+        <else>
+          <echo message="check pass target os : ${platform}" />
+        </else>
+        </if>
+      </sequential>
+               </for>
+  </target>
+<!-- =====================================================================
+     - remove legacy packaging directory and files.
+     ===================================================================== -->
+  <target name="packaging.clean" description="remove legacy directory and files.">
+    <delete dir="${install.dir}" />
+  </target>
+
+<!-- =====================================================================
+     - create packaging directory.
+     ===================================================================== -->
+  <target name="packaging.init" depends="packaging.clean" description="create packaging directory." >
+    <mkdir dir="${install.dir}" />
+  </target>
+
+<!-- =====================================================================
+     - process packaging for build plugins.
+     ===================================================================== -->
+  <target name="packaging.plugins" depends="set.parameter, set.install.parameter, packaging.init " description="process packaging for build plugins." >
+    <var name="install.ide.path" unset="true"/>
+    <switch value="${ide.root.package.name}">
+        <case value="base-ide-product">
+          <property name="install.ide.path" value="${install.dir}/${ide.root.path.name}"/>
+        </case>
+        <case value="base-ide-product.app">
+           <property name="install.ide.path" value="${install.dir}/IDE.app/"/>
+        </case>
+        <case value="base-native-ide-product">
+          <property name="install.ide.path" value="${install.dir}/${ide.root.path.name}/updatablenative"/>
+        </case><!--
+               <case value="base-web-ide-product">
+         <property name="install.ide.path" value="${install.dir}/${ide.root.path.name}/updatableweb"/>
+        </case>-->
+      <default>
+       <fail message="${package.name} is not support yet."  unless="false"/>
+      </default>
+    </switch>
+       <echo> packaging.plugins : ${package.name} : : ${install.ide.path}</echo>
+
+       <mkdir dir="${install.ide.path}" />
+      <echo>archive.platform.name: ${archive.platform.name}</echo>
+      <echo>windowing: ${windowing}</echo>
+      <echo>architecture: ${architecture}</echo>
+      <echo>package.name: ${package.name}</echo>
+       <copy todir="${install.ide.path}" >
+      <fileset dir="${build.result.path}/${archive.platform.name}.${windowing}.${architecture}/${ide.root.package.name}" excludes=".eclipseproduct" erroronmissingdir="false" />
+    </copy>
+
+
+       <if>
+        <available file="${install.ide.path}/startup.sh"/>
+        <then>
+           <echo> startup.sh file exist...</echo>
+                  <exec executable = "chmod" dir = "${install.ide.path}">
+               <arg value = "+x" />
+               <arg value = "startup.sh" />
+           </exec>
+        </then>
+        <else>
+           <echo> startup.sh file not exist...</echo>
+        </else>
+    </if>
+
+       <if>
+        <available file="${install.ide.path}/Contents/MacOS/IDE" />
+        <then>
+           <echo> MacOS/IDE file exist...</echo>
+                  <exec executable = "chmod" dir = "${install.ide.path}/Contents/MacOS/">
+               <arg value = "+x" />
+               <arg value = "IDE" />
+           </exec>
+        </then>
+        <else>
+           <echo> MacOS/IDE file not exist...</echo>
+        </else>
+    </if>
+    <!--
+        =====================================================================
+    To resolve Apple JDK issue( Opening dialog of finding legacy JDK when starting IDE.app ) ,
+    replace Info.plist .
+
+    @Reference :
+     1. http://stackoverflow.com/questions/24427985/edit-the-info-plist-after-eclipse-product-build/24455040#24455040
+     2. https://bugs.eclipse.org/bugs/show_bug.cgi?id=436089
+    @Hyeongseok Heo , 2015-11-01
+        ===================================================================== -->
+    <if>
+        <available file="${install.ide.path}/IDE.app/Contents/Info.plist" />
+        <then>
+            <echo> Info.plist file exist...It'll be deleted.</echo>
+            <delete file="${install.ide.path}/IDE.app/Contents/Info.plist"/>
+        </then>
+        <else>
+           <echo> Info.plist file not exist...</echo>
+        </else>
+    </if>
+
+    <if>
+        <available file="${install.ide.path}/IDE.app/Contents/NewInfo.plist" />
+        <then>
+           <echo> NewInfo.plist file is rename to Info.plist...</echo>
+           <move file="${install.ide.path}/IDE.app/Contents/NewInfo.plist" tofile="${install.ide.path}/IDE.app/Contents/Info.plist" />
+        </then>
+        <else>
+           <echo> NewInfo.plist file not exist...</echo>
+        </else>
+    </if>
+
+       <if>
+        <available file="${install.ide.path}/eclipse"/>
+        <then>
+           <echo> eclipse file exist...</echo>
+                  <exec executable = "chmod" dir = "${install.ide.path}">
+               <arg value = "+x" />
+               <arg value = "eclipse" />
+           </exec>
+        </then>
+        <else>
+           <echo> eclipse file not exist...</echo>
+        </else>
+    </if>
+
+       <if>
+        <available file="${install.ide.path}/launcher"/>
+        <then>
+           <echo> launcher file exist...</echo>
+                  <delete file="${install.ide.path}/launcher" />
+        </then>
+        <else>
+           <echo> launcher file not exist...</echo>
+        </else>
+    </if>
+
+    <!-- Delete garbage files (Mac)-->
+       <if>
+        <available file="${install.ide.path}/Contents/Eclipse/Eclipse.app"/>
+        <then>
+           <echo> ${install.ide.path}/Contents/Eclipse/Eclipse.app file exist...Delete the Eclipse.app</echo>
+                  <delete dir="${install.ide.path}/Contents/Eclipse/Eclipse.app" />
+        </then>
+        <else>
+           <echo> Eclipse.app file not exist...</echo>
+        </else>
+    </if>
+    <if>
+      <available file="${install.ide.path}/Contents/Eclipse/IDE.app"/>
+      <then>
+     <echo> IDE.app file exist...Delete the IDE.app</echo>
+     <delete dir="${install.ide.path}/Contents/Eclipse/IDE.app" />
+      </then>
+    <else>
+       <echo> ${install.ide.path}/Contents/Eclipse/IDE.app file not exist... </echo>
+    </else>
+    </if>
+
+       <if>
+        <available file="${install.ide.path}/launcher.exe"/>
+        <then>
+           <echo> launcher.exe file exist...</echo>
+                  <delete file="${install.ide.path}/launcher.exe" />
+        </then>
+        <else>
+           <echo> launcher.exe file not exist...</echo>
+        </else>
+    </if>
+
+    <if>
+        <equals arg1="${package.name}" arg2="base-web-ide-product" />
+          <then>
+            <copy todir="${install.dir}/${ide.root.path.name}" >
+              <fileset dir="${SRCDIR}/package/addingFiles/base-web-ide-product" erroronmissingdir="false" />
+            </copy>
+          </then>
+    </if>
+
+    <if>
+        <equals arg1="${package.name}" arg2="base-ide-product" />
+          <then>
+            <copy todir="${install.dir}/${ide.root.path.name}" >
+              <fileset dir="${SRCDIR}/package/addingFiles/base-ide-product" erroronmissingdir="false" />
+            </copy>
+          </then>
+    </if>
+  </target>
+<!-- =====================================================================
+     - request the package install.
+     ===================================================================== -->
+  <target name="install" description="request the package build.">
+               <pkgname.and.platform.list path="${SRCDIR}/package/pkginfo.manifest" />
+               <for param="line" list="${files}" >
+                       <sequential>
+        <pkgname.and.platform pkgname.and.platform="@{line}" />
+        <if>
+          <equals arg1="${TARGET_OS}" arg2="${platform}" />
+          <then>
+            <echo> Product Build Start : ${platform} : ${package.name} </echo>
+                       <antcall target="packaging.plugins" />
+          </then>
+        <else>
+          <echo message="check pass target os : ${platform}" />
+        </else>
+        </if>
+      </sequential>
+               </for>
+  </target>
+
+<!-- =====================================================================
+     - request the package install.
+     ===================================================================== -->
+  <target name="clean" description="request the package build.">
+    <delete includeemptydirs="true">
+      <fileset dir="${SRCDIR}" includes="*.zip , *.tar.gz" erroronmissingdir="false"/>
+    </delete>
+       <delete includeemptydirs="true">
+      <fileset dir="${SRCDIR}" includes="*.xml, *.properties , *.clean" erroronmissingdir="false"/>
+    </delete>
+       <delete dir="${build.path}" />
+  </target>
+
+<!-- =====================================================================
+     - request the package install.
+     ===================================================================== -->
+  <target name="buildRepo.clean" description="request the package build.">
+    <echo> SRC DIR : ${src.dir} || BASE DIR : ${base.dir} </echo>
+    <delete>
+      <dirset dir="${src.dir}/binary"  erroronmissingdir="false" >
+            <present present="both" targetdir="${base.dir}/binary"/>
+      </dirset>
+         <fileset dir="${src.dir}/binary" erroronmissingdir="false" >
+            <present present="both" targetdir="${base.dir}/binary"/>
+      </fileset>
+    </delete>
+       <delete>
+      <dirset dir="${src.dir}/plugins"  erroronmissingdir="false" >
+            <present present="both" targetdir="${base.dir}/plugins"/>
+      </dirset>
+         <fileset dir="${src.dir}/plugins" erroronmissingdir="false" >
+            <present present="both" targetdir="${base.dir}/plugins"/>
+      </fileset>
+    </delete>
+       <delete>
+      <dirset dir="${src.dir}/features"  erroronmissingdir="false" >
+            <present present="both" targetdir="${base.dir}/features"/>
+      </dirset>
+         <fileset dir="${src.dir}/features" erroronmissingdir="false" >
+            <present present="both" targetdir="${base.dir}/features"/>
+      </fileset>
+    </delete>
+
+  </target>
+
+
+  <target name="build.all" depends="clean, build, install" description="Build and Packaging for all plugins in requested git"/>
+  <!--<target name="build.all" depends="test.test" description="Build and Packaging for all plugins in requested git"/> -->
+
+</project>
diff --git a/rt-ide/package/build.linux b/rt-ide/package/build.linux
new file mode 100644 (file)
index 0000000..1ab10a4
--- /dev/null
@@ -0,0 +1,118 @@
+#!/bin/bash -x
+
+###############################################################################
+## Available argument
+## $1: clean, build, install
+
+
+###############################################################################
+## DIBS variable
+## ${SRCDIR}: Git source directory ex) ~/product
+## ${ROOTDIR}: Build root directory ex) ~/buildroot
+## ${TARGET_OS}: Current build os ex) ubuntu-32
+
+PACKAGE_NAME=rt-ide-product
+BRANCH=develop
+INSTALL_DIR=${SRCDIR}/package/$PACKAGE_NAME.package.${TARGET_OS}/data
+
+clean() {
+    echo "Clean Started."
+    rm -rf $INSTALL_DIR
+    if [ -d "/tmp/eclipse-pde" ]; then
+      rm -rf /tmp/eclipse-pde
+      echo 'Removed target platform'
+    fi
+    echo "Clean Finished."
+}
+
+# build
+build() {
+    echo "Build Started."
+    echo "Set dependence modues"
+
+    if [ -d "${ROOTDIR}/eclipse-pde" ]; then
+      sed -i "s|REPOSITORY_PATH|file:/${ROOTDIR}/eclipse-pde/repository_mars2/|g" ${SRCDIR}/tizen.releng.prereqs/tizen-releng-prereqs.target
+      export MAVEN_OPTS="-Dmaven.repo.local=${ROOTDIR}/eclipse-pde/m2/repository"
+    else
+      echo "no repository exists"
+      exit 1
+    fi
+    echo "Sync git sub modules"
+    cd ${SRCDIR}
+    #git submodule init
+    #git submodule update
+    #git submodule foreach 'git checkout advux'
+    git clone spin:sdk/ide/eclipse.platform.ui ./tizen.upsteam.patches/eclipse.platform.ui -b ${BRANCH}
+    git clone spin:sdk/ide/eclipse.platform.swt ./tizen.upsteam.patches/eclipse.platform.swt -b ${BRANCH}
+    git clone spin:sdk/ide/eclipse.platform.swt.binaries ./tizen.upsteam.patches/eclipse.platform.swt.binaries -b ${BRANCH}
+    git clone spin:sdk/ide/eclipse.platform.text ./tizen.upsteam.patches/eclipse.platform.text -b ${BRANCH}
+    git clone spin:sdk/ide/eclipse.platform.debug ./tizen.upsteam.patches/eclipse.platform.debug -b ${BRANCH}
+    git clone spin:sdk/ide/org.eclipse.cdt ./tizen.upsteam.patches/org.eclipse.cdt -b ${BRANCH}
+    git clone spin:sdk/ide/webtools.jsdt ./tizen.upsteam.patches/webtools.jsdt -b ${BRANCH}
+    git clone spin:sdk/ide/webtools.sourceediting ./tizen.upsteam.patches/webtools.sourceediting -b ${BRANCH}
+    git clone spin:sdk/ide/eclipse.platform.team ./tizen.upsteam.patches/eclipse.platform.team -b ${BRANCH}
+    git clone spin:sdk/ide/eclipse.platform.ua ./tizen.upsteam.patches/eclipse.platform.ua -b ${BRANCH}
+    git clone spin:sdk/ide/egit ./tizen.upsteam.patches/egit -b ${BRANCH}
+    cd ./tizen.releng
+    mvn clean verify -P ${TARGET_OS}
+    cd ../
+    echo "Build Finished."
+}
+
+# install
+install() {
+    echo "Install Started."
+    mkdir -p ${INSTALL_DIR}
+    case ${TARGET_OS} in
+      windows-32)
+        mv ${SRCDIR}/tizen.product/target/products/org.tizen.rt.ide/win32/win32/x86/* ${INSTALL_DIR}
+        mv ${SRCDIR}/package/addingFiles/TizenStudioRT.exe ${INSTALL_DIR}/rt-ide/
+        mv ${SRCDIR}/package/addingFiles/resources ${INSTALL_DIR}/rt-ide/
+        # remove console executabled
+        rm -rf ${INSTALL_DIR}/rt-ide/eclipsec.exe
+        rm -rf ${INSTALL_DIR}/rt-ide/launcher.exe
+        rm -rf ${INSTALL_DIR}/rt-ide/IDE.bat
+        rm -rf ${INSTALL_DIR}/rt-ide/eclipse.exe
+        cp -rf ${SRCDIR}/package/addingFiles/executable/windows/win32/eclipse_32.exe ${INSTALL_DIR}/rt-ide/eclipse.exe
+               cp -rf ${SRCDIR}/../resources/templates/* ${INSTALL_DIR}/rt-ide/resources/templates/
+        ;;
+      windows-64)
+        mv ${SRCDIR}/tizen.product/target/products/org.tizen.rt.ide/win32/win32/x86_64/* ${INSTALL_DIR}
+        mv ${SRCDIR}/package/addingFiles/TizenStudioRT.exe ${INSTALL_DIR}/rt-ide/
+        mv ${SRCDIR}/package/addingFiles/resources ${INSTALL_DIR}/rt-ide/
+        # remove console executable
+        rm -rf ${INSTALL_DIR}/rt-ide/eclipsec.exe
+        rm -rf ${INSTALL_DIR}/rt-ide/launcher.exe
+        rm -rf ${INSTALL_DIR}/rt-ide/IDE.bat
+        rm -rf ${INSTALL_DIR}/rt-ide/eclipse.exe
+        cp -rf ${SRCDIR}/package/addingFiles/executable/windows/win64/eclipse_64.exe ${INSTALL_DIR}/rt-ide/eclipse.exe
+               cp -rf ${SRCDIR}/../resources/templates/* ${INSTALL_DIR}/rt-ide/resources/templates/
+        ;;
+      ubuntu-32)
+        mv ${SRCDIR}/tizen.product/target/products/org.tizen.rt.ide/linux/gtk/x86/* ${INSTALL_DIR}
+        mv "${SRCDIR}/package/addingFiles/TizenStudioRT.sh" ${INSTALL_DIR}/rt-ide/
+        mv ${SRCDIR}/package/addingFiles/resources ${INSTALL_DIR}/rt-ide/
+               cp -rf ${SRCDIR}/../resources/templates/* ${INSTALL_DIR}/rt-ide/resources/templates/
+        # remove console executable
+        rm -rf ${INSTALL_DIR}/rt-ide/launcher
+        ;;
+      ubuntu-64)
+        mv ${SRCDIR}/tizen.product/target/products/org.tizen.rt.ide/linux/gtk/x86_64/* ${INSTALL_DIR}
+        mv "${SRCDIR}/package/addingFiles/TizenStudioRT.sh" ${INSTALL_DIR}/rt-ide/
+        mv ${SRCDIR}/package/addingFiles/resources ${INSTALL_DIR}/rt-ide/
+               cp -rf ${SRCDIR}/../resources/templates/* ${INSTALL_DIR}/rt-ide/resources/templates/
+        # remove console executable
+        rm -rf ${INSTALL_DIR}/rt-ide/launcher
+        ;;
+      macos-64)
+        mv ${SRCDIR}/tizen.product/target/products/org.tizen.rt.ide/macosx/cocoa/x86_64/* ${INSTALL_DIR}
+               cp -rf ${SRCDIR}/../resources/templates/* ${INSTALL_DIR}/rt-ide/resources/templates/
+        ;;
+     esac
+     echo "Install Finished."
+
+}
+
+[ "$1" = "clean" ] && clean
+[ "$1" = "build" ] && build
+[ "$1" = "install" ] && install
diff --git a/rt-ide/package/changelog b/rt-ide/package/changelog
new file mode 100644 (file)
index 0000000..66b4012
--- /dev/null
@@ -0,0 +1,3 @@
+* 1.0.1
+- tizen rt product init
+== Jooyoul Lee <jy.exe.lee@samsung.com> 2017-02-17
\ No newline at end of file
diff --git a/rt-ide/package/pkginfo.manifest b/rt-ide/package/pkginfo.manifest
new file mode 100644 (file)
index 0000000..f4b441a
--- /dev/null
@@ -0,0 +1,38 @@
+Version:3.0.116
+Source:product
+Maintainer:hyeongseok heo <harry.heo@samsung.com>, yoonki park <yoonki.park@samsung.com>
+
+Package:base-ide-product
+OS:ubuntu-32
+Build-host-os:ubuntu-64
+Build-dependency:eclipse-pde [ubuntu-64]
+Install-dependency:version-manager [ubuntu-32]
+Description:Make base IDE. This also includes patched eclipse plugins.
+
+Package:base-ide-product
+OS:windows-32
+Build-host-os:ubuntu-64
+Build-dependency:eclipse-pde [ubuntu-64]
+Install-dependency:version-manager [windows-32]
+Description:Make base IDE. This also includes patched eclipse plugins.
+
+Package:base-ide-product
+OS:ubuntu-64
+Build-host-os:ubuntu-64
+Build-dependency:eclipse-pde [ubuntu-64]
+Install-dependency:version-manager [ubuntu-64]
+Description:Make base IDE. This also includes patched eclipse plugins.
+
+Package:base-ide-product
+OS:windows-64
+Build-host-os:ubuntu-64
+Build-dependency:eclipse-pde [ubuntu-64]
+Install-dependency:version-manager [windows-64]
+Description:Make base IDE. This also includes patched eclipse plugins.
+
+Package:base-ide-product
+OS:macos-64
+Build-host-os:ubuntu-64
+Build-dependency:eclipse-pde [ubuntu-64]
+Install-dependency:version-manager [macos-64]
+Description:Make base IDE. This also includes patched eclipse plugins
diff --git a/rt-ide/package/rt-ide-product.install.linux b/rt-ide/package/rt-ide-product.install.linux
new file mode 100644 (file)
index 0000000..2c9c8c2
--- /dev/null
@@ -0,0 +1,57 @@
+#!/bin/bash -x
+## User Define for desktop menu
+desktopfile="${HOME}/.local/share/applications/tizen-rt-ide.desktop"
+iconfile=icon.xpm
+ide_path=rt-ide
+exefile="TizenStudioRT.sh"
+comment="Tizen Studio for RT"
+name="Tizen Studio for RT"
+
+## Do not modify the followings (Make desktop menu)
+TIZEN_SDK_INSTALL_PATH="${INSTALLED_PATH}"
+exepath="$TIZEN_SDK_INSTALL_PATH/${ide_path}/$exefile"
+ide_resources_path="${TIZEN_SDK_INSTALL_PATH}/${ide_path}/resources"
+ide_fonts_path="${ide_resources_path}/fonts"
+categoryfile="${MENU_DIRECTORY_PATH}"
+
+chmod 755 "${exepath}"
+
+## Register start menu
+if [ -e "${MAKESHORTCUT_PATH}" ]
+then
+    "${MAKESHORTCUT_PATH}" -f "${desktopfile}" -e "${exepath}" -i "${TIZEN_SDK_INSTALL_PATH}/${ide_path}/${iconfile}" -n "${name}" -c "${comment}"
+fi
+
+touch "${TIZEN_SDK_INSTALL_PATH}/${ide_path}/init"
+
+
+#Set sdk version
+modify_ide_version()
+{
+    echo "Modify ide version..."
+    tizen_sdk_version=`cat ${INSTALLED_PATH}/sdk.version | grep 'TIZEN_SDK_VERSION' | sed -e "s;.*TIZEN_SDK_VERSION=\(.*\);\1;g"`
+    product_version="${tizen_sdk_version}"
+
+    ide_path="${INSTALLED_PATH}/ide"
+    config_file_path="${ide_path}/configuration/config.ini"
+    branding_plugin=`ls "${ide_path}/plugins" | grep --color=none org.tizen.product.plugin_`
+    about_mapping_path="${ide_path}/plugins/${branding_plugin}/about.mappings"
+    about_version_parameter="1"
+
+    echo "Set product's version (${product_version})"
+
+    if [ -e "${config_file_path}" ]
+    then
+        sed -e "s;\(^eclipse.buildId=\).*;\1${product_version};g" < "${config_file_path}" > "${config_file_path}.mod"
+        mv "${config_file_path}.mod" "${config_file_path}"
+    fi
+
+    if [ -e "${about_mapping_path}" ]
+    then
+        sed -e "s;\(^${about_version_parameter}=\).*;\1${product_version};g" < "${about_mapping_path}" > "${about_mapping_path}.mod"
+        mv "${about_mapping_path}.mod" "${about_mapping_path}"
+    fi
+}
+modify_ide_version
+
+exit 0
diff --git a/rt-ide/package/rt-ide-product.install.macos b/rt-ide/package/rt-ide-product.install.macos
new file mode 100644 (file)
index 0000000..91c7af7
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/bash -x
+
+#Set sdk version
+IDE_ROOT_DIR_NAME="TizenStudioRT.app"
+modify_ide_version()
+{
+    echo "Modify ide version..."
+    tizen_sdk_version=`cat ${INSTALLED_PATH}/sdk.version | grep 'TIZEN_SDK_VERSION' | sed -e "s;.*TIZEN_SDK_VERSION=\(.*\);\1;g"`
+    product_version="${tizen_sdk_version}"
+
+    ide_path="${INSTALLED_PATH}/${IDE_ROOT_DIR_NAME}/Contents/Eclipse"
+    config_file_path="${ide_path}/configuration/config.ini"
+    branding_plugin=`ls "${ide_path}/plugins" | grep --color=none org.tizen.product.plugin_`
+    about_mapping_path="${ide_path}/plugins/${branding_plugin}/about.mappings"
+    about_version_parameter="1"
+
+    echo "Set product's version (${product_version})"
+
+    if [ -e "${config_file_path}" ]
+    then
+        sed -e "s;\(^eclipse.buildId=\).*;\1${product_version};g" < "${config_file_path}" > "${config_file_path}.mod"
+        mv "${config_file_path}.mod" "${config_file_path}"
+    fi
+
+    if [ -e "${about_mapping_path}" ]
+    then
+        sed -e "s;\(^${about_version_parameter}=\).*;\1${product_version};g" < "${about_mapping_path}" > "${about_mapping_path}.mod"
+        mv "${about_mapping_path}.mod" "${about_mapping_path}"
+    fi
+}
+modify_ide_version
+
+SHORTCUT_DIR_PATH_MACOS=/Applications
+INSTALLED_APP_DIR_MACOS="${INSTALLED_PATH}/${IDE_ROOT_DIR_NAME}"
+
+ ##create 'Tizen Studio' shortcut
+ if [ "$MAKESHORTCUT_PATH" != "" ]; then
+ ${MAKESHORTCUT_PATH} \
+ -s "${INSTALLED_APP_DIR_MACOS}" \
+ -in "${INSTALLED_DIR_NAME}" \
+ -n "Tizen Studio for RT"
+ fi
+
+exit 0
diff --git a/rt-ide/package/rt-ide-product.install.windows b/rt-ide/package/rt-ide-product.install.windows
new file mode 100644 (file)
index 0000000..178aab4
--- /dev/null
@@ -0,0 +1,79 @@
+@ECHO OFF
+set shortcut_name=Tizen Studio for RT
+set execute_file=TizenStudioRT.exe
+set icon_file=tizen_studio.ico
+set font_file=EcoSansMonoBD_110929.ttf
+set program_path=%INSTALLED_PATH%\rt-ide
+set execute_path=%program_path%\%execute_file%
+set icon_path=%program_path%\resources\icons
+set font_path=%program_path%\resources\fonts
+set subdir1=false
+
+echo Setting shortcut...
+wscript.exe "%MAKESHORTCUT_PATH%" /shortcut:"%shortcut_name%" /target:"%execute_path%" /icon:"%icon_path%\%icon_file%" /subdir1:"%subdir1%"
+echo Make shortcut success.
+
+echo Create init file...
+set init_file=%program_path%\init
+
+IF NOT EXIST "%init_file%" (
+    fsutil file createnew "%program_path%\init" 1
+)
+
+echo Setting sdk version...
+:: Set parameter
+set ide_path=%INSTALLED_PATH%\ide
+set config_file_path=%ide_path%\configuration\config.ini
+set splash_version_parameter=eclipse.buildId
+set emulator_version_path=%INSTALLED_PATH%\tools\emulator\etc
+
+:: Get version
+set version_path=%INSTALLED_PATH%\sdk.version
+IF NOT EXIST "%version_path%" (
+    exit
+)
+
+FOR /F "tokens=1,2* delims==" %%A IN (%version_path%) DO (set %%A=%%B)
+
+set tizen_sdk_version=%TIZEN_SDK_VERSION%
+
+::set branding_plugin
+set base_ide_platform_path=%ide_path%\plugins\org.tizen.product.plugin*
+IF EXIST "%base_ide_platform_path%" (
+    for /f %%R in ('dir /B /A:D /O:D "%base_ide_platform_path%"') do (set branding_plugin=%%R)
+)
+echo "branding plugin: %branding_plugin%"
+
+set about_mapping_path=%ide_path%\plugins\%branding_plugin%\about.mappings
+echo "about_mapping_path: %about_mapping_path%"
+
+set about_version_parameter=1
+
+echo "Set product's version (%tizen_sdk_version%)"
+:: modify splash version
+IF EXIST "%config_file_path%" (
+    echo "modify config.ini"
+
+    Type "%config_file_path%" | findstr /I /V /C:"%splash_version_parameter%=" > "%config_file_path%.modi"
+
+    for %%^" in ("") do (echo %splash_version_parameter%=%%~"%tizen_sdk_version%%%~" >> "%config_file_path%.modi")
+
+    del "%config_file_path%"
+
+    move "%config_file_path%.modi" "%config_file_path%"
+)
+
+:: modify about dialog version
+IF EXIST "%about_mapping_path%" (
+    echo "modify about.mappings"
+
+    Type "%about_mapping_path%" | findstr /I /V /C:"%about_version_parameter%=" > "%about_mapping_path%.modi"
+
+    for %%^" in ("") do (echo %about_version_parameter%=%%~"%tizen_sdk_version%%%~" >> "%about_mapping_path%.modi")
+
+    del "%about_mapping_path%"
+
+    move "%about_mapping_path%.modi" "%about_mapping_path%"
+)
+
+exit 0
diff --git a/rt-ide/package/rt-ide-product.remove.linux b/rt-ide/package/rt-ide-product.remove.linux
new file mode 100644 (file)
index 0000000..e5e6461
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/bash -xe
+## Register .desktop file
+DESKTOP_FILE_PATH="${HOME}/.local/share/applications/tizen-rt-ide.desktop"
+"${REMOVE_SHORTCUT}" "${DESKTOP_FILE_PATH}"
+#xdg-desktop-menu uninstall ${MENU_DIRECTORY_NAME} tizen-rt-ide.desktop
+### END Register Menu ###
+
+## Remove auto creating files
+ide_path=rt-ide
+rm -rf "${INSTALLED_PATH}/${ide_path}/p2"
+
+rm -f "${INSTALLED_PATH}/${ide_path}/init"
+
+### End ###
diff --git a/rt-ide/package/rt-ide-product.remove.macos b/rt-ide/package/rt-ide-product.remove.macos
new file mode 100644 (file)
index 0000000..3dab111
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/bash -ex
+##Remove 'Tizen Studio' shortcut
+SHORTCUT_DIR_PATH_MACOS=/Applications
+if [ "$REMOVE_SHORTCUT" != "" ]; then
+${REMOVE_SHORTCUT} \
+-in "${INSTALLED_DIR_NAME}" \
+-n "Tizen Studio for RT"
+fi
+
+## Remove auto creating files
+ide_path=rt-ide
+rm -rf "${INSTALLED_PATH}/${ide_path}/p2"
diff --git a/rt-ide/package/rt-ide-product.remove.windows b/rt-ide/package/rt-ide-product.remove.windows
new file mode 100644 (file)
index 0000000..ac4155b
--- /dev/null
@@ -0,0 +1,12 @@
+@echo off
+
+set shortcut_name=Tizen Studio for RT
+
+:: delims is a TAB followed by a space
+wscript.exe %REMOVE_SHORTCUT% /shortcut:"%shortcut_name%"
+
+rd/s/q "%INSTALLED_PATH%\rt-ide\p2"
+:: Uninstall Tizen font
+:: del %HOMEDRIVE%\Windows\Fonts\unnamed.ttf
+
+del /q "%INSTALLED_PATH%\rt-ide\init"
diff --git a/rt-ide/tizen.rt.parent/.project b/rt-ide/tizen.rt.parent/.project
new file mode 100644 (file)
index 0000000..a32c6f4
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>tizen.rt.parent</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+       </buildSpec>
+       <natures>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/tizen.rt.parent/pom.xml b/rt-ide/tizen.rt.parent/pom.xml
new file mode 100644 (file)
index 0000000..d5a387a
--- /dev/null
@@ -0,0 +1,187 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <groupId>org.tizen.rt</groupId>
+       <artifactId>tizen-rt-parent</artifactId>
+       <version>3.0.0-SNAPSHOT</version>
+       <packaging>pom</packaging>
+
+       <properties>
+               <tycho.version>0.23.1</tycho.version>
+               <tycho-extras.version>0.23.1</tycho-extras.version>
+
+               <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+               <maven.build.timestamp.format>yyyy-MM-dd_HH-mm</maven.build.timestamp.format>
+               <buildTimestamp>${maven.build.timestamp}</buildTimestamp>
+               <buildId>${buildTimestamp}</buildId>
+               <releaseName>Tizen Studio for RT 1.0.1</releaseName>
+               <skipTests>true</skipTests>
+       </properties>
+       <profiles>
+               <profile>
+                       <id>windows-32</id>
+                       <properties>
+                               <target.os>win32</target.os>
+                               <target.ws>win32</target.ws>
+                               <target.arch>x86</target.arch>
+                       </properties>
+               </profile>
+               <profile>
+                       <id>windows-64</id>
+                       <properties>
+                               <target.os>win32</target.os>
+                               <target.ws>win32</target.ws>
+                               <target.arch>x86_64</target.arch>
+                       </properties>
+               </profile>
+               <profile>
+                       <id>ubuntu-32</id>
+                       <properties>
+                               <target.os>linux</target.os>
+                               <target.ws>gtk</target.ws>
+                               <target.arch>x86</target.arch>
+                       </properties>
+               </profile>
+               <profile>
+                       <activation>
+                               <activeByDefault>true</activeByDefault>
+                       </activation>
+                       <id>ubuntu-64</id>
+                       <properties>
+                               <target.os>linux</target.os>
+                               <target.ws>gtk</target.ws>
+                               <target.arch>x86_64</target.arch>
+                       </properties>
+               </profile>
+               <profile>
+                       <id>macos-64</id>
+                       <properties>
+                               <target.os>macosx</target.os>
+                               <target.ws>cocoa</target.ws>
+                               <target.arch>x86_64</target.arch>
+                       </properties>
+               </profile>
+               <profile>
+                       <id>default-toolsjar</id>
+                       <activation>
+                       <activeByDefault>true</activeByDefault>
+                       <file>
+                               <exists>${java.home}/../lib/tools.jar</exists>
+                       </file>
+                       </activation>
+                       <properties>
+                               <toolsjar>${java.home}/../lib/tools.jar</toolsjar>
+                       </properties>
+               </profile>
+               <profile>
+                       <id>missing-toolsjar</id>
+                       <activation>
+                               <activeByDefault>false</activeByDefault>
+                               <file>
+                                       <exists>${java.home}/../Classes/classes.jar</exists>
+                               </file>
+                       </activation>
+                       <properties>
+                               <toolsjar>${java.home}/../Classes/classes.jar</toolsjar>
+                       </properties>
+               </profile>
+
+               <!-- Tizen Branding Profile -->
+               <profile>
+                       <id>update-branding</id>
+                       <activation>
+                               <activeByDefault>true</activeByDefault>
+                               <file>
+                                       <exists>${basedir}/about.mappings</exists>
+                               </file>
+                       </activation>
+                       <build>
+                               <plugins>
+                                       <plugin>
+                                               <groupId>org.apache.maven.plugins</groupId>
+                                               <artifactId>maven-resources-plugin</artifactId>
+                                               <executions>
+                                                       <execution>
+                                                               <id>process-about.mappings</id>
+                                                               <phase>prepare-package</phase>
+                                                               <configuration>
+                                                                       <outputDirectory>${project.build.directory}</outputDirectory>
+                                                                       <overwrite>true</overwrite>
+                                                                       <resources>
+                                                                               <resource>
+                                                                                       <directory>${basedir}</directory>
+                                                                                       <includes>
+                                                                                               <include>about.mappings</include>
+                                                                                       </includes>
+                                                                                       <filtering>true</filtering>
+                                                                               </resource>
+                                                                       </resources>
+                                                               </configuration>
+                                                               <goals>
+                                                                       <goal>copy-resources</goal>
+                                                               </goals>
+                                                       </execution>
+                                               </executions>
+                                       </plugin>
+                                       <plugin>
+                                               <groupId>org.eclipse.tycho</groupId>
+                                               <artifactId>tycho-packaging-plugin</artifactId>
+                                               <version>${tycho.version}</version>
+                                               <configuration>
+                                                       <additionalFileSets>
+                                                               <fileSet>
+                                                                       <directory>${project.build.directory}</directory>
+                                                                       <includes>
+                                                                               <include>about.mappings</include>
+                                                                       </includes>
+                                                               </fileSet>
+                                                       </additionalFileSets>
+                                               </configuration>
+                                       </plugin>
+                               </plugins>
+                       </build>
+               </profile>
+       </profiles>
+       <build>
+               <plugins>
+                       <plugin>
+                               <!-- enable tycho build extension -->
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>tycho-maven-plugin</artifactId>
+                               <version>${tycho.version}</version>
+                               <extensions>true</extensions>
+                       </plugin>
+
+                       <plugin>
+                               <groupId>org.eclipse.tycho</groupId>
+                               <artifactId>target-platform-configuration</artifactId>
+                               <version>${tycho.version}</version>
+                               <configuration>
+                                       <target>
+                                               <artifact>
+                                                       <groupId>org.tizen.rt</groupId>
+                                                       <artifactId>tizen-rt-releng-prereqs</artifactId>
+                                                       <version>3.0.0-SNAPSHOT</version>
+                                               </artifact>
+                                       </target>
+                                       <environments>
+                                               <environment>
+                                                       <os>${target.os}</os>
+                                                       <ws>${target.ws}</ws>
+                                                       <arch>${target.arch}</arch>
+                                               </environment>
+                                       </environments>
+                               </configuration>
+                       </plugin>
+               </plugins>
+               <pluginManagement>
+                       <plugins>
+                               <plugin>
+                                       <groupId>org.apache.maven.plugins</groupId>
+                                       <artifactId>maven-antrun-plugin</artifactId>
+                                       <version>1.8</version>
+                               </plugin>
+                       </plugins>
+               </pluginManagement>
+       </build>
+</project>
diff --git a/rt-ide/tizen.rt.product.feature/.project b/rt-ide/tizen.rt.product.feature/.project
new file mode 100644 (file)
index 0000000..575eac6
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>tizen.rt.product.feature</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+       </buildSpec>
+       <natures>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/tizen.rt.product.feature/LICENSE-2.0.htm b/rt-ide/tizen.rt.product.feature/LICENSE-2.0.htm
new file mode 100644 (file)
index 0000000..f7ca656
--- /dev/null
@@ -0,0 +1,191 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en">
+  <head>
+    <title>Apache License, Version 2.0</title>
+
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <meta property="og:image" content="http://www.apache.org/images/asf_logo.gif" />
+
+    <link rel="stylesheet" type="text/css" media="screen" href="/css/style.css">
+    <link rel="stylesheet" type="text/css" media="screen" href="/css/code.css">
+
+    <script type="text/javascript" src="/js/jquery.js"></script>
+    <script type="text/javascript" src="/js/apache_boot.js"></script>
+
+    
+
+    
+    <!-- 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 &quot;License&quot;); 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 &quot;AS IS&quot; 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. -->
+  </head>
+
+  <body>
+    <div id="page" class="container_16">
+      <div id="header" class="grid_8">
+        <h1>The Apache Software Foundation</h1>
+        <h2>Apache License, Version 2.0</h2>
+      </div>
+
+      <div class="clear"></div>
+      <div id="content" class="grid_16"><div class="section-content"><p>Apache License<br></br>Version 2.0, January 2004<br></br>
+<a href="http://www.apache.org/licenses/">http://www.apache.org/licenses/</a> </p>
+<p>TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p>
+<p><strong><a name="definitions">1. Definitions</a></strong>.</p>
+<p>"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.</p>
+<p>"Licensor" shall mean the copyright owner or entity authorized by the
+copyright owner that is granting the License.</p>
+<p>"Legal Entity" shall mean the union of the acting entity and all other
+entities that control, are controlled by, or are under common control with
+that entity. For the purposes of this definition, "control" means (i) the
+power, direct or indirect, to cause the direction or management of such
+entity, whether by contract or otherwise, or (ii) ownership of fifty
+percent (50%) or more of the outstanding shares, or (iii) beneficial
+ownership of such entity.</p>
+<p>"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.</p>
+<p>"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.</p>
+<p>"Object" form shall mean any form resulting from mechanical transformation
+or translation of a Source form, including but not limited to compiled
+object code, generated documentation, and conversions to other media types.</p>
+<p>"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice that
+is included in or attached to the work (an example is provided in the
+Appendix below).</p>
+<p>"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent, as
+a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from, or
+merely link (or bind by name) to the interfaces of, the Work and Derivative
+Works thereof.</p>
+<p>"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor for
+inclusion in the Work by the copyright owner or by an individual or Legal
+Entity authorized to submit on behalf of the copyright owner. For the
+purposes of this definition, "submitted" means any form of electronic,
+verbal, or written communication sent to the Licensor or its
+representatives, including but not limited to communication on electronic
+mailing lists, source code control systems, and issue tracking systems that
+are managed by, or on behalf of, the Licensor for the purpose of discussing
+and improving the Work, but excluding communication that is conspicuously
+marked or otherwise designated in writing by the copyright owner as "Not a
+Contribution."</p>
+<p>"Contributor" shall mean Licensor and any individual or Legal Entity on
+behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.</p>
+<p><strong><a name="copyright">2. Grant of Copyright License</a></strong>. Subject to the
+terms and conditions of this License, each Contributor hereby grants to You
+a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of, publicly
+display, publicly perform, sublicense, and distribute the Work and such
+Derivative Works in Source or Object form.</p>
+<p><strong><a name="patent">3. Grant of Patent License</a></strong>. Subject to the terms
+and conditions of this License, each Contributor hereby grants to You a
+perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made, use,
+offer to sell, sell, import, and otherwise transfer the Work, where such
+license applies only to those patent claims licensable by such Contributor
+that are necessarily infringed by their Contribution(s) alone or by
+combination of their Contribution(s) with the Work to which such
+Contribution(s) was submitted. If You institute patent litigation against
+any entity (including a cross-claim or counterclaim in a lawsuit) alleging
+that the Work or a Contribution incorporated within the Work constitutes
+direct or contributory patent infringement, then any patent licenses
+granted to You under this License for that Work shall terminate as of the
+date such litigation is filed.</p>
+<p><strong><a name="redistribution">4. Redistribution</a></strong>. You may reproduce and
+distribute copies of the Work or Derivative Works thereof in any medium,
+with or without modifications, and in Source or Object form, provided that
+You meet the following conditions:</p>
+<ol>
+<li>
+<p>You must give any other recipients of the Work or Derivative Works a
+copy of this License; and</p>
+</li>
+<li>
+<p>You must cause any modified files to carry prominent notices stating
+that You changed the files; and</p>
+</li>
+<li>
+<p>You must retain, in the Source form of any Derivative Works that You
+distribute, all copyright, patent, trademark, and attribution notices from
+the Source form of the Work, excluding those notices that do not pertain to
+any part of the Derivative Works; and</p>
+</li>
+<li>
+<p>If the Work includes a "NOTICE" text file as part of its distribution,
+then any Derivative Works that You distribute must include a readable copy
+of the attribution notices contained within such NOTICE file, excluding
+those notices that do not pertain to any part of the Derivative Works, in
+at least one of the following places: within a NOTICE text file distributed
+as part of the Derivative Works; within the Source form or documentation,
+if provided along with the Derivative Works; or, within a display generated
+by the Derivative Works, if and wherever such third-party notices normally
+appear. The contents of the NOTICE file are for informational purposes only
+and do not modify the License. You may add Your own attribution notices
+within Derivative Works that You distribute, alongside or as an addendum to
+the NOTICE text from the Work, provided that such additional attribution
+notices cannot be construed as modifying the License.
+You may add Your own copyright statement to Your modifications and may
+provide additional or different license terms and conditions for use,
+reproduction, or distribution of Your modifications, or for any such
+Derivative Works as a whole, provided Your use, reproduction, and
+distribution of the Work otherwise complies with the conditions stated in
+this License.</p>
+</li>
+</ol>
+<p><strong><a name="contributions">5. Submission of Contributions</a></strong>. Unless You
+explicitly state otherwise, any Contribution intentionally submitted for
+inclusion in the Work by You to the Licensor shall be under the terms and
+conditions of this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify the
+terms of any separate license agreement you may have executed with Licensor
+regarding such Contributions.</p>
+<p><strong><a name="trademarks">6. Trademarks</a></strong>. This License does not grant
+permission to use the trade names, trademarks, service marks, or product
+names of the Licensor, except as required for reasonable and customary use
+in describing the origin of the Work and reproducing the content of the
+NOTICE file.</p>
+<p><strong><a name="no-warranty">7. Disclaimer of Warranty</a></strong>. Unless required by
+applicable law or agreed to in writing, Licensor provides the Work (and
+each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including,
+without limitation, any warranties or conditions of TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You
+are solely responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your exercise
+of permissions under this License.</p>
+<p><strong><a name="no-liability">8. Limitation of Liability</a></strong>. In no event and
+under no legal theory, whether in tort (including negligence), contract, or
+otherwise, unless required by applicable law (such as deliberate and
+grossly negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a result
+of this License or out of the use or inability to use the Work (including
+but not limited to damages for loss of goodwill, work stoppage, computer
+failure or malfunction, or any and all other commercial damages or losses),
+even if such Contributor has been advised of the possibility of such
+damages.</p>
+<p><strong><a name="additional">9. Accepting Warranty or Additional Liability</a></strong>.
+While redistributing the Work or Derivative Works thereof, You may choose
+to offer, and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this License.
+However, in accepting such obligations, You may act only on Your own behalf
+and on Your sole responsibility, not on behalf of any other Contributor,
+and only if You agree to indemnify, defend, and hold each Contributor
+harmless for any liability incurred by, or claims asserted against, such
+Contributor by reason of your accepting any such warranty or additional
+liability.</p>
+<p>END OF TERMS AND CONDITIONS</p>
+
+    <div class="clear"></div>
+    
+    </div>
+    <div id="copyright" class="container_16">
+      <p>Copyright &#169; 2011 The Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br/>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+    </div>
+  </body>
+</html>
diff --git a/rt-ide/tizen.rt.product.feature/build.properties b/rt-ide/tizen.rt.product.feature/build.properties
new file mode 100644 (file)
index 0000000..7a94f30
--- /dev/null
@@ -0,0 +1,3 @@
+bin.includes = feature.xml,\
+               license.html,\
+               LICENSE-2.0.htm
diff --git a/rt-ide/tizen.rt.product.feature/feature.xml b/rt-ide/tizen.rt.product.feature/feature.xml
new file mode 100644 (file)
index 0000000..2c3fa5a
--- /dev/null
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<feature\r
+      id="org.tizen.rt.feature"\r
+      label="Tizen RT Feature"\r
+      version="2.0.0.qualifier"\r
+      provider-name="Tizen">\r
+\r
+   <description>\r
+      Common library for Tizen.\r
+   </description>\r
+\r
+   <copyright>\r
+      Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.\r
+   </copyright>\r
+\r
+   <license>\r
+      license\r
+   </license>\r
+\r
+   <includes\r
+         id="org.eclipse.platform"\r
+         version="0.0.0"/>\r
+\r
+   <includes\r
+         id="org.eclipse.equinox.executable"\r
+         version="0.0.0"/>\r
+\r
+   <includes\r
+         id="org.eclipse.cdt"\r
+         version="0.0.0"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.debug.ui"\r
+         download-size="0"\r
+         install-size="0"\r
+         version="0.0.0"\r
+         unpack="false"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.pde.build"\r
+         download-size="0"\r
+         install-size="0"\r
+         version="0.0.0"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.wst.xsd.core"\r
+         download-size="0"\r
+         install-size="0"\r
+         version="0.0.0"\r
+         unpack="false"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.egit.core"\r
+         download-size="0"\r
+         install-size="0"\r
+         version="0.0.0"\r
+         unpack="false"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.egit.ui"\r
+         download-size="0"\r
+         install-size="0"\r
+         version="0.0.0"\r
+         unpack="false"/>\r
+\r
+   <plugin\r
+         id="org.tizen.rt.product.plugin"\r
+         download-size="0"\r
+         install-size="0"\r
+         version="0.0.0"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.cdt.core"\r
+         download-size="0"\r
+         install-size="0"\r
+         version="0.0.0"\r
+         unpack="false"/>\r
+\r
+   <plugin\r
+         id="org.tizen.common.ui.theme"\r
+         download-size="0"\r
+         install-size="0"\r
+         version="0.0.0"\r
+         unpack="false"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.cdt.ui"\r
+         download-size="0"\r
+         install-size="0"\r
+         version="0.0.0"\r
+         unpack="false"/>\r
+\r
+</feature>\r
diff --git a/rt-ide/tizen.rt.product.feature/license.html b/rt-ide/tizen.rt.product.feature/license.html
new file mode 100644 (file)
index 0000000..f08c2b2
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />\r
+<title>Tizen SOFTWARE DEVELOPMENT KIT (&quot;SDK&quot;) LICENSE AGREEMENT</title>\r
+</head>\r
+\r
+<body lang="EN-US">\r
+               <p align="center">Tizen Studio</p><br /><br /> \r
+Tizen Studio contains software portions licensed under various open source licenses as well as proprietary components. All software portions ("Software") are licensed under licenses that accompany such Software.<p>\r
\r
+The licenses governing the Software("Licenses") are available at:<br>\r
+<a href="https://developer.tizen.org/tizen-sdk-software-licenses">https://developer.tizen.org/tizen-sdk-software-licenses</a><p>\r
\r
+The licenses("Other Licenses") of software which are not listed at the above URL will be either displayed as part of their respective installers or accessed inside installation package archive of each component.<p>\r
\r
+You may access and download the Software at:<br>\r
+<a href="http://review.tizen.org/git/">http://review.tizen.org/git/</a><p>\r
\r
+BY CLICKING THE "I AGREE" BUTTON OR BY USING ANY PART OF TIZEN STUDIO, YOU AGREE (ON BEHALF OF YOURSELF AND/OR YOUR COMPANY) TO THE TERMS IN Licenses, AND THE TERMS IN Other Licenses.<br>\r
+If you do not agree with the terms in Licenses or the terms in Other Licenses you may not download or use Tizen Studio.\r
+</body>\r
+</html>\r
diff --git a/rt-ide/tizen.rt.product.feature/pom.xml b/rt-ide/tizen.rt.product.feature/pom.xml
new file mode 100644 (file)
index 0000000..f36e433
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+      <groupId>org.tizen.rt</groupId>
+      <artifactId>tizen-rt-parent</artifactId>
+      <version>3.0.0-SNAPSHOT</version>
+      <relativePath>../tizen.rt.parent</relativePath>
+  </parent>
+
+  <groupId>org.tizen.rt</groupId>
+  <artifactId>org.tizen.rt.feature</artifactId>
+  <version>2.0.0-SNAPSHOT</version>
+  <packaging>eclipse-feature</packaging>
+</project>
diff --git a/rt-ide/tizen.rt.product.feature/target/feature.xml b/rt-ide/tizen.rt.product.feature/target/feature.xml
new file mode 100644 (file)
index 0000000..2e6de6c
--- /dev/null
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<feature\r
+      id="org.tizen.rt.feature"\r
+      label="Tizen RT Feature"\r
+      version="2.0.0.201702170552"\r
+      provider-name="Tizen">\r
+\r
+   <description>\r
+      Common library for Tizen.\r
+   </description>\r
+\r
+   <copyright>\r
+      Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.\r
+   </copyright>\r
+\r
+   <license>\r
+      license\r
+   </license>\r
+\r
+   <includes\r
+         id="org.eclipse.platform"\r
+         version="4.5.2.v20160212-1500"/>\r
+\r
+   <includes\r
+         id="org.eclipse.equinox.executable"\r
+         version="3.6.200.v20150602-1417"/>\r
+\r
+   <includes\r
+         id="org.eclipse.cdt"\r
+         version="8.8.1.201602051005"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.debug.ui"\r
+         download-size="2825"\r
+         install-size="5915"\r
+         version="3.11.101.v20160203-1230"\r
+         unpack="false"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.pde.build"\r
+         download-size="478"\r
+         install-size="571"\r
+         version="3.9.100.v20150521-1524"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.wst.xsd.core"\r
+         download-size="73"\r
+         install-size="148"\r
+         version="1.1.900.v201401141857"\r
+         unpack="false"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.egit.core"\r
+         download-size="425"\r
+         install-size="905"\r
+         version="4.1.1.201511131810-r"\r
+         unpack="false"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.egit.ui"\r
+         download-size="3062"\r
+         install-size="7157"\r
+         version="4.1.1.201511131810-r"\r
+         unpack="false"/>\r
+\r
+   <plugin\r
+         id="org.tizen.rt.product.plugin"\r
+         download-size="601"\r
+         install-size="777"\r
+         version="3.0.0.201702170552"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.cdt.core"\r
+         download-size="5302"\r
+         install-size="12197"\r
+         version="5.11.0.201602051005"\r
+         unpack="false"/>\r
+\r
+   <plugin\r
+         id="org.tizen.common.ui.theme"\r
+         download-size="23"\r
+         install-size="38"\r
+         version="3.0.0.201702170552"\r
+         unpack="false"/>\r
+\r
+   <plugin\r
+         id="org.eclipse.cdt.ui"\r
+         download-size="5982"\r
+         install-size="13432"\r
+         version="5.11.0.201602051005"\r
+         unpack="false"/>\r
+\r
+</feature>\r
diff --git a/rt-ide/tizen.rt.product.feature/target/local-artifacts.properties b/rt-ide/tizen.rt.product.feature/target/local-artifacts.properties
new file mode 100644 (file)
index 0000000..fa6fcae
--- /dev/null
@@ -0,0 +1,4 @@
+#Fri Feb 17 14:52:55 KST 2017\r
+artifact.attached.p2metadata=C\:\\Users\\casval\\rtsdk\\rtosIDE\\product\\rt-ide\\tizen.rt.product.feature\\target\\p2content.xml\r
+artifact.main=C\:\\Users\\casval\\rtsdk\\rtosIDE\\product\\rt-ide\\tizen.rt.product.feature\\target\\org.tizen.rt.feature-2.0.0-SNAPSHOT.jar\r
+artifact.attached.p2artifacts=C\:\\Users\\casval\\rtsdk\\rtosIDE\\product\\rt-ide\\tizen.rt.product.feature\\target\\p2artifacts.xml\r
diff --git a/rt-ide/tizen.rt.product.feature/target/org.tizen.rt.feature-2.0.0-SNAPSHOT.jar b/rt-ide/tizen.rt.product.feature/target/org.tizen.rt.feature-2.0.0-SNAPSHOT.jar
new file mode 100644 (file)
index 0000000..9b856c6
Binary files /dev/null and b/rt-ide/tizen.rt.product.feature/target/org.tizen.rt.feature-2.0.0-SNAPSHOT.jar differ
diff --git a/rt-ide/tizen.rt.product.feature/target/p2artifacts.xml b/rt-ide/tizen.rt.product.feature/target/p2artifacts.xml
new file mode 100644 (file)
index 0000000..0ae5f6c
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version='1.0' encoding='UTF-8'?>\r
+<?artifactRepository version='1.1.0'?>\r
+<artifacts size='1'>\r
+  <artifact classifier='org.eclipse.update.feature' id='org.tizen.rt.feature' version='2.0.0.201702170552'>\r
+    <properties size='6'>\r
+      <property name='artifact.size' value='6354'/>\r
+      <property name='download.size' value='6354'/>\r
+      <property name='maven-groupId' value='org.tizen.rt'/>\r
+      <property name='maven-artifactId' value='org.tizen.rt.feature'/>\r
+      <property name='maven-version' value='2.0.0-SNAPSHOT'/>\r
+      <property name='download.contentType' value='application/zip'/>\r
+    </properties>\r
+  </artifact>\r
+</artifacts>\r
diff --git a/rt-ide/tizen.rt.product.feature/target/p2content.xml b/rt-ide/tizen.rt.product.feature/target/p2content.xml
new file mode 100644 (file)
index 0000000..9e301ee
--- /dev/null
@@ -0,0 +1,83 @@
+<?xml version='1.0' encoding='UTF-8'?>\r
+<units size='2'>\r
+  <unit id='org.tizen.rt.feature.feature.group' version='2.0.0.201702170552' singleton='false'>\r
+    <update id='org.tizen.rt.feature.feature.group' range='[0.0.0,2.0.0.201702170552)' severity='0'/>\r
+    <properties size='7'>\r
+      <property name='org.eclipse.equinox.p2.name' value='Tizen RT Feature'/>\r
+      <property name='org.eclipse.equinox.p2.description' value='Common library for Tizen.'/>\r
+      <property name='org.eclipse.equinox.p2.provider' value='Tizen'/>\r
+      <property name='org.eclipse.equinox.p2.type.group' value='true'/>\r
+      <property name='maven-groupId' value='org.tizen.rt'/>\r
+      <property name='maven-artifactId' value='org.tizen.rt.feature'/>\r
+      <property name='maven-version' value='2.0.0-SNAPSHOT'/>\r
+    </properties>\r
+    <provides size='1'>\r
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.tizen.rt.feature.feature.group' version='2.0.0.201702170552'/>\r
+    </provides>\r
+    <requires size='13'>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.platform.feature.group' range='[4.5.2.v20160212-1500,4.5.2.v20160212-1500]'/>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.equinox.executable.feature.group' range='[3.6.200.v20150602-1417,3.6.200.v20150602-1417]'/>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.cdt.feature.group' range='[8.8.1.201602051005,8.8.1.201602051005]'/>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.debug.ui' range='[3.11.101.v20160203-1230,3.11.101.v20160203-1230]'/>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.pde.build' range='[3.9.100.v20150521-1524,3.9.100.v20150521-1524]'/>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.wst.xsd.core' range='[1.1.900.v201401141857,1.1.900.v201401141857]'/>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.egit.core' range='[4.1.1.201511131810-r,4.1.1.201511131810-r]'/>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.egit.ui' range='[4.1.1.201511131810-r,4.1.1.201511131810-r]'/>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.tizen.rt.product.plugin' range='[3.0.0.201702170552,3.0.0.201702170552]'/>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.cdt.core' range='[5.11.0.201602051005,5.11.0.201602051005]'/>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.tizen.common.ui.theme' range='[3.0.0.201702170552,3.0.0.201702170552]'/>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.eclipse.cdt.ui' range='[5.11.0.201602051005,5.11.0.201602051005]'/>\r
+      <required namespace='org.eclipse.equinox.p2.iu' name='org.tizen.rt.feature.feature.jar' range='[2.0.0.201702170552,2.0.0.201702170552]'>\r
+        <filter>\r
+          (org.eclipse.update.install.features=true)\r
+        </filter>\r
+      </required>\r
+    </requires>\r
+    <touchpoint id='null' version='0.0.0'/>\r
+    <licenses size='1'>\r
+      <license>\r
+        license\r
+      </license>\r
+    </licenses>\r
+    <copyright>\r
+      Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.\r
+    </copyright>\r
+  </unit>\r
+  <unit id='org.tizen.rt.feature.feature.jar' version='2.0.0.201702170552'>\r
+    <properties size='6'>\r
+      <property name='org.eclipse.equinox.p2.name' value='Tizen RT Feature'/>\r
+      <property name='org.eclipse.equinox.p2.description' value='Common library for Tizen.'/>\r
+      <property name='org.eclipse.equinox.p2.provider' value='Tizen'/>\r
+      <property name='maven-groupId' value='org.tizen.rt'/>\r
+      <property name='maven-artifactId' value='org.tizen.rt.feature'/>\r
+      <property name='maven-version' value='2.0.0-SNAPSHOT'/>\r
+    </properties>\r
+    <provides size='3'>\r
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.tizen.rt.feature.feature.jar' version='2.0.0.201702170552'/>\r
+      <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='feature' version='1.0.0'/>\r
+      <provided namespace='org.eclipse.update.feature' name='org.tizen.rt.feature' version='2.0.0.201702170552'/>\r
+    </provides>\r
+    <filter>\r
+      (org.eclipse.update.install.features=true)\r
+    </filter>\r
+    <artifacts size='1'>\r
+      <artifact classifier='org.eclipse.update.feature' id='org.tizen.rt.feature' version='2.0.0.201702170552'/>\r
+    </artifacts>\r
+    <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>\r
+    <touchpointData size='1'>\r
+      <instructions size='1'>\r
+        <instruction key='zipped'>\r
+          true\r
+        </instruction>\r
+      </instructions>\r
+    </touchpointData>\r
+    <licenses size='1'>\r
+      <license>\r
+        license\r
+      </license>\r
+    </licenses>\r
+    <copyright>\r
+      Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.\r
+    </copyright>\r
+  </unit>\r
+</units>\r
diff --git a/rt-ide/tizen.rt.product.plugin/.gitignore b/rt-ide/tizen.rt.product.plugin/.gitignore
new file mode 100644 (file)
index 0000000..ba077a4
--- /dev/null
@@ -0,0 +1 @@
+bin
diff --git a/rt-ide/tizen.rt.product.plugin/META-INF/MANIFEST.MF b/rt-ide/tizen.rt.product.plugin/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..3b62305
--- /dev/null
@@ -0,0 +1,34 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.tizen.rt.product.plugin;singleton:=true
+Bundle-Version: 3.0.0.qualifier
+Bundle-Activator: org.tizen.rt.ide.Activator
+Bundle-Vendor: %Bundle-Vendor
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.e4.ui.css.swt.theme,
+ org.eclipse.e4.ui.css.core,
+ org.eclipse.e4.ui.css.swt,
+ org.eclipse.e4.ui.workbench.renderers.swt;bundle-version="0.13.0",
+ org.eclipse.core.resources,
+ org.eclipse.ui.ide,
+ org.eclipse.ui.console,
+ org.eclipse.cdt.core,
+ org.eclipse.ui.navigator,
+ org.eclipse.ui.navigator.resources,
+ org.eclipse.jgit,
+ org.eclipse.egit.core,
+ org.eclipse.egit.ui,
+ org.eclipse.ui.forms,
+ org.eclipse.text,
+ org.eclipse.core.expressions,
+ org.eclipse.tm.terminal.control,
+ org.eclipse.tm.terminal.view.ui,
+ org.eclipse.core.filesystem;bundle-version="1.5.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Bundle-ClassPath: lib/slf4j-api-1.6.4.jar,
+ lib/slf4j-log4j12-1.6.4.jar,
+ lib/log4j-1.2.17.jar,
+ .
diff --git a/rt-ide/tizen.rt.product.plugin/OSGI-INF/l10n/bundle.properties b/rt-ide/tizen.rt.product.plugin/OSGI-INF/l10n/bundle.properties
new file mode 100644 (file)
index 0000000..b3295a5
--- /dev/null
@@ -0,0 +1,20 @@
+product.name=Tizen Studio
+product.description=Version:{1}\n\
+Build Time:{0}\n\
+Tizen Site:{2}\n\
+Release Note:{3}\n\
+\n\
+
+
+
+windowImages=icons/branding/tizen_studio_16.png, icons/branding/tizen_studio_32.png, icons/branding/tizen_studio_48.png, icons/branding/tizen_studio_64.png, icons/branding/tizen_studio_128.png, icons/branding/tizen_studio_256.png, icons/branding/tizen_studio_512.png
+aboutImage=icons/branding/about_ide.png
+featureImage=icons/branding/32_IDE_icon.png
+
+productIntroTitle = Welcome to Tizen Studio
+productIntroBrandingText = Tizen
+introDescription-overview = The Eclipse Platform is a kind of universal tool platform - an open extensible IDE for anything and nothing in particular. 
+introDescription-tutorials = Learn how to be productive using Eclipse by completing end-to-end tutorials that will guide you along the way.
+introDescription-samples = Explore Eclipse by installing prefabricated samples (may require Internet connection).
+Bundle-Vendor = The Linux Foundation
+Bundle-Name = Tizen Product
diff --git a/rt-ide/tizen.rt.product.plugin/about.html b/rt-ide/tizen.rt.product.plugin/about.html
new file mode 100644 (file)
index 0000000..bbef61d
--- /dev/null
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>May, 2011</p>
+<h3>Tizen Studio</h3>
+
+<p><a href="https://developer.tizen.org/" target="_blank">Tizen Studio</a> is a set of Eclipse plug-ins that helps programmers to develop applications for the mobile platform.</p>
+
+<h3>License</h3>
+
+<p>See <a href="about_files/LICENSE-2.0.htm">Apache License, Version 2.0</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rt-ide/tizen.rt.product.plugin/about.ini b/rt-ide/tizen.rt.product.plugin/about.ini
new file mode 100644 (file)
index 0000000..ec1dc24
--- /dev/null
@@ -0,0 +1,11 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=icons/branding/32_IDE_icon.png
\ No newline at end of file
diff --git a/rt-ide/tizen.rt.product.plugin/about.mappings b/rt-ide/tizen.rt.product.plugin/about.mappings
new file mode 100644 (file)
index 0000000..22315af
--- /dev/null
@@ -0,0 +1,9 @@
+# about.mappings
+# contains fill-ins for about.properties and bundle.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=${buildId}
+1=${releaseName}
+2=http://www.tizen.org
+3=
diff --git a/rt-ide/tizen.rt.product.plugin/about.properties b/rt-ide/tizen.rt.product.plugin/about.properties
new file mode 100644 (file)
index 0000000..4b605e7
--- /dev/null
@@ -0,0 +1,10 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+Version={1}
+Build Time={0}
+Tizen Site={2}
+Release Note={3}
\ No newline at end of file
diff --git a/rt-ide/tizen.rt.product.plugin/plugin.xml b/rt-ide/tizen.rt.product.plugin/plugin.xml
new file mode 100644 (file)
index 0000000..ee5a001
--- /dev/null
@@ -0,0 +1,323 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.ui.commands">
+         
+      <category
+            name="Rtos Category"
+            id="rtosBuild.commands.category">
+      </category>
+      
+      <command
+            name="Rtos Build"
+            categoryId="rtosBuild.commands.category"
+            id="rtosBuild.commands.buildCommand">
+      </command>
+      
+      <command
+            name="Rtos Flash"
+            categoryId="rtosBuild.commands.category"
+            id="rtosBuild.commands.flashCommand">
+      </command>
+      
+   </extension>
+   
+   <extension
+         point="org.eclipse.ui.handlers">
+         
+      <handler
+            commandId="rtosBuild.commands.buildCommand"
+            class="org.tizen.rt.ide.handlers.BuildHandler">
+         <enabledWhen>
+            <reference
+                  definitionId="org.tizen.rt.product.hasNature">
+            </reference>
+         </enabledWhen>
+      </handler>
+      
+      <!-- modify class-->
+      <handler
+            commandId="rtosBuild.commands.flashCommand"
+            class="org.tizen.rt.ide.handlers.FlashHandler">
+         <enabledWhen>
+            <reference
+                  definitionId="org.tizen.rt.product.hasNature">
+            </reference>
+         </enabledWhen>
+      </handler>
+      
+   </extension>
+   
+   <extension
+         point="org.eclipse.ui.bindings">
+      <key
+            commandId="rtosBuild.commands.buildCommand"
+            contextId="org.eclipse.ui.contexts.window"
+            sequence="M1+6"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
+      </key>
+      <key
+            commandId="rtosBuild.commands.flashCommand"
+            contextId="org.eclipse.ui.contexts.window"
+            sequence="M1+7"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
+      </key>      
+   </extension>
+   
+   <extension
+         point="org.eclipse.ui.menus">
+         
+      <menuContribution
+            locationURI="menu:org.eclipse.ui.main.menu?after=additions">
+         <menu
+               label="Rtos Menu"
+               mnemonic="M"
+               id="rtosBuild.menus.sampleMenu">
+            <command
+                  commandId="rtosBuild.commands.buildCommand"
+                  mnemonic="S"
+                  id="rtosBuild.menus.buildCommand">
+            </command>
+                       <command
+                  commandId="rtosBuild.commands.flashCommand"
+                  mnemonic="S"
+                  id="rtosBuild.menus.flashCommand">
+            </command>            
+         </menu>
+      </menuContribution>
+      
+      <menuContribution
+            locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
+         <toolbar
+               id="rtosBuild.toolbars.rtosToolbar">
+            <command
+                  commandId="rtosBuild.commands.buildCommand"
+                  icon="icons/buildSample.gif"
+                  tooltip="build rtos project"
+                  id="rtosBuild.toolbars.buildCommand">
+            </command>
+            <command
+                  commandId="rtosBuild.commands.flashCommand"
+                  icon="icons/flashSample.gif"
+                  tooltip="flash rtos project"
+                  id="rtosBuild.toolbars.flsahCommand">
+            </command>            
+         </toolbar>
+      </menuContribution>
+      
+   </extension>
+   <extension
+         id="product"
+         point="org.eclipse.core.runtime.products">
+      <product
+            application="org.eclipse.ui.ide.workbench"
+            name="Tizen RT IDE">
+         <property
+               name="appName"
+               value="Tizen RT IDE">
+         </property>
+         <property
+               name="introTitle"
+               value="%productIntroTitle">
+         </property>
+         <property
+               name="startupForegroundColor"
+               value="FFFFFF">
+         </property>
+         <property
+               name="startupMessageRect"
+               value="31,247,441,20">
+         </property>
+         <property
+               name="startupProgressRect"
+               value="0,313,478,15">
+         </property>
+         <property
+               name="introBrandingImageText"
+               value="%productIntroBrandingText">
+         </property>
+         <property
+               name="introDescription-overview"
+               value="%introDescription-overview">
+         </property>
+         <property
+               name="introDescription-tutorials"
+               value="%introDescription-tutorials">
+         </property>
+         <property
+               name="introDescription-samples"
+               value="%introDescription-samples">
+         </property>
+         <property
+               name="featureImage"
+               value="%featureImage">
+         </property>
+         <property
+               name="buildIdLocation"
+               value="31,268">
+         </property>
+         <property
+               name="buildIdSize"
+               value="200,40">
+         </property>
+         <property
+               name="cssTheme"
+               value="org.tizen.common.ui.theme.tizen">
+         </property>
+         <property
+               name="applicationCSSResources"
+               value="resources/images/">
+         </property>
+         <property
+               name="preferenceCustomization"
+               value="plugin_customization.ini">
+         </property>
+      </product>
+   </extension>
+   <extension
+         point="org.eclipse.ui.newWizards">
+      <category
+            id="org.tizen.rt.TizenRT"
+            name="Tizen RT">
+      </category>
+      <wizard
+            category="org.tizen.rt.TizenRT"
+            class="org.tizen.rt.ide.wizards.NewArtikProjectWizard"
+            finalPerspective="org.tizen.rt.ide.perspectives.TizenRT"
+            icon="icons/buildSample.gif"
+            id="org.tizen.rt.LocalProject"
+            name="TizenRT Project"
+            project="true">
+      </wizard>
+      <wizard
+            category="org.tizen.rt.TizenRT"
+            class="org.eclipse.egit.ui.internal.clone.RtGitImportWizard"
+            finalPerspective="org.tizen.rt.ide.perspectives.TizenRT"
+            icon="icons/buildSample.gif"
+            id="org.tizen.rt.GitProject"
+            name="TizenRT Project from Git"
+            project="true">
+      </wizard>
+      <primaryWizard
+            id="org.tizen.rt.LocalProject">
+      </primaryWizard>
+      <primaryWizard
+            id="org.tizen.rt.GitProject">
+      </primaryWizard>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectives">
+      <perspective
+            class="org.tizen.rt.ide.perspectives.TizenRTPerspective"
+            icon="icons/releng_gears.gif"
+            id="org.tizen.rt.ide.perspectives.TizenRT"
+            name="TizenRT">
+      </perspective>
+   </extension>
+   <extension
+         point="org.eclipse.ui.navigator.viewer">
+      <viewerActionBinding
+            viewerId="org.tizen.rt.viewer.navigator">
+         <includes>
+            <actionExtension
+                  pattern="org.eclipse.ui.navigator.resources.*">
+            </actionExtension>
+         </includes>
+      </viewerActionBinding>
+      <viewerContentBinding
+            viewerId="org.tizen.rt.viewer.navigator">
+         <includes>
+            <contentExtension
+                  pattern="org.eclipse.ui.navigator.resourceContent">
+            </contentExtension>
+            <contentExtension
+                  pattern="org.eclipse.ui.navigator.resources.filters.*">
+            </contentExtension>
+            <contentExtension
+                  pattern="org.eclipse.ui.navigator.resources.linkHelper">
+            </contentExtension>
+            <contentExtension
+                  pattern="org.eclipse.ui.navigator.resources.workingSets">
+            </contentExtension>
+         </includes>
+      </viewerContentBinding>
+   </extension>
+   <extension
+         point="org.eclipse.ui.views">
+      <view
+            class="org.eclipse.ui.navigator.CommonNavigator"
+            icon="icons/sample.gif"
+            id="org.tizen.rt.viewer.navigator"
+            name="TizenRT Navigator">
+      </view>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension
+            targetID="org.eclipse.ui.resourcePerspective">
+         <view
+               id="org.tizen.rt.viewer.navigator"
+               ratio="0.5"
+               relationship="stack"
+               relative="org.eclipse.ui.navigator.ProjectExplorer">
+         </view>
+      </perspectiveExtension>
+   </extension>
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <commonWizard
+            type="new"
+            wizardId="org.tizen.rt.LocalProject">
+         <enablement></enablement>
+      </commonWizard>
+      <commonWizard
+            type="new"
+            wizardId="org.tizen.rt.GitProject">
+         <enablement></enablement>
+      </commonWizard>
+   </extension>
+   <extension
+         id="RtProjectNature"
+         point="org.eclipse.core.resources.natures">
+      <runtime>
+         <run
+               class="org.tizen.rt.product.RtProjectNature">
+         </run>
+      </runtime>
+      <requires-nature
+            id="org.eclipse.cdt.core.cnature">
+      </requires-nature>
+   </extension>
+   <extension
+         point="org.eclipse.ui.ide.projectNatureImages">
+      <image
+            icon="icons/releng_gears.gif"
+            id="org.tizen.rt.product.RtProjectImage"
+            natureId="org.tizen.rt.product.RtProjectNature">
+      </image>
+   </extension>
+   <extension
+         point="org.eclipse.core.expressions.definitions">
+      <definition
+            id="org.tizen.rt.product.hasNature">
+         <with
+               variable="selection">
+            <and>
+               <count
+                     value="1">
+               </count>
+               <iterate
+                     ifEmpty="false"
+                     operator="and">
+                  <test
+                        property="org.eclipse.core.resources.projectNature"
+                        value="org.tizen.rt.product.RtProjectNature">
+                  </test>
+               </iterate>
+            </and>
+         </with>
+      </definition>
+   </extension>
+</plugin>
diff --git a/rt-ide/tizen.rt.product.plugin/plugin_customization.ini b/rt-ide/tizen.rt.product.plugin/plugin_customization.ini
new file mode 100644 (file)
index 0000000..df1b429
--- /dev/null
@@ -0,0 +1,15 @@
+# eclipse Workbench related preferences
+#org.eclipse.ui.ide/SAVE_ALL_BEFORE_BUILD=true
+#org.eclipse.core.resources/refresh.enabled=true
+#org.eclipse.core.resources/description.autobuilding=true
+org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = true
+org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false
+org.eclipse.ui/DOCK_PERSPECTIVE_BAR=topRight
+org.eclipse.ui/defaultPerspectiveId=org.tizen.web.ui.perspective.WebWidget
+
+org.eclipse.ui.workbench/SHOW_BUILDID_ON_STARTUP=true
+
+### CDT related preferences
+# API Hover Color Setting
+org.eclipse.cdt.ui/sourceHoverBackgroundColor.SystemDefault=false
+org.eclipse.cdt.ui/sourceHoverBackgroundColor=245,245,181
diff --git a/rt-ide/tizen.rt.product.plugin/pom.xml b/rt-ide/tizen.rt.product.plugin/pom.xml
new file mode 100644 (file)
index 0000000..9459fd3
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+      <groupId>org.tizen.rt</groupId>
+      <artifactId>tizen-rt-parent</artifactId>
+      <version>3.0.0-SNAPSHOT</version>
+      <relativePath>../tizen.rt.parent</relativePath>
+  </parent>
+
+  <groupId>org.tizen.rt</groupId>
+  <artifactId>org.tizen.rt.product.plugin</artifactId>
+  <version>3.0.0-SNAPSHOT</version>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/rt-ide/tizen.rt.product.plugin/resources/css/basestyle.css b/rt-ide/tizen.rt.product.plugin/resources/css/basestyle.css
new file mode 100644 (file)
index 0000000..93790fa
--- /dev/null
@@ -0,0 +1,267 @@
+/*************************************************/
+/* New ColorDefinitions for the E4 default theme */
+/*************************************************/
+ThemesExtension {
+    color-definition:
+    '#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_START', /* Inactive, unselected part color begin */
+    '#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_END',   /* Inactive, unselected part color end */
+    '#org-eclipse-ui-workbench-INACTIVE_TAB_OUTER_KEYLINE_COLOR',     /* Inactive part outer keyline color */
+    '#org-eclipse-ui-workbench-INACTIVE_TAB_INNER_KEYLINE_COLOR',     /* Inactive part inner keyline color */
+    '#org-eclipse-ui-workbench-INACTIVE_TAB_OUTLINE_COLOR',           /* Inactive part outline color */
+    '#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_START',   /* Active, unselected part color begin */
+    '#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_END',     /* Active, unselected part color end */
+    '#org-eclipse-ui-workbench-ACTIVE_TAB_OUTER_KEYLINE_COLOR',       /* Active part outer keyline color */
+    '#org-eclipse-ui-workbench-ACTIVE_TAB_INNER_KEYLINE_COLOR',       /* Active part inner keyline color */
+    '#org-eclipse-ui-workbench-ACTIVE_TAB_OUTLINE_COLOR';             /* Active part outline color */
+}
+
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_START {
+    color: #D7D7D7;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_UNSELECTED_TABS_COLOR_START')
+}
+
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_END {
+    color: #D7D7D7;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_UNSELECTED_TABS_COLOR_END');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_OUTER_KEYLINE_COLOR {
+    color: #AAAAAA;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_TAB_OUTER_KEYLINE_COLOR');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_INNER_KEYLINE_COLOR {
+    color: #AAAAAA;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_TAB_INNER_KEYLINE_COLOR');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_OUTLINE_COLOR {
+    color: #AAAAAA;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_TAB_OUTLINE_COLOR');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_START {
+    color: #D7D7D7;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_UNSELECTED_TABS_COLOR_START');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_END {
+    color: #D7D7D7;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_UNSELECTED_TABS_COLOR_END');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_OUTER_KEYLINE_COLOR {
+    color: #AAAAAA;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_TAB_OUTER_KEYLINE_COLOR');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_INNER_KEYLINE_COLOR {
+    color: #AAAAAA;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_TAB_INNER_KEYLINE_COLOR');
+}
+
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_OUTLINE_COLOR {
+    color: #AAAAAA;
+    category: '#org-eclipse-ui-presentation-default';
+    label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_TAB_OUTLINE_COLOR');
+}
+
+/* Already existing ColorDefinitions overridden for the E4 default theme */
+/* Inactive, selected part background begin */
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_BG_START {
+    color: #FFFFFF;
+}
+/* Inactive, selected part background end */
+ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_BG_END {
+    color: #FFFFFF;
+}
+/* Active, selected part background begin */
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_BG_START{
+    color: #FFFFFF;
+}
+/* Active, selected part background end */
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_BG_END {
+    color: #FFFFFF;
+}
+/* Active (no focus), selected part background begin */
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_NOFOCUS_TAB_BG_START {
+    color: #FFFFFF;
+}
+/* Active (no focus), selected part background end */
+ColorDefinition#org-eclipse-ui-workbench-ACTIVE_NOFOCUS_TAB_BG_END {
+    color: #FFFFFF;
+}
+
+
+/*********************/
+/* Default resource  */
+/*********************/
+.MToolControl.TrimStack {
+    frame-image: url(./winXPTSFrame.png);
+    handle-image: url(./winXPHandle.png);
+    frame-cuts: 5px 1px 5px 16px;
+}
+
+.MToolBar.Draggable {
+    handle-image: url(./tizenDragHandle.png);
+}
+
+.MToolControl.Draggable {
+    handle-image: url(./tizenDragHandle.png);
+}
+
+
+/*************/
+/* Common UI */
+/*************/
+.MPart.busy {
+    font-style: italic;
+}
+
+.MPart.highlighted {
+    font-weight: bold;
+}
+
+.MPartStack, .MPart {
+    font-family: '#org-eclipse-ui-workbench-TAB_TEXT_FONT';
+}
+
+.DragFeedback {
+    background-color: COLOR-WIDGET-NORMAL-SHADOW;
+}
+
+.ModifiedDragFeedback {
+    background-color: #A0A000;
+}
+
+/* Shell#IDEWindow */
+.MTrimmedWindow {
+    background-color: #999999;
+}
+
+.MTrimmedWindow.topLevel {
+    margin-bottom: 1px;
+    margin-left: 0px;
+    margin-right: 0px;
+    margin-top: 1px;
+}
+
+/* Custom Sash Width */
+.MPartSashContainer {
+    sash-width: 2px;
+}
+
+/* View BG */
+.MPartStack > .MPlaceholder {
+    background-color: #F4F4F4;
+}
+
+/* CTabFolder */
+.MPlaceholder > CTabFolder {
+    background-color: #FFFFFF;
+}
+.MPartStack {
+    padding: 0px 0px 0px;
+    color: #666666; /* unselected tab text */
+
+    swt-tab-renderer: url('bundleclass://org.eclipse.e4.ui.workbench.renderers.swt/org.eclipse.e4.ui.workbench.renderers.swt.TizenTabRendering');
+    swt-selected-tab-fill: #E1E1E1;
+    swt-unselected-tabs-color: #D7D7D7;
+    swt-outer-keyline-color: #AAAAAA;
+    swt-inner-keyline-color: '#org-eclipse-ui-workbench-INACTIVE_TAB_INNER_KEYLINE_COLOR';
+    swt-tab-outline: #AAAAAA;
+    unselected-hot-tab-color-background: #CDE9FF;
+
+    swt-single: false;
+    swt-simple: true;
+    swt-minimize-visible: true;
+    swt-maximize-visible: true;
+    swt-unselected-close-visible: false;
+    swt-shadow-visible: false;
+    swt-tab-height: 30px;
+}
+.MPartStack.active {
+    /**
+     * This color value must match the outerKeyline definitions in TizenTabRendering class
+     * from org.eclipse.e4.ui.workbench.renderers.swt package.
+     */
+    swt-outer-keyline-color: #008AEE;
+}
+
+/* CTabItem */
+.MPartStack > CTabItem:selected {
+    color: #0097DC;
+    swt-show-close: true;
+}
+
+/* Editor */
+#org-eclipse-ui-editorss .MPart {
+    background-color: #F8F8F8;
+}
+
+/* MultiPageEditorPart */
+#org-eclipse-e4-ui-compatibility-editor Composite CTabFolder {
+    padding: 0px 0px 0px;
+    color: #585858; /* unselected tab text */
+
+    swt-tab-renderer: url('bundleclass://org.eclipse.e4.ui.workbench.renderers.swt/org.eclipse.e4.ui.workbench.renderers.swt.Tizen2ndTabRendering');
+    swt-tab-position: top;
+    swt-selected-tab-fill: #FFFFFF;
+    swt-unselected-tabs-color: #FFFFFF;
+    swt-outer-keyline-color: #AAAAAA;
+    swt-inner-keyline-color: '#org-eclipse-ui-workbench-INACTIVE_TAB_INNER_KEYLINE_COLOR';
+    swt-tab-outline: #AAAAAA;
+    unselected-hot-tab-color-background: #CDE9FF;
+
+    swt-single: false;
+    swt-simple: true;
+    swt-shadow-visible: false;
+    swt-tab-height: 30px;
+
+    tizen-selected-tab-underline: false;
+    tizen-unselected-tab-separator: false;
+}
+#org-eclipse-e4-ui-compatibility-editor Composite CTabFolder > CTabItem:selected {
+    color: #0097DC;
+    font-weight: bold;
+    swt-show-close: false;
+}
+
+/* View toolbar BG */
+.MPartStack > Composite {
+    background-color: #E1E1E1;
+}
+
+/* Perspective Line */
+#PerspectiveSwitcher {
+    eclipse-perspective-keyline-color: #F8F8F8 #F8F8F8;
+}
+
+/* Toolbar BG */
+#org-eclipse-ui-main-toolbar {
+    background-color: #F8F8F8;
+}
+
+/* Toolbar - Left Vertical */
+#org-eclipse-ui-trim-vertical1 {
+    background-color: #F8F8F8;
+}
+
+/* Toolbar - Right Vertical */
+#org-eclipse-ui-trim-vertical2 {
+    background-color: #F8F8F8;
+}
+
+/* Status bar BG */
+#org-eclipse-ui-trim-status {
+    background-color: #E1E1E1;
+}
diff --git a/rt-ide/tizen.rt.product.plugin/resources/css/tizen_linux.css b/rt-ide/tizen.rt.product.plugin/resources/css/tizen_linux.css
new file mode 100644 (file)
index 0000000..ad0bfca
--- /dev/null
@@ -0,0 +1,14 @@
+@import url("basestyle.css");
+
+/***************/
+/* Linux Image */
+/***************/
+.MToolControl.TrimStack {
+    frame-image: url(./gtkTSFrame.png);
+    handle-image: url(./gtkHandle.png);
+}
+
+/**************/
+/* Linux UI */
+/**************/
+// TODO:
diff --git a/rt-ide/tizen.rt.product.plugin/resources/css/tizen_macosx.css b/rt-ide/tizen.rt.product.plugin/resources/css/tizen_macosx.css
new file mode 100644 (file)
index 0000000..a8108d8
--- /dev/null
@@ -0,0 +1,15 @@
+@import url("basestyle.css");
+
+/*************/
+/* Mac Image */
+/*************/
+.MToolControl.TrimStack {
+    frame-image: url(./macTSFrame.png);
+    handle-image: url(./macHandle.png);
+}
+
+
+/**************/
+/* MacOS X UI */
+/**************/
+// TODO:
diff --git a/rt-ide/tizen.rt.product.plugin/resources/css/tizen_windows.css b/rt-ide/tizen.rt.product.plugin/resources/css/tizen_windows.css
new file mode 100644 (file)
index 0000000..4cf884d
--- /dev/null
@@ -0,0 +1,16 @@
+@import url("basestyle.css");
+
+/*****************/
+/* Windows Image */
+/*****************/
+.MToolControl.TrimStack {
+    frame-image: url(./winClassicTSFrame.png);
+    handle-image: url(./winClassicHandle.png);
+    frame-cuts: 5px 1px 5px 16px;
+}
+
+
+/**************/
+/* Windows UI */
+/**************/
+// TODO:
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/dragHandle.png b/rt-ide/tizen.rt.product.plugin/resources/images/dragHandle.png
new file mode 100644 (file)
index 0000000..bea1179
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/dragHandle.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/gtkHandle.png b/rt-ide/tizen.rt.product.plugin/resources/images/gtkHandle.png
new file mode 100644 (file)
index 0000000..b0288cf
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/gtkHandle.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/gtkTSFrame.png b/rt-ide/tizen.rt.product.plugin/resources/images/gtkTSFrame.png
new file mode 100644 (file)
index 0000000..dd08bba
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/gtkTSFrame.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/macGrey.png b/rt-ide/tizen.rt.product.plugin/resources/images/macGrey.png
new file mode 100644 (file)
index 0000000..59075ad
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/macGrey.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/macHandle.png b/rt-ide/tizen.rt.product.plugin/resources/images/macHandle.png
new file mode 100644 (file)
index 0000000..98b2193
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/macHandle.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/macTSFrame.png b/rt-ide/tizen.rt.product.plugin/resources/images/macTSFrame.png
new file mode 100644 (file)
index 0000000..ee32cf5
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/macTSFrame.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/tizenDragHandle.png b/rt-ide/tizen.rt.product.plugin/resources/images/tizenDragHandle.png
new file mode 100644 (file)
index 0000000..16d3d9f
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/tizenDragHandle.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/win7.png b/rt-ide/tizen.rt.product.plugin/resources/images/win7.png
new file mode 100644 (file)
index 0000000..b9bf09d
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/win7.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/win7Handle.png b/rt-ide/tizen.rt.product.plugin/resources/images/win7Handle.png
new file mode 100644 (file)
index 0000000..b73a963
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/win7Handle.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/win7TSFrame.png b/rt-ide/tizen.rt.product.plugin/resources/images/win7TSFrame.png
new file mode 100644 (file)
index 0000000..eec6be6
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/win7TSFrame.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/winClassicHandle.png b/rt-ide/tizen.rt.product.plugin/resources/images/winClassicHandle.png
new file mode 100644 (file)
index 0000000..cfeb6dd
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/winClassicHandle.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/winClassicTSFrame.png b/rt-ide/tizen.rt.product.plugin/resources/images/winClassicTSFrame.png
new file mode 100644 (file)
index 0000000..0b9101c
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/winClassicTSFrame.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/winXPBluHandle.png b/rt-ide/tizen.rt.product.plugin/resources/images/winXPBluHandle.png
new file mode 100644 (file)
index 0000000..45441b3
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/winXPBluHandle.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/winXPBluTSFrame.png b/rt-ide/tizen.rt.product.plugin/resources/images/winXPBluTSFrame.png
new file mode 100644 (file)
index 0000000..5880d78
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/winXPBluTSFrame.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/winXPBlue.png b/rt-ide/tizen.rt.product.plugin/resources/images/winXPBlue.png
new file mode 100644 (file)
index 0000000..fc27964
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/winXPBlue.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/winXPHandle.png b/rt-ide/tizen.rt.product.plugin/resources/images/winXPHandle.png
new file mode 100644 (file)
index 0000000..17eb69a
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/winXPHandle.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/winXPOlive.png b/rt-ide/tizen.rt.product.plugin/resources/images/winXPOlive.png
new file mode 100644 (file)
index 0000000..c745ee1
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/winXPOlive.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/resources/images/winXPTSFrame.png b/rt-ide/tizen.rt.product.plugin/resources/images/winXPTSFrame.png
new file mode 100644 (file)
index 0000000..baf45b9
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/resources/images/winXPTSFrame.png differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/MANIFEST.MF b/rt-ide/tizen.rt.product.plugin/target/MANIFEST.MF
new file mode 100644 (file)
index 0000000..4993d0d
--- /dev/null
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0\r
+Bundle-SymbolicName: org.tizen.rt.product.plugin;singleton:=true\r
+Bundle-Name: %Bundle-Name\r
+Bundle-Version: 3.0.0.201702170552\r
+Bundle-ClassPath: lib/slf4j-api-1.6.4.jar,lib/slf4j-log4j12-1.6.4.jar,\r
+ lib/log4j-1.2.17.jar,.\r
+Require-Bundle: org.eclipse.ui,org.eclipse.core.runtime,org.eclipse.e4\r
+ .ui.css.swt.theme,org.eclipse.e4.ui.css.core,org.eclipse.e4.ui.css.sw\r
+ t,org.eclipse.e4.ui.workbench.renderers.swt;bundle-version="0.13.0",o\r
+ rg.eclipse.core.resources,org.eclipse.ui.ide,org.eclipse.ui.console,o\r
+ rg.eclipse.cdt.core,org.eclipse.ui.navigator,org.eclipse.ui.navigator\r
+ .resources,org.eclipse.jgit,org.eclipse.egit.core,org.eclipse.egit.ui\r
+ ,org.eclipse.ui.forms,org.eclipse.text,org.eclipse.core.expressions,o\r
+ rg.eclipse.tm.terminal.control,org.eclipse.tm.terminal.view.ui,org.ec\r
+ lipse.core.filesystem;bundle-version="1.5.0"\r
+Bundle-ManifestVersion: 2\r
+Bundle-Activator: org.tizen.rt.ide.Activator\r
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8\r
+Bundle-ActivationPolicy: lazy\r
+Bundle-Vendor: %Bundle-Vendor\r
+\r
diff --git a/rt-ide/tizen.rt.product.plugin/target/about.mappings b/rt-ide/tizen.rt.product.plugin/target/about.mappings
new file mode 100644 (file)
index 0000000..6e67959
--- /dev/null
@@ -0,0 +1,9 @@
+# about.mappings
+# contains fill-ins for about.properties and bundle.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=2017-02-17_05-48
+1=Tizen Studio for RT 1.0.1
+2=http://www.tizen.org
+3=
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$1$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$1$1.class
new file mode 100644 (file)
index 0000000..c20c6a6
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$1$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$1.class
new file mode 100644 (file)
index 0000000..84908bf
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$10.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$10.class
new file mode 100644 (file)
index 0000000..9e55df8
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$10.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$2.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$2.class
new file mode 100644 (file)
index 0000000..9e84232
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$2.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$3.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$3.class
new file mode 100644 (file)
index 0000000..5090a70
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$3.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$4.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$4.class
new file mode 100644 (file)
index 0000000..3efc408
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$4.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$5.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$5.class
new file mode 100644 (file)
index 0000000..3e8563d
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$5.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$6.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$6.class
new file mode 100644 (file)
index 0000000..6bfef3d
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$6.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$7.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$7.class
new file mode 100644 (file)
index 0000000..88431a2
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$7.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$8.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$8.class
new file mode 100644 (file)
index 0000000..f2684ba
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$8.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$9.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$9.class
new file mode 100644 (file)
index 0000000..ad185d4
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard$9.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard.class
new file mode 100644 (file)
index 0000000..fcaa023
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitImportWizard.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$1.class
new file mode 100644 (file)
index 0000000..945ab76
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$2.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$2.class
new file mode 100644 (file)
index 0000000..8e7ad04
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$2.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$3.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$3.class
new file mode 100644 (file)
index 0000000..3092767
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$3.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$4.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$4.class
new file mode 100644 (file)
index 0000000..4013c03
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$4.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$5.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$5.class
new file mode 100644 (file)
index 0000000..d0c3c6b
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$5.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$6.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$6.class
new file mode 100644 (file)
index 0000000..acc2918
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$6.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$7.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$7.class
new file mode 100644 (file)
index 0000000..8b5e9ee
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$7.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$8$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$8$1.class
new file mode 100644 (file)
index 0000000..8d0120f
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$8$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$8.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$8.class
new file mode 100644 (file)
index 0000000..c94b866
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$8.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$ProjectLabelProvider.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$ProjectLabelProvider.class
new file mode 100644 (file)
index 0000000..2aaf2e0
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage$ProjectLabelProvider.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage.class
new file mode 100644 (file)
index 0000000..4fd112e
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitProjectsImportPage.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage$1.class
new file mode 100644 (file)
index 0000000..021014d
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage$2.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage$2.class
new file mode 100644 (file)
index 0000000..7add0a1
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage$2.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage.class
new file mode 100644 (file)
index 0000000..ea62e66
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/eclipse/egit/ui/internal/clone/RtGitSelectWizardPage.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Activator.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Activator.class
new file mode 100644 (file)
index 0000000..2e86748
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Activator.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/LinuxBuildCommand.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/LinuxBuildCommand.class
new file mode 100644 (file)
index 0000000..ce6fb64
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/LinuxBuildCommand.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/LinuxFlashCommand.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/LinuxFlashCommand.class
new file mode 100644 (file)
index 0000000..21c9dd0
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/LinuxFlashCommand.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Messages.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Messages.class
new file mode 100644 (file)
index 0000000..5e105ac
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Messages.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/ResourceManager.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/ResourceManager.class
new file mode 100644 (file)
index 0000000..f90d940
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/ResourceManager.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/RtosCommandManager$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/RtosCommandManager$1.class
new file mode 100644 (file)
index 0000000..e69534a
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/RtosCommandManager$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/RtosCommandManager.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/RtosCommandManager.class
new file mode 100644 (file)
index 0000000..b2cc515
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/RtosCommandManager.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32BuildCommand$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32BuildCommand$1.class
new file mode 100644 (file)
index 0000000..3a004c6
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32BuildCommand$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32BuildCommand$2.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32BuildCommand$2.class
new file mode 100644 (file)
index 0000000..18ec47c
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32BuildCommand$2.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32BuildCommand.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32BuildCommand.class
new file mode 100644 (file)
index 0000000..9216d0a
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32BuildCommand.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32FlashCommand$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32FlashCommand$1.class
new file mode 100644 (file)
index 0000000..46fe209
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32FlashCommand$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32FlashCommand.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32FlashCommand.class
new file mode 100644 (file)
index 0000000..d3025ac
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/Win32FlashCommand.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/BuildBuilder.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/BuildBuilder.class
new file mode 100644 (file)
index 0000000..593881d
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/BuildBuilder.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/BuildOption.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/BuildOption.class
new file mode 100644 (file)
index 0000000..5230250
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/BuildOption.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage$1.class
new file mode 100644 (file)
index 0000000..f2db980
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage$2.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage$2.class
new file mode 100644 (file)
index 0000000..c5f70a6
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage$2.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage$TableViewerProvider.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage$TableViewerProvider.class
new file mode 100644 (file)
index 0000000..3e89f3e
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage$TableViewerProvider.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage.class
new file mode 100644 (file)
index 0000000..eff2b43
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildDialogPage.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizard$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizard$1.class
new file mode 100644 (file)
index 0000000..7d22a95
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizard$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizard.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizard.class
new file mode 100644 (file)
index 0000000..9d722dc
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizard.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizardDialog$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizardDialog$1.class
new file mode 100644 (file)
index 0000000..7f9aa78
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizardDialog$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizardDialog.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizardDialog.class
new file mode 100644 (file)
index 0000000..a3d90c5
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/build/RtosBuildWizardDialog.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager$1.class
new file mode 100644 (file)
index 0000000..c9e4462
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager$2.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager$2.class
new file mode 100644 (file)
index 0000000..5e2da21
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager$2.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager$ConsoleSettingThread.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager$ConsoleSettingThread.class
new file mode 100644 (file)
index 0000000..b85aaec
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager$ConsoleSettingThread.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager.class
new file mode 100644 (file)
index 0000000..36bccad
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/console/ConsoleManager.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/FlashBuilder.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/FlashBuilder.class
new file mode 100644 (file)
index 0000000..09b9649
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/FlashBuilder.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/FlashOption.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/FlashOption.class
new file mode 100644 (file)
index 0000000..b7957f2
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/FlashOption.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage$1.class
new file mode 100644 (file)
index 0000000..daad85e
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage$2.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage$2.class
new file mode 100644 (file)
index 0000000..3e8545d
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage$2.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage$TableViewerProvider.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage$TableViewerProvider.class
new file mode 100644 (file)
index 0000000..a4456c2
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage$TableViewerProvider.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage.class
new file mode 100644 (file)
index 0000000..01c6573
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashDialogPage.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizard$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizard$1.class
new file mode 100644 (file)
index 0000000..a6c6f59
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizard$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizard.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizard.class
new file mode 100644 (file)
index 0000000..718feca
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizard.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizardDialog$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizardDialog$1.class
new file mode 100644 (file)
index 0000000..a4539ba
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizardDialog$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizardDialog.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizardDialog.class
new file mode 100644 (file)
index 0000000..6a99945
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/flash/RtosFlashWizardDialog.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/BuildHandler$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/BuildHandler$1.class
new file mode 100644 (file)
index 0000000..a72925e
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/BuildHandler$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/BuildHandler.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/BuildHandler.class
new file mode 100644 (file)
index 0000000..3e48870
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/BuildHandler.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/FlashHandler$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/FlashHandler$1.class
new file mode 100644 (file)
index 0000000..6cdf675
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/FlashHandler$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/FlashHandler.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/FlashHandler.class
new file mode 100644 (file)
index 0000000..f53979a
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/FlashHandler.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/TerminalHandler.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/TerminalHandler.class
new file mode 100644 (file)
index 0000000..f7cb2ff
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/handlers/TerminalHandler.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/log4j.properties b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/log4j.properties
new file mode 100644 (file)
index 0000000..8f2e9cb
--- /dev/null
@@ -0,0 +1,9 @@
+# Set root logger level to DEBUG and its only appender to A1.
+log4j.rootLogger=DEBUG, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%d{yyyy.MM.dd HH:mm:ss}][%-5p] %F(%L) - %m%n
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/messages.properties b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/messages.properties
new file mode 100644 (file)
index 0000000..fc5304d
--- /dev/null
@@ -0,0 +1,15 @@
+NewArtikProjectMainWizard_window_title=Create TizenRT Project
+
+NewArtikProjectMainPage_title=New TizenRT Project
+NewArtikProjectMainPage_desc=Select TizenRT Project Source
+NewArtikProjectMainPage_local_button_text=Create New TizenRT Project
+NewArtikProjectMainPage_git_button_text=Create TizenRT Project from Git
+
+NewArtikProjectWizard_create_op_label=Create new TizenRT project
+NewArtikProjectWizard_window_title=New TizenRT Project
+
+NewArtikProjectWizardPage_desc=New TizenRT Project
+NewArtikProjectWizardPage_title=New TizenRT Project
+
+NewArtikProjectWizardPage2_desc=Multi-page Editor File
+NewArtikProjectWizardPage2_title=This wizard creates a new file with *.defs extension that can be opened by a multi-page editor.
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/perspectives/TizenRTPerspective.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/perspectives/TizenRTPerspective.class
new file mode 100644 (file)
index 0000000..9136c6d
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/perspectives/TizenRTPerspective.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/IReporter.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/IReporter.class
new file mode 100644 (file)
index 0000000..36e2e97
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/IReporter.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/OSChecker.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/OSChecker.class
new file mode 100644 (file)
index 0000000..9448b3a
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/OSChecker.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/ProcUtil.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/ProcUtil.class
new file mode 100644 (file)
index 0000000..ee38feb
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/ProcUtil.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/Util.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/Util.class
new file mode 100644 (file)
index 0000000..170b759
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/Util.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/XMLUtil$UniversalNamespaceResolver.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/XMLUtil$UniversalNamespaceResolver.class
new file mode 100644 (file)
index 0000000..e9965ca
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/XMLUtil$UniversalNamespaceResolver.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/XMLUtil.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/XMLUtil.class
new file mode 100644 (file)
index 0000000..80ddb44
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/XMLUtil.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/ZipUtil.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/ZipUtil.class
new file mode 100644 (file)
index 0000000..1d28b3b
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/util/ZipUtil.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizard$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizard$1.class
new file mode 100644 (file)
index 0000000..debafb1
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizard$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizard.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizard.class
new file mode 100644 (file)
index 0000000..43a3526
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizard.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage.class
new file mode 100644 (file)
index 0000000..09e561c
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2$1.class
new file mode 100644 (file)
index 0000000..da37ba2
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2$2.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2$2.class
new file mode 100644 (file)
index 0000000..56b7e6f
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2$2.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2.class
new file mode 100644 (file)
index 0000000..04933b4
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewArtikProjectWizardPage2.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizard$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizard$1.class
new file mode 100644 (file)
index 0000000..f3007e0
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizard$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizard$2.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizard$2.class
new file mode 100644 (file)
index 0000000..7a16cca
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizard$2.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizard.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizard.class
new file mode 100644 (file)
index 0000000..4913128
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizard.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage$1.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage$1.class
new file mode 100644 (file)
index 0000000..51f013d
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage$1.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage$2.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage$2.class
new file mode 100644 (file)
index 0000000..1dae478
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage$2.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage$3.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage$3.class
new file mode 100644 (file)
index 0000000..9a6ef2a
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage$3.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage.class
new file mode 100644 (file)
index 0000000..33e7433
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/NewMakeDefsWizardPage.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/TemplateData.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/TemplateData.class
new file mode 100644 (file)
index 0000000..9a381de
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/ide/wizards/TemplateData.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/product/RtProjectNature.class b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/product/RtProjectNature.class
new file mode 100644 (file)
index 0000000..8cbb89e
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/classes/org/tizen/rt/product/RtProjectNature.class differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/local-artifacts.properties b/rt-ide/tizen.rt.product.plugin/target/local-artifacts.properties
new file mode 100644 (file)
index 0000000..148a29f
--- /dev/null
@@ -0,0 +1,4 @@
+#Fri Feb 17 14:52:44 KST 2017\r
+artifact.attached.p2metadata=C\:\\Users\\casval\\rtsdk\\rtosIDE\\product\\rt-ide\\tizen.rt.product.plugin\\target\\p2content.xml\r
+artifact.main=C\:\\Users\\casval\\rtsdk\\rtosIDE\\product\\rt-ide\\tizen.rt.product.plugin\\target\\org.tizen.rt.product.plugin-3.0.0-SNAPSHOT.jar\r
+artifact.attached.p2artifacts=C\:\\Users\\casval\\rtsdk\\rtosIDE\\product\\rt-ide\\tizen.rt.product.plugin\\target\\p2artifacts.xml\r
diff --git a/rt-ide/tizen.rt.product.plugin/target/maven-archiver/pom.properties b/rt-ide/tizen.rt.product.plugin/target/maven-archiver/pom.properties
new file mode 100644 (file)
index 0000000..c011376
--- /dev/null
@@ -0,0 +1,5 @@
+#Generated by Maven\r
+#Fri Feb 17 14:52:43 KST 2017\r
+version=3.0.0-SNAPSHOT\r
+groupId=org.tizen.rt\r
+artifactId=org.tizen.rt.product.plugin\r
diff --git a/rt-ide/tizen.rt.product.plugin/target/org.tizen.rt.product.plugin-3.0.0-SNAPSHOT.jar b/rt-ide/tizen.rt.product.plugin/target/org.tizen.rt.product.plugin-3.0.0-SNAPSHOT.jar
new file mode 100644 (file)
index 0000000..60cb0b3
Binary files /dev/null and b/rt-ide/tizen.rt.product.plugin/target/org.tizen.rt.product.plugin-3.0.0-SNAPSHOT.jar differ
diff --git a/rt-ide/tizen.rt.product.plugin/target/p2artifacts.xml b/rt-ide/tizen.rt.product.plugin/target/p2artifacts.xml
new file mode 100644 (file)
index 0000000..06a3b1a
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version='1.0' encoding='UTF-8'?>\r
+<?artifactRepository version='1.1.0'?>\r
+<artifacts size='1'>\r
+  <artifact classifier='osgi.bundle' id='org.tizen.rt.product.plugin' version='3.0.0.201702170552'>\r
+    <properties size='5'>\r
+      <property name='artifact.size' value='615878'/>\r
+      <property name='download.size' value='615878'/>\r
+      <property name='maven-groupId' value='org.tizen.rt'/>\r
+      <property name='maven-artifactId' value='org.tizen.rt.product.plugin'/>\r
+      <property name='maven-version' value='3.0.0-SNAPSHOT'/>\r
+    </properties>\r
+  </artifact>\r
+</artifacts>\r
diff --git a/rt-ide/tizen.rt.product.plugin/target/p2content.xml b/rt-ide/tizen.rt.product.plugin/target/p2content.xml
new file mode 100644 (file)
index 0000000..d3b1dde
--- /dev/null
@@ -0,0 +1,52 @@
+<?xml version='1.0' encoding='UTF-8'?>\r
+<units size='1'>\r
+  <unit id='org.tizen.rt.product.plugin' version='3.0.0.201702170552'>\r
+    <update id='org.tizen.rt.product.plugin' range='[0.0.0,3.0.0.201702170552)' severity='0'/>\r
+    <properties size='5'>\r
+      <property name='org.eclipse.equinox.p2.name' value='%Bundle-Name'/>\r
+      <property name='org.eclipse.equinox.p2.provider' value='%Bundle-Vendor'/>\r
+      <property name='maven-groupId' value='org.tizen.rt'/>\r
+      <property name='maven-artifactId' value='org.tizen.rt.product.plugin'/>\r
+      <property name='maven-version' value='3.0.0-SNAPSHOT'/>\r
+    </properties>\r
+    <provides size='3'>\r
+      <provided namespace='org.eclipse.equinox.p2.iu' name='org.tizen.rt.product.plugin' version='3.0.0.201702170552'/>\r
+      <provided namespace='osgi.bundle' name='org.tizen.rt.product.plugin' version='3.0.0.201702170552'/>\r
+      <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>\r
+    </provides>\r
+    <requires size='21'>\r
+      <required namespace='osgi.bundle' name='org.eclipse.ui' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.core.runtime' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.e4.ui.css.swt.theme' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.e4.ui.css.core' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.e4.ui.css.swt' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.e4.ui.workbench.renderers.swt' range='0.13.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.core.resources' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.ui.ide' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.ui.console' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.cdt.core' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.ui.navigator' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.ui.navigator.resources' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.jgit' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.egit.core' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.egit.ui' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.ui.forms' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.text' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.core.expressions' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.tm.terminal.control' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.tm.terminal.view.ui' range='0.0.0'/>\r
+      <required namespace='osgi.bundle' name='org.eclipse.core.filesystem' range='1.5.0'/>\r
+    </requires>\r
+    <artifacts size='1'>\r
+      <artifact classifier='osgi.bundle' id='org.tizen.rt.product.plugin' version='3.0.0.201702170552'/>\r
+    </artifacts>\r
+    <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>\r
+    <touchpointData size='1'>\r
+      <instructions size='1'>\r
+        <instruction key='manifest'>\r
+          Bundle-SymbolicName: org.tizen.rt.product.plugin;singleton:=true&#xA;Bundle-Version: 3.0.0.201702170552&#xA;\r
+        </instruction>\r
+      </instructions>\r
+    </touchpointData>\r
+  </unit>\r
+</units>\r
diff --git a/rt-ide/tizen.rt.product/.DS_Store b/rt-ide/tizen.rt.product/.DS_Store
new file mode 100644 (file)
index 0000000..95b7495
Binary files /dev/null and b/rt-ide/tizen.rt.product/.DS_Store differ
diff --git a/rt-ide/tizen.rt.product/.project b/rt-ide/tizen.rt.product/.project
new file mode 100644 (file)
index 0000000..0068bda
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>tizen.rt.product</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+       </buildSpec>
+       <natures>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/tizen.rt.product/icons/tizen_studio.icns b/rt-ide/tizen.rt.product/icons/tizen_studio.icns
new file mode 100644 (file)
index 0000000..22a0728
Binary files /dev/null and b/rt-ide/tizen.rt.product/icons/tizen_studio.icns differ
diff --git a/rt-ide/tizen.rt.product/icons/tizen_studio.ico b/rt-ide/tizen.rt.product/icons/tizen_studio.ico
new file mode 100644 (file)
index 0000000..7925a8d
Binary files /dev/null and b/rt-ide/tizen.rt.product/icons/tizen_studio.ico differ
diff --git a/rt-ide/tizen.rt.product/icons/tizen_studio_256.xpm b/rt-ide/tizen.rt.product/icons/tizen_studio_256.xpm
new file mode 100644 (file)
index 0000000..61d5dfc
--- /dev/null
@@ -0,0 +1,1330 @@
+/* XPM */
+static char * icon2_xpm[] = {
+"256 256 1071 2",
+"      c None",
+".     c #0091EF",
+"+     c #0088EE",
+"@     c #008AEE",
+"#     c #00A1F1",
+"$     c #078AEE",
+"%     c #1B8CEE",
+"&     c #158BEE",
+"*     c #018AEE",
+"=     c #1C8CEE",
+"-     c #0289EE",
+";     c #0080ED",
+">     c #0084ED",
+",     c #038AEE",
+"'     c #258DEE",
+")     c #008CEE",
+"!     c #81AFF2",
+"~     c #62A2F1",
+"{     c #0081ED",
+"]     c #0A8AEE",
+"^     c #178CEE",
+"/     c #198BEE",
+"(     c #007BED",
+"_     c #77ACF2",
+":     c #E8F0FC",
+"<     c #FFFFFF",
+"[     c #B1CDF6",
+"}     c #0083ED",
+"|     c #B0CCF6",
+"1     c #FDFEFF",
+"2     c #69A5F1",
+"3     c #168BEE",
+"4     c #0D8BEE",
+"5     c #248DEE",
+"6     c #007DED",
+"7     c #4E9CF0",
+"8     c #DBE8FB",
+"9     c #FDFDFF",
+"0     c #8FB7F3",
+"a     c #007EED",
+"b     c #1F8CEE",
+"c     c #1F8DEE",
+"d     c #94BCF4",
+"e     c #F7FBFE",
+"f     c #FEFFFF",
+"g     c #FEFEFF",
+"h     c #8AB4F3",
+"i     c #007FED",
+"j     c #1E8CEE",
+"k     c #278EEE",
+"l     c #018DEE",
+"m     c #C7DBF9",
+"n     c #8BB4F3",
+"o     c #1A8BEE",
+"p     c #74ABF2",
+"q     c #EBF2FD",
+"r     c #AFCCF6",
+"s     c #8AB3F3",
+"t     c #4D9BF0",
+"u     c #DAE8FB",
+"v     c #93BBF4",
+"w     c #F6FAFE",
+"x     c #8AB2F2",
+"y     c #028AEE",
+"z     c #008DEE",
+"A     c #C6DAF9",
+"B     c #73AAF2",
+"C     c #EAF2FD",
+"D     c #84B0F2",
+"E     c #0085ED",
+"F     c #0082ED",
+"G     c #AECBF6",
+"H     c #0C8BEE",
+"I     c #4B9AF0",
+"J     c #DAE7FB",
+"K     c #7FAEF2",
+"L     c #92BBF4",
+"M     c #7EAEF2",
+"N     c #C6DAF8",
+"O     c #FFFEFF",
+"P     c #7BADF2",
+"Q     c #1A8CEE",
+"R     c #1C8BEE",
+"S     c #71AAF2",
+"T     c #78ABF2",
+"U     c #198CEE",
+"V     c #228DEE",
+"W     c #0086EE",
+"X     c #ADCBF6",
+"Y     c #77ABF2",
+"Z     c #3B96EF",
+"`     c #D7E6FA",
+" .    c #72AAF2",
+"..    c #188CEE",
+"+.    c #068AEE",
+"@.    c #7AAEF2",
+"#.    c #F1F7FE",
+"$.    c #72A9F2",
+"%.    c #0E8BEE",
+"&.    c #1B8BEE",
+"*.    c #007CED",
+"=.    c #A1C3F5",
+"-.    c #FDFFFF",
+";.    c #6DA8F1",
+">.    c #128BEE",
+",.    c #0C8AEE",
+"'.    c #BAD2F7",
+").    c #118BEE",
+"!.    c #0589EE",
+"~.    c #C8DBF9",
+"{.    c #69A7F1",
+"].    c #168CEE",
+"^.    c #0A8BEE",
+"/.    c #CCDEF9",
+"(.    c #FCFFFF",
+"_.    c #67A6F1",
+":.    c #158CEE",
+"<.    c #188BEE",
+"[.    c #FCFEFF",
+"}.    c #65A5F1",
+"|.    c #208DEE",
+"1.    c #AAC9F6",
+"2.    c #FBFEFF",
+"3.    c #62A4F1",
+"4.    c #148BEE",
+"5.    c #0089EE",
+"6.    c #EDF4FD",
+"7.    c #61A4F1",
+"8.    c #7AADF2",
+"9.    c #5DA2F1",
+"0.    c #138BEE",
+"a.    c #238DEE",
+"b.    c #AECAF6",
+"c.    c #218DEE",
+"d.    c #CBDDF9",
+"e.    c #FAFDFF",
+"f.    c #5AA1F1",
+"g.    c #E0EAFB",
+"h.    c #59A1F1",
+"i.    c #008BEE",
+"j.    c #158AEE",
+"k.    c #E5EFFC",
+"l.    c #F9FDFF",
+"m.    c #56A0F0",
+"n.    c #098BEE",
+"o.    c #6DAEF2",
+"p.    c #E9F2FD",
+"q.    c #F9FCFF",
+"r.    c #559FF0",
+"s.    c #0B8BEE",
+"t.    c #5B9EF0",
+"u.    c #B3D2F7",
+"v.    c #048EEE",
+"w.    c #E8F2FD",
+"x.    c #549EF0",
+"y.    c #1D8CEE",
+"z.    c #97BCF4",
+"A.    c #CFE2FA",
+"B.    c #E4EFFC",
+"C.    c #F9FCFE",
+"D.    c #519DF0",
+"E.    c #108BEE",
+"F.    c #0079EC",
+"G.    c #C3D7F8",
+"H.    c #E2EBFB",
+"I.    c #E1EBFB",
+"J.    c #E5EEFC",
+"K.    c #D1E1FA",
+"L.    c #F8FCFE",
+"M.    c #4F9CF0",
+"N.    c #0F8BEE",
+"O.    c #0086ED",
+"P.    c #4699EF",
+"Q.    c #FBFDFF",
+"R.    c #EEF5FD",
+"S.    c #2991EF",
+"T.    c #007AEC",
+"U.    c #BCD3F7",
+"V.    c #F8FBFE",
+"W.    c #8CB7F3",
+"X.    c #5A9FF0",
+"Y.    c #0077EC",
+"Z.    c #9FC1F5",
+"`.    c #BDD4F7",
+" +    c #81B1F2",
+".+    c #4C9BF0",
+"++    c #0085EE",
+"@+    c #E2ECFC",
+"#+    c #A9C7F6",
+"$+    c #3C95EF",
+"%+    c #539DF0",
+"&+    c #CCDDF9",
+"*+    c #D7E5FA",
+"=+    c #4A99EF",
+"-+    c #93BAF4",
+";+    c #178EEE",
+">+    c #F8FAFE",
+",+    c #4A99F0",
+"'+    c #048AEE",
+")+    c #C2D7F8",
+"!+    c #6BA6F1",
+"~+    c #70A9F1",
+"{+    c #4998EF",
+"]+    c #208CEE",
+"^+    c #0689EE",
+"/+    c #268EEE",
+"(+    c #058AEE",
+"_+    c #118AEE",
+":+    c #0087EE",
+"<+    c #A7C6F5",
+"[+    c #088BEE",
+"}+    c #148CEE",
+"|+    c #0189EE",
+"1+    c #3191EF",
+"2+    c #4A98EF",
+"3+    c #549FF0",
+"4+    c #6AA7F1",
+"5+    c #85B0F2",
+"6+    c #8EB7F3",
+"7+    c #97BFF5",
+"8+    c #AAC8F6",
+"9+    c #B9CFF7",
+"0+    c #C2D8F8",
+"a+    c #D4E4FA",
+"b+    c #D9E6FB",
+"c+    c #BFD5F8",
+"d+    c #76ADF2",
+"e+    c #038BEE",
+"f+    c #268DEE",
+"g+    c #0389EE",
+"h+    c #5CA0F0",
+"i+    c #D6E4FA",
+"j+    c #BCD4F7",
+"k+    c #F7FAFE",
+"l+    c #4896EF",
+"m+    c #128AEE",
+"n+    c #3D93EF",
+"o+    c #4C9AF0",
+"p+    c #89B3F3",
+"q+    c #8FB9F4",
+"r+    c #9CC2F5",
+"s+    c #B2CBF6",
+"t+    c #BDD2F7",
+"u+    c #CEE0F9",
+"v+    c #DEE7FB",
+"w+    c #E6F0FC",
+"x+    c #F1F6FD",
+"y+    c #CFE0F9",
+"z+    c #88B4F3",
+"A+    c #3A94EF",
+"B+    c #4697EF",
+"C+    c #509DF0",
+"D+    c #559EF0",
+"E+    c #2A91EF",
+"F+    c #99BEF4",
+"G+    c #4E9BF0",
+"H+    c #78ACF2",
+"I+    c #4997EF",
+"J+    c #1B8FEF",
+"K+    c #4596EF",
+"L+    c #7DADF2",
+"M+    c #8CB5F3",
+"N+    c #92BCF4",
+"O+    c #A2C5F5",
+"P+    c #B8CEF6",
+"Q+    c #BED4F8",
+"R+    c #C5DBF9",
+"S+    c #D4E2FA",
+"T+    c #E0E9FB",
+"U+    c #E2EDFC",
+"V+    c #F4F8FE",
+"W+    c #FCFDFF",
+"X+    c #F4F9FE",
+"Y+    c #B4CEF7",
+"Z+    c #4599EF",
+"`+    c #79ADF2",
+" @    c #B2CDF7",
+".@    c #D7E4FA",
+"+@    c #FAFCFF",
+"@@    c #F0F6FD",
+"#@    c #569EF0",
+"$@    c #C7DAF9",
+"%@    c #9DC0F4",
+"&@    c #F5F9FE",
+"*@    c #4796EF",
+"=@    c #007BEC",
+"-@    c #2D92EF",
+";@    c #7FAFF2",
+">@    c #96BFF4",
+",@    c #BBD0F7",
+"'@    c #BFD6F8",
+")@    c #C9DDF9",
+"!@    c #D9E5FA",
+"~@    c #F7F9FE",
+"{@    c #C0D6F8",
+"]@    c #489AF0",
+"^@    c #63A3F1",
+"/@    c #B9D1F7",
+"(@    c #0489EE",
+"_@    c #0488EE",
+":@    c #D8E5FA",
+"<@    c #ADCAF6",
+"[@    c #A2C3F5",
+"}@    c #F2F8FE",
+"|@    c #6AA6F1",
+"1@    c #CDDFF9",
+"2@    c #1592EF",
+"3@    c #5EA1F0",
+"4@    c #94BBF4",
+"5@    c #A4C5F5",
+"6@    c #CADDF9",
+"7@    c #E9F1FC",
+"8@    c #81B1F3",
+"9@    c #21A3F1",
+"0@    c #9EC0F4",
+"a@    c #B2CDF6",
+"b@    c #DEEAFB",
+"c@    c #589FF0",
+"d@    c #C3D8F8",
+"e@    c #278DEE",
+"f@    c #22A3F1",
+"g@    c #0097F0",
+"h@    c #CBDFF9",
+"i@    c #078DEE",
+"j@    c #0074EC",
+"k@    c #75ABF2",
+"l@    c #B7D1F7",
+"m@    c #75ACF2",
+"n@    c #05A1F1",
+"o@    c #01A0F1",
+"p@    c #00A3F1",
+"q@    c #EBF4FD",
+"r@    c #90B9F4",
+"s@    c #DCE8FB",
+"t@    c #AFCBF6",
+"u@    c #8BB7F3",
+"v@    c #A9C8F6",
+"w@    c #16A2F1",
+"x@    c #009CF0",
+"y@    c #6BB6F4",
+"z@    c #8FB9F3",
+"A@    c #73ABF2",
+"B@    c #7EADF2",
+"C@    c #E9F1FD",
+"D@    c #59A0F0",
+"E@    c #2892EF",
+"F@    c #D3E3FA",
+"G@    c #4599F0",
+"H@    c #A4CEF7",
+"I@    c #76ABF2",
+"J@    c #E4EEFC",
+"K@    c #D9E7FB",
+"L@    c #178FEF",
+"M@    c #69A6F1",
+"N@    c #8CB8F3",
+"O@    c #0789EE",
+"P@    c #0099F0",
+"Q@    c #CFE4FA",
+"R@    c #CEDFF9",
+"S@    c #97BDF4",
+"T@    c #C9DCF9",
+"U@    c #0C89EE",
+"V@    c #07A1F1",
+"W@    c #00A0F1",
+"X@    c #14A4F1",
+"Y@    c #EDF6FD",
+"Z@    c #67A5F1",
+"`@    c #BBD3F7",
+" #    c #1D8BEE",
+".#    c #228CEE",
+"+#    c #18A2F1",
+"@#    c #009BF0",
+"##    c #71B9F4",
+"$#    c #CADCF9",
+"%#    c #B0CDF7",
+"&#    c #208BEE",
+"*#    c #BDD5F8",
+"=#    c #A9D0F7",
+"-#    c #E0EBFB",
+";#    c #EBF3FD",
+">#    c #218BEE",
+",#    c #2591EF",
+"'#    c #20A2F1",
+")#    c #D3E6FB",
+"!#    c #83B2F3",
+"~#    c #D0E1FA",
+"{#    c #7BAFF2",
+"]#    c #08A1F1",
+"^#    c #009FF1",
+"/#    c #26A6F1",
+"(#    c #F0F7FE",
+"_#    c #D4E3FA",
+":#    c #95BCF4",
+"<#    c #B3CEF7",
+"[#    c #19A2F1",
+"}#    c #78BBF4",
+"|#    c #65A4F1",
+"1#    c #B4CFF7",
+"2#    c #238BEE",
+"3#    c #23A3F1",
+"4#    c #AED3F8",
+"5#    c #91BAF4",
+"6#    c #BED5F8",
+"7#    c #C1D7F8",
+"8#    c #248CEE",
+"9#    c #1FA2F1",
+"0#    c #009AF0",
+"a#    c #D6E9FB",
+"b#    c #2F93EF",
+"c#    c #F1F7FD",
+"d#    c #ECF3FD",
+"e#    c #76ACF2",
+"f#    c #0AA1F1",
+"g#    c #33A8F2",
+"h#    c #99BFF4",
+"i#    c #0D8EEE",
+"j#    c #DDE9FB",
+"k#    c #E7F0FC",
+"l#    c #68A6F1",
+"m#    c #1BA2F1",
+"n#    c #7EBDF4",
+"o#    c #599FF0",
+"p#    c #ECF4FD",
+"q#    c #2B92EF",
+"r#    c #A5C5F5",
+"s#    c #B3D5F8",
+"t#    c #D6E5FA",
+"u#    c #64A4F1",
+"v#    c #62A3F1",
+"w#    c #D2E2FA",
+"x#    c #3093EF",
+"y#    c #1DA2F1",
+"z#    c #DAEBFB",
+"A#    c #9EC1F5",
+"B#    c #80B1F3",
+"C#    c #0CA2F1",
+"D#    c #3EAAF2",
+"E#    c #F4FAFE",
+"F#    c #BCD4F8",
+"G#    c #5BA0F0",
+"H#    c #178BEE",
+"I#    c #1CA2F1",
+"J#    c #85C0F5",
+"K#    c #E1ECFC",
+"L#    c #1F8BEE",
+"M#    c #FBFCFE",
+"N#    c #86B4F3",
+"O#    c #1EA3F1",
+"P#    c #1FA3F1",
+"Q#    c #10A2F1",
+"R#    c #B8D8F8",
+"S#    c #B7D0F7",
+"T#    c #5DA1F0",
+"U#    c #65A3F1",
+"V#    c #DFEAFB",
+"W#    c #BAD0F7",
+"X#    c #0098F0",
+"Y#    c #009EF1",
+"Z#    c #1AA2F1",
+"`#    c #DDECFC",
+" $    c #87B5F3",
+".$    c #A3C5F5",
+"+$    c #B9D2F7",
+"@$    c #82B2F3",
+"#$    c #11A3F1",
+"$$    c #90C6F6",
+"%$    c #93C7F6",
+"&$    c #4DADF2",
+"*$    c #009EF0",
+"=$    c #1EA2F1",
+"-$    c #11A2F1",
+";$    c #0EA2F1",
+">$    c #48ACF2",
+",$    c #F6FBFE",
+"'$    c #F3F8FE",
+")$    c #3D96EF",
+"!$    c #84B3F3",
+"~$    c #F2F7FE",
+"{$    c #A7C7F5",
+"]$    c #1CA5F1",
+"^$    c #DFEEFC",
+"/$    c #D5E8FB",
+"($    c #9FCCF6",
+"_$    c #4FAEF3",
+":$    c #009DF0",
+"<$    c #12A2F1",
+"[$    c #1DA3F1",
+"}$    c #8BC2F5",
+"|$    c #D5E4FA",
+"1$    c #3293EF",
+"2$    c #3795EF",
+"3$    c #EEF4FD",
+"4$    c #89B5F3",
+"5$    c #2490EF",
+"6$    c #F8FCFF",
+"7$    c #D8E9FB",
+"8$    c #A2CDF7",
+"9$    c #54AFF3",
+"0$    c #13A2F1",
+"a$    c #BCDAF9",
+"b$    c #A8C8F6",
+"c$    c #A8C7F6",
+"d$    c #198FEE",
+"e$    c #B0D3F7",
+"f$    c #DAEAFB",
+"g$    c #A5CFF7",
+"h$    c #59B1F3",
+"i$    c #14A2F1",
+"j$    c #01A1F1",
+"k$    c #17A2F1",
+"l$    c #009DF1",
+"m$    c #E1EEFC",
+"n$    c #6BA9F1",
+"o$    c #1D8DEE",
+"p$    c #B6D0F7",
+"q$    c #6CA8F1",
+"r$    c #E8F1FC",
+"s$    c #7DAFF2",
+"t$    c #70B8F4",
+"u$    c #DCECFC",
+"v$    c #A8D0F7",
+"w$    c #5EB2F3",
+"x$    c #15A2F1",
+"y$    c #50AEF2",
+"z$    c #E7F3FD",
+"A$    c #C5DAF9",
+"B$    c #E6EFFC",
+"C$    c #03A1F1",
+"D$    c #0EA1F1",
+"E$    c #E6F2FD",
+"F$    c #DEEDFC",
+"G$    c #ABD2F7",
+"H$    c #62B3F3",
+"I$    c #02A1F1",
+"J$    c #90C5F5",
+"K$    c #C2DEF9",
+"L$    c #258BEE",
+"M$    c #519CF0",
+"N$    c #1E8DEE",
+"O$    c #E3EDFC",
+"P$    c #088AEE",
+"Q$    c #BAD9F9",
+"R$    c #E0EEFC",
+"S$    c #66B5F3",
+"T$    c #14A1F1",
+"U$    c #C1DDF9",
+"V$    c #8FC5F6",
+"W$    c #248BEE",
+"X$    c #0F8AEE",
+"Y$    c #79BBF4",
+"Z$    c #E1EFFC",
+"`$    c #B1D5F8",
+" %    c #6AB6F4",
+".%    c #11A1F1",
+"+%    c #13A1F1",
+"@%    c #E4F0FC",
+"#%    c #F5FBFE",
+"$%    c #46ACF2",
+"%%    c #168AEE",
+"&%    c #C4D9F8",
+"*%    c #B5CFF7",
+"=%    c #04A0F1",
+"-%    c #00A2F1",
+";%    c #EAF4FD",
+">%    c #E3F0FC",
+",%    c #B4D6F8",
+"'%    c #6FB8F4",
+")%    c #0DA1F1",
+"!%    c #04A1F1",
+"~%    c #58B0F3",
+"{%    c #D8EAFB",
+"]%    c #1C92EF",
+"^%    c #0288EE",
+"/%    c #7EB0F2",
+"(%    c #EFF6FD",
+"_%    c #D9E6FA",
+":%    c #C0DCF9",
+"<%    c #E5F1FC",
+"[%    c #B7D8F8",
+"}%    c #73B9F4",
+"|%    c #09A1F1",
+"1%    c #24A3F1",
+"2%    c #20A3F1",
+"3%    c #96C8F6",
+"4%    c #ADD3F8",
+"5%    c #2794EF",
+"6%    c #2C92EF",
+"7%    c #A0C2F5",
+"8%    c #529CF0",
+"9%    c #81BFF5",
+"0%    c #E7F2FD",
+"a%    c #BAD9F8",
+"b%    c #77BAF4",
+"c%    c #06A1F1",
+"d%    c #C4DFF9",
+"e%    c #1F93EF",
+"f%    c #A5C6F5",
+"g%    c #A3C4F5",
+"h%    c #9ABFF4",
+"i%    c #E8F3FD",
+"j%    c #BCDBF9",
+"k%    c #7BBCF4",
+"l%    c #DCEBFB",
+"m%    c #0D91EF",
+"n%    c #218CEE",
+"o%    c #66A5F1",
+"p%    c #4197EF",
+"q%    c #C5DFF9",
+"r%    c #BFDCF9",
+"s%    c #33A5F1",
+"t%    c #CAE2FA",
+"u%    c #C6E0FA",
+"v%    c #0090EF",
+"w%    c #0188EE",
+"x%    c #2E93EF",
+"y%    c #3694EF",
+"z%    c #89C2F5",
+"A%    c #ECF5FD",
+"B%    c #82BFF5",
+"C%    c #13A4F1",
+"D%    c #0095EF",
+"E%    c #86C1F5",
+"F%    c #94C7F6",
+"G%    c #25A4F1",
+"H%    c #7FB0F2",
+"I%    c #90BAF4",
+"J%    c #2AA6F2",
+"K%    c #EDF5FD",
+"L%    c #C5DFFA",
+"M%    c #6DB7F4",
+"N%    c #0093EF",
+"O%    c #B7D9F8",
+"P%    c #4EAEF3",
+"Q%    c #308FEE",
+"R%    c #0078EC",
+"S%    c #1B90EF",
+"T%    c #ADC9F6",
+"U%    c #84B2F3",
+"V%    c #188FEE",
+"W%    c #CBE2FA",
+"X%    c #8FC5F5",
+"Y%    c #0094EF",
+"Z%    c #8EC4F5",
+"`%    c #D6E8FB",
+" &    c #DBECFC",
+".&    c #0191EF",
+"+&    c #84AFF2",
+"@&    c #5EA0F0",
+"#&    c #0072EC",
+"$&    c #3DAAF2",
+"%&    c #49ADF2",
+"&&    c #9CCAF6",
+"*&    c #D4E7FB",
+"=&    c #0096F0",
+"-&    c #27A4F1",
+";&    c #5DA0F0",
+">&    c #0BA1F1",
+",&    c #39A9F2",
+"'&    c #F3F9FE",
+")&    c #9AC9F6",
+"!&    c #30A5F1",
+"~&    c #9BCAF6",
+"{&    c #D3E7FB",
+"]&    c #80AFF2",
+"^&    c #92BAF4",
+"/&    c #67A4F1",
+"(&    c #D0E5FA",
+"_&    c #D2E6FB",
+":&    c #16A5F1",
+"<&    c #70A8F1",
+"[&    c #FCFDFE",
+"}&    c #97C8F6",
+"|&    c #3CA9F2",
+"1&    c #0CA1F1",
+"2&    c #44ABF2",
+"3&    c #99C9F6",
+"4&    c #F5FAFE",
+"5&    c #8AB6F3",
+"6&    c #78ADF2",
+"7&    c #61A2F1",
+"8&    c #91C5F6",
+"9&    c #43ABF2",
+"0&    c #98C8F6",
+"a&    c #D1E6FB",
+"b&    c #95C7F6",
+"c&    c #128EEE",
+"d&    c #80B0F2",
+"e&    c #B8D1F7",
+"f&    c #CBE3FA",
+"g&    c #41AAF2",
+"h&    c #D3E8FB",
+"i&    c #4E9AF0",
+"j&    c #88B5F3",
+"k&    c #C5D9F8",
+"l&    c #108EEE",
+"m&    c #9ECBF6",
+"n&    c #F1F8FE",
+"o&    c #2DA7F2",
+"p&    c #0DA2F1",
+"q&    c #3FAAF2",
+"r&    c #96C7F6",
+"s&    c #AFD4F8",
+"t&    c #3895EF",
+"u&    c #51AEF3",
+"v&    c #8AC2F5",
+"w&    c #CFE5FA",
+"x&    c #03A0F1",
+"y&    c #4598EF",
+"z&    c #D9EAFB",
+"A&    c #C6E0F9",
+"B&    c #94C6F6",
+"C&    c #CEE4FA",
+"D&    c #57B0F3",
+"E&    c #509CF0",
+"F&    c #64A3F1",
+"G&    c #EEF6FD",
+"H&    c #19A5F1",
+"I&    c #3AA9F2",
+"J&    c #93C6F6",
+"K&    c #95C8F6",
+"L&    c #25A3F1",
+"M&    c #5B9FF0",
+"N&    c #5BB1F3",
+"O&    c #38A9F2",
+"P&    c #92C6F6",
+"Q&    c #CDE3FA",
+"R&    c #ACC9F6",
+"S&    c #1B8FEE",
+"T&    c #DDEDFC",
+"U&    c #A9D1F7",
+"V&    c #2E91EF",
+"W&    c #ACD2F7",
+"X&    c #02A0F1",
+"Y&    c #65B4F3",
+"Z&    c #7ABCF4",
+"`&    c #4897EF",
+" *    c #BBDAF9",
+".*    c #B1D4F8",
+"+*    c #EFF5FD",
+"@*    c #2290EF",
+"#*    c #67B5F3",
+"$*    c #72B9F4",
+"%*    c #0F89EE",
+"&*    c #B5D7F8",
+"**    c #0F92EF",
+"=*    c #1CA3F1",
+"-*    c #4595EF",
+";*    c #FAFCFE",
+">*    c #69B6F3",
+",*    c #23A6F1",
+"'*    c #87C1F5",
+")*    c #BEDBF9",
+"!*    c #A0CCF6",
+"~*    c #08A2F1",
+"{*    c #98BCF4",
+"]*    c #D3E2FA",
+"^*    c #63B4F3",
+"/*    c #37A9F2",
+"(*    c #8FC4F5",
+"_*    c #CAE1FA",
+":*    c #F0F7FD",
+"<*    c #B9D9F9",
+"[*    c #26A3F1",
+"}*    c #07A2F1",
+"|*    c #4398EF",
+"1*    c #9ABEF4",
+"2*    c #CCE3FA",
+"3*    c #60B3F3",
+"4*    c #2193EF",
+"5*    c #3B95EF",
+"6*    c #CDDEF9",
+"7*    c #64B4F3",
+"8*    c #52AFF3",
+"9*    c #D4E8FB",
+"0*    c #F2F9FE",
+"a*    c #3BAAF2",
+"b*    c #0D92EF",
+"c*    c #3393EF",
+"d*    c #8EB8F3",
+"e*    c #6DA7F1",
+"f*    c #FBFDFE",
+"g*    c #DBEBFC",
+"h*    c #15A1F1",
+"i*    c #5DB2F3",
+"j*    c #A6CFF7",
+"k*    c #8AB5F3",
+"l*    c #C7DAF8",
+"m*    c #9FCCF7",
+"n*    c #12A1F1",
+"o*    c #1F8FEF",
+"p*    c #85B3F3",
+"q*    c #2F92EF",
+"r*    c #25A6F1",
+"s*    c #AAD1F7",
+"t*    c #71B8F4",
+"u*    c #CDE4FA",
+"v*    c #0FA1F1",
+"w*    c #9CC0F4",
+"x*    c #74BAF4",
+"y*    c #2AA4F1",
+"z*    c #74B9F4",
+"A*    c #B7D7F8",
+"B*    c #EFF7FE",
+"C*    c #4CADF2",
+"D*    c #7CAEF2",
+"E*    c #0FA2F1",
+"F*    c #8DC4F5",
+"G*    c #B2D5F8",
+"H*    c #86C0F5",
+"I*    c #C0DDF9",
+"J*    c #9CCBF6",
+"K*    c #17A1F1",
+"L*    c #E1ECFB",
+"M*    c #E9F3FD",
+"N*    c #DFEDFC",
+"O*    c #C8E1FA",
+"P*    c #ADD2F7",
+"Q*    c #5FB2F3",
+"R*    c #1EA5F1",
+"S*    c #35A8F2",
+"T*    c #83BFF5",
+"U*    c #EBF5FD",
+"V*    c #0AA4F1",
+"W*    c #6FB7F4",
+"X*    c #27A3F1",
+"Y*    c #23A4F1",
+"Z*    c #5CB1F3",
+"`*    c #9ECCF7",
+" =    c #B9D7F8",
+".=    c #C1DEF9",
+"+=    c #CBE4FA",
+"@=    c #D7E8FB",
+"#=    c #DFEBFB",
+"$=    c #E0ECFB",
+"%=    c #DAE9FB",
+"&=    c #C7E1FA",
+"*=    c #B8D6F8",
+"==    c #A0CDF7",
+"-=    c #54B0F3",
+";=    c #2DA6F1",
+">=    c #76BAF4",
+",=    c #7EBEF5",
+"'=    c #71A9F1",
+")=    c #3494EF",
+"!=    c #7AC0F5",
+"~=    c #A3CEF7",
+"{=    c #5DB1F3",
+"]=    c #0095F0",
+"^=    c #2EA7F2",
+"/=    c #9FC2F5",
+"(=    c #03A2F1",
+"_=    c #A5D0F7",
+":=    c #EEF7FE",
+"<=    c #BFDBF9",
+"[=    c #7CBCF4",
+"}=    c #3BA8F2",
+"|=    c #4FADF2",
+"1=    c #62B4F3",
+"2=    c #84BFF5",
+"3=    c #99CAF6",
+"4=    c #E2EFFC",
+"5=    c #2F91EF",
+"6=    c #CADEF9",
+"7=    c #2491EF",
+"8=    c #E4F1FD",
+"9=    c #E1EDFC",
+"0=    c #CAE3FA",
+"a=    c #CEE5FA",
+"b=    c #DCEAFB",
+"c=    c #E3F1FC",
+"d=    c #34A8F2",
+"e=    c #82B1F3",
+"f=    c #D0E0FA",
+"g=    c #84C0F5",
+"h=    c #80BFF5",
+"i=    c #0084EE",
+"j=    c #6FA8F1",
+"k=    c #BADAF9",
+"l=    c #048DEE",
+"m=    c #89B6F3",
+"n=    c #3995EF",
+"o=    c #8DB8F3",
+"p=    c #F7FCFE",
+"q=    c #4CAEF2",
+"r=    c #4DAEF2",
+"s=    c #D8E6FA",
+"t=    c #EFF7FD",
+"u=    c #8EC5F5",
+"v=    c #4799F0",
+"w=    c #1FA5F1",
+"x=    c #E4F1FC",
+"y=    c #08A0F1",
+"z=    c #BDD4F8",
+"A=    c #A6C6F5",
+"B=    c #3E96EF",
+"C=    c #75BAF4",
+"D=    c #5FB3F3",
+"E=    c #048BEE",
+"F=    c #35A9F2",
+"G=    c #198AEE",
+"H=    c #ABC9F6",
+"I=    c #56B0F3",
+"J=    c #2394EF",
+"K=    c #4A9AF0",
+"L=    c #05A4F1",
+"M=    c #A8D1F7",
+"N=    c #E7EFFC",
+"O=    c #85B4F3",
+"P=    c #128FEE",
+"Q=    c #70B9F4",
+"R=    c #6EB8F4",
+"S=    c #4297EF",
+"T=    c #7BBDF4",
+"U=    c #E9F4FD",
+"V=    c #D1E2FA",
+"W=    c #B0D4F8",
+"X=    c #10A1F1",
+"Y=    c #E5F1FD",
+"Z=    c #98C9F6",
+"`=    c #2390EF",
+" -    c #87B3F3",
+".-    c #9ACAF6",
+"+-    c #B5D6F8",
+"@-    c #7CAFF2",
+"#-    c #BCD5F8",
+"$-    c #74AEF2",
+"%-    c #6CB6F4",
+"&-    c #058BEE",
+"*-    c #4BADF2",
+"=-    c #3A95EF",
+"--    c #05A0F1",
+";-    c #65B5F3",
+">-    c #8EC5F6",
+",-    c #3CAAF2",
+"'-    c #16A1F1",
+")-    c #C8DCF9",
+"!-    c #BFDDF9",
+"~-    c #42ABF2",
+"{-    c #AFD3F8",
+"]-    c #5EB3F3",
+"^-    c #1BA3F1",
+"/-    c #8CC3F5",
+"(-    c #29A3F1",
+"_-    c #559DF0",
+":-    c #8BC0F5",
+"<-    c #23A6F2",
+"[-    c #6CB7F4",
+"}-    c #2FA4F1",
+"|-    c #8AC0F5",
+"1-    c #008EEF",
+"2-    c #AED2F7",
+"3-    c #A0CCF7",
+"4-    c #90C5F6",
+"5-    c #0092EF",
+"6-    c #C3DEF9",
+"7-    c #00A4F1",
+"8-    c #0094F0",
+"9-    c #DBEAFB",
+"0-    c #8CC2F5",
+"a-    c #38ABF2",
+"b-    c #B0D3F8",
+"c-    c #B2CCF6",
+"d-    c #30A4F1",
+"e-    c #9DCBF6",
+"f-    c #54AEF2",
+"g-    c #31A7F2",
+"h-    c #FAFEFF",
+"i-    c #3EA8F2",
+"j-    c #94C8F6",
+"k-    c #C9E2FA",
+"l-    c #E6F3FD",
+"m-    c #A2CEF7",
+"n-    c #3193EF",
+"o-    c #E2EEFC",
+"p-    c #01A3F1",
+"q-    c #2AA7F2",
+"r-    c #DBE7FB",
+"s-    c #BDDBF9",
+"t-    c #7DBEF5",
+"u-    c #53AFF3",
+"v-    c #C3DFFA",
+"w-    c #A1CDF7",
+"x-    c #18A1F1",
+"y-    c #B4D7F8",
+"z-    c #B7D6F8",
+"A-    c #E0EDFC",
+"B-    c #F2F7FD",
+"C-    c #9BCBF6",
+"D-    c #E8F4FD",
+"E-    c #58B1F3",
+"F-    c #28A4F1",
+"G-    c #50AEF3",
+"H-    c #4CACF2",
+"I-    c #32A8F2",
+"J-    c #F0F8FE",
+"K-    c #61B4F3",
+"L-    c #D2E7FB",
+"M-    c #3EA9F2",
+"N-    c #A7D0F7",
+"O-    c #A6D0F7",
+"P-    c #ACD2F8",
+"Q-    c #87C2F5",
+"R-    c #6BB7F4",
+"S-    c #C7E0FA",
+"T-    c #28A3F1",
+"U-    c #4F9BF0",
+"V-    c #40AAF2",
+"W-    c #36A9F2",
+"X-    c #5AB1F3",
+"Y-    c #ACD3F7",
+"Z-    c #83C0F5",
+"`-    c #549DF0",
+" ;    c #51AFF3",
+".;    c #21A2F1",
+"+;    c #A5CEF7",
+"@;    c #228BEE",
+"#;    c #B6D8F8",
+"$;    c #57B1F3",
+"%;    c #1292EF",
+"&;    c #30A8F2",
+"*;    c #18A4F1",
+"=;    c #B2D6F8",
+"-;    c #C9E1FA",
+";;    c #02A4F1",
+">;    c #69B6F4",
+",;    c #44ACF2",
+"';    c #ABD1F7",
+");    c #D7E9FB",
+"!;    c #61B3F3",
+"~;    c #8BC3F5",
+"{;    c #3FABF2",
+"];    c #1DA5F1",
+"^;    c #B3D6F8",
+"/;    c #78BCF4",
+"(;    c #66B4F3",
+"_;    c #4DAEF3",
+":;    c #C2DDF9",
+"<;    c #7FBEF5",
+"[;    c #F9FDFE",
+"};    c #5CB2F3",
+"|;    c #9ECCF6",
+"1;    c #6AB6F3",
+"2;    c #19A1F1",
+"3;    c #24A6F1",
+"4;    c #7DBEF4",
+"5;    c #A4CFF7",
+"6;    c #6EB7F4",
+"7;    c #68B6F4",
+"8;    c #DEEEFC",
+"9;    c #B0D5F8",
+"0;    c #62B6F3",
+"a;    c #ADD5F8",
+"b;    c #DAEBFC",
+"c;    c #03A4F1",
+"d;    c #3BABF2",
+"e;    c #47ACF2",
+"f;    c #4EAEF2",
+"g;    c #0BA4F1",
+"h;    c #B6D7F8",
+"i;    c #AED3F7",
+"j;    c #89C3F5",
+"k;    c #BBD7F8",
+"l;    c #BCD7F8",
+"m;    c #B7D5F8",
+"n;    c #B5D5F8",
+"o;    c #B6D5F8",
+"p;    c #B2D4F8",
+"q;    c #97CAF6",
+"r;    c #81BDF4",
+"s;    c #5DB3F3",
+"t;    c #3FA9F2",
+". + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ % & @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ = - ; > = @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ , ' ; ) ! ~ { ] @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ ^ / ( _ : < < [ { % @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ' > } | < < 1 < < 2 } 3 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ 4 5 6 7 8 < < 1 < 9 < 0 a b @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ c + 6 d e < 9 f < < g < h i j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ , k ; l m < < 1 < < < < g < n i j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ ^ o ( p q < g g < < < < < g < n i j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ' > } r < < 9 < < < < < < < g < s i j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ 4 ' 6 t u < < 1 < < < < < < < < g < s i j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ c + 6 v w < 9 f < < < < < < < < < g < x i j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ y k ; z A < < 1 < < < < < < < < < < < g < x i j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ ^ o ( B C < g g < < < < < < < < < < < < g < D ; = @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 5 E F G < < 9 < < < < < < < < < < < < < < g < D ; = @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ H ' 6 I J < < 1 < < < < < < < < < < < < < < < g < K ; % @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ c + 6 L w < 9 f < < < < < < < < < < < < < < < < g < M ; % @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ y k ; z N < < 1 < < < < < < < < < < < < < < < < < < O < P { Q @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ & R ( S C < g g < < < < < < < < < < < < < < < < < < < < < T { U @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ V W F X < < 9 < < < < < < < < < < < < < < < < < < < < < < < Y { U @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ k i Z ` < < 1 < < < < < < < < < < < < < < < < < < < < < < < f  .F ..@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ +.5 ( @.#.< 9 f < < < < < < < < < < < < < < < < < < < < < < < < f $.F ..@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ %.&.*.=.< < 9 < < < < < < < < < < < < < < < < < < < < < < < < < < -.;.F ^ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ >.,.; '.< < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < -.;.F ^ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ).!.F ~.< g g < < < < < < < < < < < < < < < < < < < < < < < < < < < < -.{.F ].@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ^.] F /.< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < (._.} :.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * <.{ A < 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < [.}.} :.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ |.a 1.< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 2.3.} 4.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ +.5.) 6.< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 2.7.} 4.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Q { 8.< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 2.9.> 0.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a.*.b.< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 2.9.> 0.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * c.a d.< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < e.f.> >.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ y $ / } g.< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < e.h.> >.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ i.j.5.k.< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < l.m.> >.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ n.o.y ) p.< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < q.r.> ).@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ s.> t.u.{ v.w.< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < q.x.E ).@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ y.*.z.A.*.i.B.< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < C.D.E E.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ a.F.G.H.a W I.< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < C.D.E E.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ * / { J.: E ; K.< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < L.M.E E.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ N.O.P.Q.R.S.T.U.< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < V.M.E E.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ j i W.< V.X.Y.Z.< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < V.t E N.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ a.*.`.< <  +Y._ < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < V..+++N.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ * 3 ++@+< < #+F.$+#.< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < V.I W N.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ ).E %+C.O < &+; > *+< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < V.=+W N.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ c a -+< 9 < C ;+( G < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < >+,+O.N.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * '+^.N.).].y.c c V 5 a.c.% @ 5.* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ a.*.)+< 9 < -.!+T.~+f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < >+{+W N.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * +.H N.>...j c |.a.5 a.]+= <.,.+ W > F ; i 6 *.( *.( i ^+/+@ @ @ (+%.E.).n.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ y _+:+J.< g 1 < <+*.l : < g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < >+{+W N.@ @ @ @ @ @ @ @ @ y [+%.E.}+% j c c.a.5 V b % 3 |+:+W > F i a 6 ( ( 6 i { ++i.1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+b g+W E > + a.>.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ 0.> h+Q.< < 1 < i+> a j+< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < k+l+W & % c c V 5 a.c.y.o m+5.:+E } { i a 6 ( *.6 i F :+z n+o+h.B p+q+r+s+t+0+u+v+@+w+x+>+q.-.< < < < < < y+z+A+:+{ *.; ) B+C+D+E+*.> 5 ).@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ |.6 F+< 1 < f < k+G+6 H+< O < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < >+I+5.5.; i a *.( *.a ; > 5.J+K+M.7.L+M+N+O+P+Q+R+S+T+U+p.V+V.e.< < < < < < < < < < < < < < < W+g < X+Y+Z+*.Y.F.) `+ @.@p.k+C.+@@@U.#@*.E 5 +.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ a.6 $@< 1 < < 1 < %@6 @ J.< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < &@*@=@-@;@6+>@8+,@'@)@!@I.B.6.~@C.2.< < < < < < < < < < < < < < < g g 1 1 1 1 1 1 g g g < g 9 < f {@]@a a { ^@/@C < < < < < < < < < e.)+.+( (@c @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . _@] @ : < g < < 1 < :@> a <@< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < W+< @+( [@}@< < < < < < < < < < < < < < O g g 1 1 1 1 1 g g g f < < < < < < < < < < < < < < 1 < < 8 |@i { { ~+1@[.< < O 1 1 g f < < g 9 < < e | i.i 5 H @ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2@{ ^@[.< < < < < < Q.3@i %+V.< f < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < < _ 4@< < g g g 1 1 1 1 1 g g g f < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < q.5@++F i x.6@< < < 9 g < < < < < < < < < < 9 < < 7@8@*.+ c @ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 9@> 0@< 1 < < < < 1 < a@i { d.< 1 < < < < < < < < < < < < < < < < < < < < < < < < f 9 < e W.W #.< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g g < b@c@i > 5.<@C.< < 1 < < < < < < < < < < < < < < f 9 < < d@z ; e@y @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # f@g@h@< 1 < < < < g < C i@; @.< g < < < < < < < < < < < < < < < < < < < < < < < 1 < < J M.j@k@f O < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < < l@W E ; |@U+< < 9 < < < < < < < < < < < < < < < < < < 1 g < C m@( &.].@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # n@o@p@q@< g < < < < < g < r@; ++s@< 1 < < < < < < < < < < < < < < < < < < < < < 9 < < t@F :+> M < g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < L.u@a + } v@-.< 9 f < < < < < < < < < < < < < < < < < < < < < 9 < < r F E 5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w@x@y@f < < < < < < < 1 < J > ; z@< g < < < < < < < < < < < < < < < < < < < g g < C A@( o /+; B@< O < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < C@D@{ E E@F@< < 1 < < < < < < < < < < < < < < < < < < < < < < < < 1 < < b+G@6 f+n.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 9@g@H@< 1 < < < < < < < < < I@F 5.J@< g < < < < < < < < < < < < < < < < < 1 < < m z ; k y Q { M < O < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < K@L@O.{ M@6.< 9 f < < < < < < < < < < < < < < < < < < < < < < < < < < f 9 < &@N@*.O@= @ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 9@P@Q@< 1 < < < < < < < 1 < R@{ ; S@< 1 < < < < < < < < < < < < < < < f 9 < e d 6 + c @ * % ; M < O < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f g < T@++U@a q+[.< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < < '@5.F /+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # V@W@X@Y@< g < < < < < < < < < -.Z@} @ k.< g < < < < < < < < < < < < < 1 < < 8 t 6 5 4 @ * @ % { M < O < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f g < `@;  #i 1.< < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g g < J@^@( .#).@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +#@###< < < < < < < < < < < 1 < $#; { v < g < < < < < < < < < < < < 9 < < | } > ' @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f O < %#a &#{ *#< O g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < 2.=.a :+c.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # f@g@=#< 1 < < < < < < < < < < < -.Z@> :+-#< 1 < < < < < < < < < g g < ;#k@( o ^ @ * @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f O < 1.6 >#> 6@< g f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < < u+,#i e@'+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # '#P@)#< 1 < < < < < < < < < < 1 < R@{ F !#< g < < < < < < < < 1 < < ~.v.; k , @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < < < < < < < < < f g < 1.6 >#++~#< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g 1 < R.{#( <...@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ]#^#/#(#< g < < < < < < < < < < < < < k@} F _#< 1 < < < < < < 9 < e :#6 + c @ * @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < X 6 >#W F@< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < < <#} > ' @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # [#@#}#< O < < < < < < < < < < < < 1 < J > E |#-.< < < < < 1 < < s@M.*.5 4 @ * @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < 1#6 2#++F@< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < < 8 .+6 ' s.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 3#g@4#< 1 < < < < < < < < < < < < < g < 5#{ i 6#< 9 < < 9 < < [ } > ' @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < 7#a 8#} ~#< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < w 5#*.5.y.@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 9#0#a#< 1 < < < < < < < < < < < < < g < q z :+b#c#< 1 g < d#e#=@/ ..@ * @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < < < < < < 9 < R@{ 8#{ 6@< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < < d@@ { k @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # f#^#g#}@< f < < < < < < < < < < < < < < 9 < | i { h#< < < T@i#; k , @ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < < < < < 9 < j#:+>#i c+< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g g < k#l#( ]+>.@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # m#0#n#< g < < < < < < < < < < < < < < < f < e.o#O.F J -.d 6 + |.@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < < < < 1 < p#q#U@6 X < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < -.r#i :+V @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 3#g@s#< 1 < < < < < < < < < < < < < < < < 1 < t#F O.h+u#T.a.%.@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < < < g < e.v#E i h#< O f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < < w#x#i ' @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # y#@#z#< 1 < < < < < < < < < < < < < < < < < 1 < A#6 5.> a.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < < < g < 5#i F {#< < g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f 1 < @@B#6 & * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C#^#D#E#< f < < < < < < < < < < < < < < < < < g < L.%+E a.@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < < 9 < F#6 + G#&@< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < < r } H#@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # I#0#J#< g < < < < < < < < < < < < < < < < < < < 1 < j#> 3 (+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < < 1 < K#W L#++b@< M#< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < < N#; = @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ]#O#P#Q## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 3#g@R#< 1 < < < < < < < < < < < < < < < < < < < < 9 < S#( f+@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < f < e.T#} |.+ U#V#< g g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < M#< W#T.5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # Q#W@P@X#Y#9#9@Q## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Z#x@`#< 1 < < < < < < < < < < < < < < < < < < < < < g <  $a a.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < < 9 < .$( /+5.>.F W +$< < 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g 1 g < < @$; % @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # Q#Y##$$$%$&$0#X#*$=$9@-$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ;$Y#>$,$< f < < < < < < < < < < < < < < < < < < < < < g < '$)$O.4.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < < 9 < w#; b @ * @ Q _+( !$~$< 9 f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g 1 g < < < '${$} <.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # f#W@]$^$< < e /$($_$@#g@:$y#f@<$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # [$P@}$< g < < < < < < < < < < < < < < < < < < < < < < < 9 < |$; j @ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < g < @@1$W 0.@ @ @ @ +.e@a 2$_#< < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g 1 g < < < 3$N 4$5$i E.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # 9@g@H@< W+g < < < 6$7$8$9$@#g@:$I#f@0$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 3#g@a$< 1 < < < < < < < < < < < < < < < < < < < < < < < < 9 < b$( k @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < < O < B#i V @ @ @ @ @ @ @ V W ; c$-.< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g 1 < < < < ;#)+!#d$*.i + b @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # 3#g@e$< 1 < f 1 1 < < < l.f$g$h$x@g@:$Z#f@i$j$# # # # # # # # # # # # # # # # # # # # # # # # # j$k$l$m$< g < < < < < < < < < < < < < < < < < < < < < < < < f < -.n$; o$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < < 9 < p$( e@@ * @ @ @ @ @ * @ 4.b ( q$r$< g g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g 1 < < < < 7@`.s$) *.; 5.a.y.n.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # +#@#t$< < < < < < f 1 1 < < < e.u$v$w$x@g@x@+#3#x$j$# # # # # # # # # # # # # # # # # # # # # # Q#*$y$L.< f < < < < < < < < < < < < < < < < < < < < < < < < < 1 < z$. :+s.@ @ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < < 1 < b@> & (+@ @ @ @ @ @ @ @ @ @ @ k { ) A$< < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g 1 < < < < B$/@e#@ *.; 5.a.= $ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # C$D$W@E$< g < < < < < < < 1 1 < < < 2.F$G$H$:$g@x@w@3#w@I$# # # # # # # # # # # # # # # # # # # P#P@J$< g < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < K$W L$@ * @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < g < e M$> ..@ @ @ @ @ @ @ @ @ @ @ * @ N$5.6 d e < 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 1 < < < f O$Y+~++ *.{ P$a.Q (+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # 3#g@Q$< 1 < < < < < < < < < < 1 1 < < < [.R$4#S$Y#g@x@T$3#k$C$# # # # # # # # # # # # # # # # 3#g@U$< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < V$W W$@ @ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < < g < v 6 ' @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ H ' 6 M$j#< < g < < < < < < < < < < < < < < < < < < < < < < < < < < f 1 1 < < < [.-#t@2 W *.F X$a.U '+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # Z#0#Y$< < < < < < < < < < < < < < < 1 1 < < < -.Z$`$ %^#g@@#.%3#+#C$# # # # # # # # # # # # I$+%^#@%< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < #%$%z %%@ @ @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < < 9 < &%*.' @ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ' > > *%< < 9 < < < < < < < < < < < < < < < < < < < < < < f 1 1 < < < e.j#8+~ > *.} 4.a.^ , @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # n@=%-%;%< g < < < < < < < < < < < < < < < g 1 < < < f >%,%'%^#g@@#)%3#[#!%# # # # # # # # # <$:$~%e.< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < {%x@]%^%* @ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < < 1 < k#i.5.H @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ ..3 ( /%(%< 1 f < < < < < < < < < < < < < < < < < f 1 1 < < < C._%r#X.} *.} <.a.].y @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # 3#g@:%< 1 < < < < < < < < < < < < < < < < < < g 1 < < < < <%[%}%W@g@@#|%1%Z#n@# # # # # # 2%X#3%< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < 4%g@5%+ * @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < f < -.M@{ o$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ (+e@i 6%~#< < 1 < < < < < < < < < < < < < f 1 g < < < k+i+7%8%{ *.> &.V 4.* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # m#0#9%< g < < < < < < < < < < < < < < < < < < < < < g 1 < < < < 0%a%b%# g@0#=%3#m#c%# # # f@X#d%< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < < ##0#e%+ @ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < < 1 < f%( k @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ c.:+i g%[.< 9 < < < < < < < < < g 1 g < < < &@w#h%,+; 6 E y.V 0.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # V@W@X@Y@< g < < < < < < < < < < < < < < < < < < < < < < < g 1 < < < < i%j%k%-%g@0#W@3#I#c%m#@#l%< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < ;%p@W@m%+ @ @ @ @ @ @ @ @ % { M < O < < < < < < < < < < 9 < K.i ]+@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ >.n%( o%B$< g g < < < < g 1 g < < < '$R@:#p%i 6 W b c.).@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 3#X#q%< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < g 1 < < < < ;%r%n#p@g@0#W@s%P@t%< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < u%X#1%v%w%@ @ @ @ @ @ @ % { M < O < < < < < < < < < g < @@x%:+>.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ /+F 5.7#< < W+1 1 g < < < @@$#z@y%a a :+]+|.N.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # [$P@z%< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g 1 O < < < A%U$B%C%P@D%E%< O 1 f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < F%X#G%v%+ @ @ @ @ @ @ % { M < O < < < < < < < < < < < H%i V @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * @ y.g+*.I%w < < < < 3$N 4$E+6 a :+V c 4 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |%^#J%(#< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g 1 g < < < K%L%M%N%O%< < < 1 1 f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < e P%:$+#. + @ @ @ @ @ % { M < O < < < < < < < < 9 < *%( e@@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ * >./+Q%R%S%T%/.c+U%V%6 i + V N$s.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # f@X#W%< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g 1 g < < f X%Y%Z%`%,$< < < 1 1 f < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 <  &x@+#C$.&+ @ @ @ @ % { M < O < < < < < < < 1 < j#> H#'+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ y :.a.o > *.{ c@+&@&a #&F + a.y.n.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # O#P@J$< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g W+< E#$&g@0#%&&&*&,$< < < 1 1 f < < < < < < < < < < < < < < < < < < < < < < < < < 9 < `$=&-&# .&+ @ @ @ % { L+< O < < < < < < g < e 7 > ..@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ , ^ a.& } *.> ;&<+J V.< < C 8@} |.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # >&^#,&'&< f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < )&0#!&*$X#0#>$~&{&,$< < < 1 1 f < < < < < < < < < < < < < < < < < < < < < < < < < }#P@2%# . + @ @ % ; ]&< 9 < < < < < < g < ^&6 ' @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ (+U a.X$F *.W /&<@b@Q.< < < g g < -.;.} ..@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 9@P@(&< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < (&P@9@;$2%'#Y#X#0#$%)&_&,$< < < 1 1 f < < < < < < < < < < < < < < < < < < < < 1 < A%:&^#;$# . + @ E.O.G+e.< < 9 1 < < W+< d@*.' @ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ % a.(+{ *.+ <&<#U+-.< < < 1 1 f < < [&< i+i ]+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2%X#}&< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < X+|&^#1&# # ;$2%2%Y#X#P@2&3&_&4&< < < 1 1 f < < < < < < < < < < < < < < < < < < 9 < t%P@y## # . + @ U F 5&O$[.< < < W+< k#@ 5.s.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ n.y.a.5.; *.i.6&'.B$< < < < 1 1 < < < < < < < < [.7&> 4.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ;$Y#$%,$< f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < 8&P@P## # # # # ;$2%2%Y#X#P@9&0&a&4&< < < 1 1 f < < < < < < < < < < < < < < < < g < b&P@y## # . + @ & { > |#<@b@Q.< 4&u#F y.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ s.N$V + i *.c&d&c+C < < < < 1 g < < < < < < < < < < 9 < e&( 5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # '#0#*&< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < f&X#f@# # # # # # # # ;$2%9@Y#X#P@g&}&(&4&< < < g 1 f < < < < < < < < < < < < < 1 < h&P@f@# # # . w%@ % <.} *.} 7&^&i&} = @ @ @ @ @ @ @ @ @ @ @ @ @ @ %.|.c.:+a 6 S.j&k&6.< < < O 1 g < < < < < < < < < < < < < g < 6.l&5.$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 9@X#m&< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < n&o&^#|%# # # # # # # # # # p&2%9@Y#X#P@q&r&(&E#< < < g 1 f < < < < < < < < < < 9 < s&X#2%# # # # . + @ * :.a.o > a W ..@ * @ @ @ @ @ @ @ @ @ @ E.c.]+W 6 a t&r@$#@@< < < g 1 g < < < < < < < < < < < < < < < < < g < ^&a c @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Q#:$u&L.< f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < v&P@[$# # # # # # # # # # # # # p&2%9@Y#X#P@$&b&w&X+< < < g 1 f < < < < < < 1 < Z$W@x&V@# # # # # . + @ @ @ @ 4.|.).@ @ @ @ @ @ @ @ @ @ 0.V j E 6 ; y&S@y+'$< < < g 1 g < < < < < < < < < < < < < < < < < < < < 1 < *+; b @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # y#@#z&< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < A&X#3## # # # # # # # # # # # # # # # p&P#9@^#X#P@|&B&C&'&< < < g 1 f < < g < 6$D&x@[## # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ * :.a.o > *.{ E&A#_#w < < < g 1 g < < < < < < < < < < < < < < < < < < < < < < < < < 1 F&} & @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # f@g@g$< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < G&H&W@V@# # # # # # # # # # # # # # # # # # C#P#9@^#X#P@I&J&C&'&< < < g 1 9 < K&g@L&# # # # # # # # # . + @ @ @ @ @ @ @ @ @ ^.a.H#} *.} M&r#_%L.< < < 1 1 f < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < '.*.5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0$:$N&Q.< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < B%0#I## # # # # # # # # # # # # # # # # # # # # C#P#f@^#X#P@O&P&Q&'&< < < K$X#1%# j$# # # # # # # # # . + @ @ @ @ @ @ @ 4 + *.++F&R&j#Q.< < < 1 1 f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < R.S&5.$ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Z#x@T&< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < U$g@3## # # # # # # # # # # # # # # # # # # # # # # # C#P#f@^#P@X#g#P&d%U&W@W@V@# # # # # # # # # # # # . + @ @ @ @ @ %.:+V&| @+1 < < < 1 1 f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < :#a c @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 3#g@W&< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < q@-%X&n@# # # # # # # # # # # # # # # # # # # # # # # # # # >&P#f@^#P@g@X#n@]## # # # # # # # # # # # # # . + @ @ @ y H#> a+< < < 1 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < _%{ j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # x$x@Y&-.< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < O < Z&0#Z## # # # # # # # # # # # # # # # # # # # # # # # # # # # # >&O#1%9@n@# # # # # # # # # # # # # # # # . + @ @ %.W `&C.< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < -.Z@} & @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$w@Y#Z$< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 <  *g@3## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ N.W {+k+< f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < U.*.5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 3#g@.*< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < 0%W@)%C$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + N.W {+>+< f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < +*@*+ [+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # x$x@#*-.< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < $*@#+## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . %*:+{+k+< f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < S@6 |.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$Z#x@F$< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < &*g@3## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # **> I k+< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < J F y.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 9@g@8$< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < >%^#T$I$# # # # # # # # # # # # # # # # # # # # # # # # # # # |%=*1%2%C$# # # # # # # # # # # # # # # # # # # # ;$z -*;*< 9 f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f |@} ].@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # p&^#$&E#< f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f >*x@w@# # # # # # # # # # # # # # # # # # # # # # # # >&O#3#^#P@g@X#D$n@# # # # # # # # # # # # # # # # # # # j$Z#@ ~.< < < 1 1 f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < Q+*.5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1%g@K$< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < s&g@3## # # # # # # # # # # # # # # # # # # # # ;$2%9@^#P@X#,*'*)*!*Y#1&!%# # # # # # # # # # # # # # # # # # # ~*W@. {*]*&@< < < g 1 g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < @@S.+ n.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # x$x@^*-.< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < ^$l$+#j$# # # # # # # # # # # # # # # # # -$9@'#Y#X#P@/*(*_*:*< < < <*g@[*# j$# # # # # # # # # # # # # # # # # # }*c%E 6 |*S@y+V+< < < g 1 g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < 1*6 |.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # f@X#2*< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < [.3*x@i$# # # # # # # # # # # # # j$0$f@y#:$X#0#$%}&Q@'&< < < g 9 g < '*X#3## # # # # # # # # # # # # # # # # # # # n@2%4*> a a 5*^&6*~$< < < g 1 g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < s@F = @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w@x@7*-.< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < =#g@f@# # # # # # # # # # I$w@3#[#:$g@@#8*($9*,$< < < g 1 g < < g < 0*a*Y#0$# # # # # # # # # # # # # # # # # # # # # # b*&#c.:+a a c*d*$#@@< < < g 1 g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f e*F ^ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1%g@U$< f*< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < g*x@I## # # # # # # C$+#3#h*x@g@:$i*j*z&C.< < < 1 1 f < < < < < < 1 < /$@#w@C$# # # # # # # # # # I$k$2%;$# # # # # # # # . + H c V :+a 6 E+k*l*+*< < < g 1 g < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < {@*.5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # p&^#o&z$< g 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < L.u&:$<$# # # n@Z#3#)%@#g@Y##*4#F$2.< < < 1 1 f < < < < < < < < < < 1 < m*P@P## # # # # # # C$+#3#n*@#X#^#w@# j$# # # # # # . + @ @ ^.N$a.+ i 6 o*p*d@6.< < < g 1 g < < < < < < < < < < < < < < < < < < < < < < < < g < c#q*+ ^.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w@Y#r*2*< < g 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g 1 1 g < < < s*g@f@!%Z#3#o@0#g@W@t*,%>%-.< < < 1 1 f < < < < < < < < < < < < < 1 < u*X#3## # # # # # O#v*@#g@^#t$F%g&:$Z## # # # # # # # . + @ @ @ @ n.y.a.+ i *.i# +{@q < < < < 1 g < < < < < < < < < < < < < < < < < < < < < < 1 < w*6 c.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # k$^#P@z%@%< < < 1 1 g < < < < < < < < < < < < < < < < < < < g g 1 1 g < < < < < ,$^$r%x*^#y*V@0#g@p@k% *0%< < < < 1 g < < < < < < < < < < < < < < < < < g < 3%P@[$# # # # # n*0#W@z*A*<%f < B*C*:$+## # # # # # # # . + @ @ @ @ @ @ [+= a.5.; *.) D*`.7@< < < < 1 g < < < < < < < < < < < < < < < < < < < 1 < j#} &.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# E*2%P@^#F*/$q.< < < < g 1 1 1 1 1 g g g 1 1 1 1 1 1 g < < < < < < < Q.q@*&G*H*&$^#X#0#0#g@-%k%I*q@< < < < 1 g < < < < < < < < < < < < < < < < < < < 9 < W%P@I## # # # # +#x@J*;%< < < < W+< u$:$K*!%# # # # # # # # . + @ @ @ @ @ @ @ @ +.% a.|+{ *.@ _ *%L*1 < < < 9 g < < < < < < < < < < < < < < < < < < < ~+F ..@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # O#+%P@0#h$m*2*M*l.< < < < < < < < < < < < < < < < < C.Y@N*O*P*v&Q*R*x@X#X#X#X#x@S*T*r%M*< < < O 1 g < < < < < < < < < < < < < < < < < < < < < 1 < U*V*^#;$# # # # +#x@W*< < g 1 g < < 9 < &*g@X*# j$# # # # # # # . + @ @ @ @ @ @ @ @ @ @ (+Q 5 $ { ( ++F&<@K#< < < 1 g < < < < < < < < < < < < < < < 9 < 7#*.5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Y*i$N%N%0#C%Z*J#`* =.=+=@=#=$=$=%=a&&=r%*===(*b%-=;=^#0#X#g@g@X#P@Y#,&>==#{&n&< < < O 1 g < < < < < < < < < < < < < < < < < < < < < < < f < f ##0#P## # # # # 2%X#F%< W+< < < < < < < < ,=P@f@# # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ '+U a.3 } a + '=c+c#< < g 1 < < < < < < < < < < < < < g < ~$)=:+s.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1&^#!=~={=x@g@Y%N%Y%]=X#0#x@x@:$:$x@@#0#P@g@=&=&=&=&g@X#@#W@D#M%3% *z#n&< < < < g 1 g < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < U&g@X*# j$# # # # O#P@$$< g < < < < < < g < (#^=Y#<$# # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ , 4.> a ; i c*/=J@< < < 1 < < < < < < < < < < < < 1 < A#6 c.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # c%W@(=_=:=i%<=~&[=D&}=-%Y#x@@#0#0#@#@#x@Y#-%^=|=1=2=3=A*2*4=0*f < < < < < 1 1 f < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < *&0#9#j$j$# # # # # P#P@$$< g < < < < < < < 1 < a&0#'## j$# # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ $ + 5=6=%@7=i F ; 5.j&*+< < < 1 < < < < < < < < < < 1 < V#> o * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # !%# =&C**&< < f q.(#8=9=%=w&f&0=a=_&b=9=c=Y@e 2.< < < < < < < g 1 1 f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < n&d=Y#i$# # # # # # # P#P@$$< g < < < < < < < < 1 < g$g@X*# # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ = ; e=< < +*/@T#{ { { } p f=< < O 1 < < < < < < < < < < < B { ..@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 3#:$g@g=;%< < < < < < < < < < < < < < < < < g g 1 1 g f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < h=P@f@# # # # # # # # P#P@$$< g < < < < < < < < f < -. %@#O## # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ a.*.)+< M#< < Q.R@@.i={ F { j=K.< < g g < < < < < < < 9 < d@*.5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# <$1%P@p@k=f < W+1 g 1 1 1 1 1 1 g g g f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < &*=&X*# j$# # # # # # # P#P@$$< g < < < < < < < < < 1 < i%-%W@C## # # # # # # # # # . + @ @ @ @ @ @ @ @ +.5.l=d#< g g 9 < < < J m=:+{ } { 6&J < < 9 f < < < < < f < '$n=:+H @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2%W@g@M%^$< < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < u$:$K*n@# # # # # # # # # P#P@$$< g < < < < < < < < < < 9 < q%X#L&# j$# # # # # # # # # . + @ @ @ @ @ @ @ % ; H%< g < < < < 1 O < < -#o=:+F } > d*7@< < 1 < < < < < 1 < =.*.c.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# |%[*@#l$j*p=< g g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < ,$q=:$+## # # # # # # # # # P#P@$$< g < < < < < < < < < < < g < F%g@L&# # # # # # # # # # # . + @ @ @ @ @ @ a.*.{@< 1 < < < < < < 1 g < < -#N#} > { ) G q.< 1 g < < < g < -#> <.* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# m#+#g@r=a&< < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < X%X#1%# # # # # # # # # # # P#P@V$< g < < < < < < < < < < < g < L.8*x@[## # # # # # # # # # # . + @ @ @ @ (+- ) C < g < < < < < < < < 1 g < < s= .i O.i #@|$< < 1 < < < < < e#{ U @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # I$L&:$P@V$t=< < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < I*g@[*# j$# # # # # # # # # # O#P@u=< g < < < < < < < < < < < < 1 < F$Y#T$n@# # # # # # # # # # # . + @ @ @ Q ; D*< g < < < < < < < < < < < 1 g < < N v=; E F h%k+< 9 < < 1 < k&*.a.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# i$f@X#w=r%< < 1 f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < x=W@y=|%# # # # # # # # # # # # O#P@V$< g < < < < < < < < < < < < < 1 < [%g@X*# j$# # # # # # # # # # . + @ @ 5 *.z=< 1 < < < < < < < < < < < < < 1 < < w A=:+E ; I b+< < g f < X+B=:+H @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # f@^#g@C=>%< < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < e.D=@#I## # # # # # # # # # # # # O#P@u=< g < < < < < < < < < < < < < < < < B%P@f@# # # # # # # # # # # # . + E=$ @ 7@< g < < < < < < < < < < < < < < < 9 < < #=Z@i O.> | < < 1 1 < g%*.V @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# C#[*0#^#G$l.< g g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < J*g@[*# # # # # # # # # # # # # # O#P@V$< g < < < < < < < < < < < < < < g < n&F=Y#0$# # # # # # # # # # # # . G=F H+< O < < < < < < < < < < < < < < < < < g 9 < -.H=++W a !#w < M#< K#++H#* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # =*+%g@I=9*< < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < t%X#3## j$# # # # # # # # # # # # # O#P@V$< g < < < < < < < < < < < < < < < 1 < *&0#9## j$# # # # # # # # # # # J=F.'.< 1 < < < < < < < < < < < < < < < < < < < 1 < < 8 K=F { M.k#< [&< `+{ Q @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C$[*:$0#b&n&< < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < q@L=^#E*# # # # # # # # # # # # # # # O#P@V$< g < < < < < < < < < < < < < < < < 1 < M=g@X*# j$# # # # # # # # # C$1&v%N=< g < < < < < < < < < < < < < < < < < < < < f 9 < 4&O=i E P=8 < < $@6 a.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# w@'#X#o&d%< < 1 f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < f Q=0#P## # # # # # # # # # # # # # # # O#P@V$< g < < < < < < < < < < < < < < < < f < f R=0#O## # # # # # # # # # +#@#z*< < < < < < < < < < < < < < < < < < < < < < < < < 9 < < 1.{ :+5.F@< '$S=W 4 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 3#^#g@T=E$< < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < U&g@X*# j$# # # # # # # # # # # # # # # O#P@V$< g < < < < < < < < < < < < < < < < < 1 < U=p@W@p&# # # # # # # # # 3#g@[%< 1 < < < < < < < < < < < < < < < < < < < < < < < < g < < 0+i=:+W V=< =.*.V @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# ;$L&0#W@W=2.< 1 g < < < < < < < < < < < < < < < < < < < < < < < < < 1 < {&0#9#j$j$# # # # # # # # # # # # # # # # O#P@V$< g < < < < < < < < < < < < < < < < < < 1 < &=X#1%# j$# # # # # # C$X=W@Y=< g < < < < < < < < < < < < < < < < < < < < < < < < < f 1 < y+:+:+:+O$q F <.* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # O#D$g@w${%< < 1 < < < < < < < < < < < < < < < < < < < < < < < g < n&g#Y#0$# # # # # # # # # # # # # # # # # # O#P@V$< g < < < < < < < < < < < < < < < < < < < g < Z=g@L&# # # # # # # k$@#t$< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < ~#W E `=K% -a = @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # n@[*x@@#.-'&< g g < < < < < < < < < < < < < < < < < < < < < < < h=P@f@# # # # # # # # # # # # # # # # # # # O#P@V$< g < < < < < < < < < < < < < < < < < < < g < l.D&x@Z## # # # # # 3#g@+-< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < T@} i @-#-i % @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# k$=$g@O&O*< < 1 f < < < < < < < < < < < < < < < < < < 9 < &*g@X*# j$# # # # # # # # # # # # # # # # # # O#P@V$< g < < < < < < < < < < < < < < < < < < < < 1 < R$Y#.%V@# # # # I$+%^#@%< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < <#i E $-y%:+, @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1%Y#X#9%i%< < 1 < < < < < < < < < < < < < < < < 1 < u$:$K*!%# # # # # # # # # # # # # # # # # # # # O#P@V$< g < < < < < < < < < < < < < < < < < < < < < 9 < k=g@X*# j$# # w@@#%-f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < m=i @ &-@ * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# Q#L&P@# &*-.< 1 f < < < < < < < < < < < < < g < ,$*-:$+## # # # # # # # # # # # # # # # # # # # # O#P@u=< g < < < < < < < < < < < < < < < < < < < < < < g < E%P@3## # # 3#g@G*< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < '$=-:+4 * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # P#--g@;- &< < 1 < < < < < < < < < < < < g < u=X#1%# # # # # # # # # # # # # # # # # # # # # # O#P@>-< g < < < < < < < < < < < < < < < < < < < < < < g < 0*,-Y#x$# j$'-Y#4=< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < )-6 V @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # V@[*x@x@m*4&< g g < < < < < < < < < 9 < !-g@[*# j$# # # # # # # # # # # # # # # # # # # # # O#P@u=< g < < < < < < < < < < < < < < < < < < < < < < < 1 < a#@#y#j$w@x@#*-.< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < O <  .F ..@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# [#I#g@~-2*< < 1 < < < < < < < 1 < >%W@|%|%# # # # # # # # # # # # # # # # # # # # # # # O#P@u=< g < < < < < < < < < < < < < < < < < < < < < < < < 1 < G$=&X*9@g@{-< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < y+a n%@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1%Y#X#'*q@< < 1 < < < < g < e.]-x@^-# # # # # # # # # # # # # # # # # # # # # # # # O#P@/-< g < < < < < < < < < < < < < < < < < < < < < < < < f < < $*0#(-:$R$< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < e._-E >.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# -$1%P@p@<*f < 1 1 g 1 g < ~&g@[*# # # # # # # # # # # # # # # # # # # # # # # # # O#P@:-< g < < < < < < < < < < < < < < < < < < < < < < < < < 1 < q@<-0#7*(.< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < c$*.V @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2%W@g@[-N*< < < < < U$@#}-y#=$y#I#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#y#I#y#m#P#P@|-< g < < < < < < < < < < < < < < < < < < < < < < < < < < W+< d%1-2-< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < 6=a c.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# |%[*@#l$3-F$z$F$4-5-0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#+#P@|-< g < < < < < < < < < < < < < < < < < < < < < < < < < < f < e W@6-< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < 0+6 a.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# Z#n*X#x@7-8-Q*u%`%`%`%`%%=9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-b=/$*-=&0-< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < -.a-b-< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < c-( a.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # !%[$d-X#e-< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f-=&X%< g < < < < < < < < < < < < < < < < < < < < < < < < < < f < e g-9$h-< f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < v a c @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # O#@#[-f < W+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 < :*i-g@j-< g < < < < < < < < < < < < < < < < < < < < < < < < < < W+< k-@#P@~=< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f j=F ^ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C#W@-%i%< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < g < l-7-g@m-< 1 < < < < < < < < < < < < < < < < < < < < < < < < < 9 < x=g-^#L&P@(&< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < ~$n-:+^.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# L&X#u%< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < g < o-^#g@*=< 1 < < < < < < < < < < < < < < < < < < < < < < < f g < 9*p-Y#w@E*^#q-B*< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < r-F = @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # L&g@K&< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < `%x@P@r%< 1 < < < < < < < < < < < < < < < < < < < < < < g < < s-@#^#Z## # 9@P@t-< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < p$*.a.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # [#x@u-L.< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < v-0#@#a=< 1 < < < < < < < < < < < < < < < < < < < < < 1 < < w-g@x-i$# # j$# X*g@y-< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < @$; = @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # n@h**$F$< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < z-X#Y#A-< 1 < < < < < < < < < < < < < < < < < < < < 1 < p=h==&L&]## # # # # !%K*:$T&< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < B-n-+ ^.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# X*g@[%< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < C-g@C%D-< g < < < < < < < < < < < < < < < < < < < 9 < ;%E-X#F-# # # # # # # # +#:$G-p=< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < f=a n%@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # f@P@9%< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < H*g@H-e < f < < < < < < < < < < < < < < < < < f g < {%]$@#L&# j$# # # # # # # # L&X#%$< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < h%6 |.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0$Y#I-J-< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 2.K-g@[--.< < < < < < < < < < < < < < < < < < g < < K$:$Y#P## j$# # # # # # # # j$# L&X#q%< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < f < k+K=O.N.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# '#0#L-< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < }@M-g@Z%< g < < < < < < < < < < < < < < < < 1 < < N-X#+%w@# j$# # # # # # # # # # # C#W@-%i%< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < |$; b @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # X*g@O-< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < 4=W@X#P-< 1 < < < < < < < < < < < < < < < 1 < l.Q-=&3#f## # # # # # # # # # # # # # # O#@#R--.< f < < < < < < < < < < < < < < < < < < < < < < < < < 1 < A#6 c.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # O#@#R--.< f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < 2*@#0#S-< 1 < < < < < < < < < < < < < < 9 < Y@K-X#T-# # # # # # # # # # # # # # # # # # X*g@N-< 1 < < < < < < < < < < < < < < < < < < < < < < < < f < V.U-E E.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C#W@-%i%< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < W=X#^#R$< g < < < < < < < < < < < < f 1 < u$o&@#[*# # # # # # # # # # # # # # # # # # j$# 9#0#{&< 1 < < < < < < < < < < < < < < < < < < < < < < < 1 < *+{ j @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# L&X#q%< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < v&g@V-'&< f < < < < < < < < < < < g < < S-Y#*$2%# j$# # # # # # # # # # # # # # # # # # # 0$Y#W-n&< g < < < < < < < < < < < < < < < < < < < < < < 1 < =.*.c.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # L&g@F%< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < l.X-g@x*< < < < < < < < < < < < < 1 < < Y-X#>&+## j$# # # # # # # # # # # # # # # # # # # # # f@P@Z-< O < < < < < < < < < < < < < < < < < < < < < f < C.`-E ).@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +#:$ ;p=< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < w.p@g@8$< 1 < < < < < < < < < < 1 < 2.F*=&.;p&# # # # # # # # # # # # # # # # # # # # # # # j$# X*g@<*< 9 < < < < < < < < < < < < < < < < < < < < 1 < K@{ y.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # n@'-:$F$< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < Q&@#0#O*< 1 < < < < < < < < < 9 < B* %g@X*j$# # # # # # # # # # # # # # # # # # # # # # # # # # c%n*Y#R$< 1 < < < < < < < < < < < < < < < < < < < 1 < +;W @;@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# X*g@#;< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < H@g@-%0%< g < < < < < < < < 1 < R$I&0#X*# # # # # # # # # # # # # # # # # # # # # # # # # # # # # Z#x@$;l.< g < < < < < < < < < < < < < < < < < < < e.E-:$%;+ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # f@P@h=< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f '%g@7*[.< < < < < < < < g g < f&^#:$f@# j$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # L&g@3&< g < < < < < < < < < < < < < < < < < 1 <  &@#I## . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # <$Y#&;J-< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < ;%*;g@e-< 1 < < < < < < 1 < < =;P@W@Z## j$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# 1%X#-;< 1 < < < < < < < < < < < < < < < < 1 < v$g@f@# # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# '#0#_&< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < u%0#@#u*< 1 < < < < < 1 < -.F%g@9#E*# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ;$^#;;q@< 1 < < < < < < < < < < < < < < < < 2.i*:$0$# # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # X*g@g$< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < J$g@S*(#< g < < < < 9 < 0*##g@X*C$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # P#0#$*< < f < < < < < < < < < < < < < 1 < T&x@Z## # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # [$@#>;-.< f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < '&V-g@z%< g < < < < 1 < >%,;P@-&# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# X*=&Y-< 1 < < < < < < < < < < < < < 1 < ';g@f@# # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # >&W@-%z$< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < Q&@#0#u%< 1 < < g g < w&# :$3## j$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$j$y#@#);< 1 < < < < < < < < < < < < < [.!;x@i$# # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# L&g@d%< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < ~;g@S*(#< g < 1 < < [%0#W@=*# j$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # x$*${;'&< g < < < < < < < < < < g < ^$:$[#j$# # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # L&X#%$< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < A%];X#F%< g < 1 < f ~&g@I#-$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 3#X#z%< g < < < < < < < < < < 1 < 4#g@3## # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +#:$_$e < g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < ^;X#:${%< 1 9 < E#/;g@[*n@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# [*g@s-< 9 < < < < < < < < < < -.(;x@x$# # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # n@'-:$T&< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < L.u-X#M%f < 9 < E$_;P@F-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ]#1&^#>%< 1 < < < < < < < g < Z$Y#K*j$# # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# X*g@&*< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 < :;0#0#u%< W+< {&p@x@1%# j$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # m#x@D=h-< f < < < < < < 1 < .*g@3## # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 9@P@<;< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f < [;I=P@};q.< < j%@#^#[$# j$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # [*g@|;< 1 < < < < < < < f 1;x@w@# # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # <$Y#o&(#< g < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 9 < R#P@0#6-< -.==g@2;0$# j$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# f@P@u*< 1 < < < < g < >%Y#T$I$# # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# '#0#a&< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < Y@3;0#;-< e 4;=&L&V@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Q#^#];Y@< 1 < < < 1 < ^;g@3## # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # X*g@5;< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < g < Q-0#@#x=(#P%P@T-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2%0#/;< < < < < < < 6;@#k$# # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # =*@#7;(.< f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < W+< j%0#X#`$8;p@x@L&# j$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# X*=&9;< 9 < g < <%^#.%I$# # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # >&^#-%0%< 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < W+< );Y#:$0;a;Y#*$O## j$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$C$Z#x@b;< Q.M#< [%g@1%# # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 9#P@U$< 9 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < W+< Z$c;^#V@d;x@W@w@# j$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # k$:$e;B*< < n&f;*$-$# # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ;$Y#2&e < f < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < f g 1 1 < < {%g;Y#[## ^#0$f## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # m#x@>$+-A*G-x@w@# # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # p&Y#g&L.< W+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 g g g < < < < < < k=:$^#Z## # n@j$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# k$Y#g@g@*$w@# j$# # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # y#0#h;< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 2.X+Y=Q@i;'%P@1&i$# j$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$# Q#3#3#-$# j$# # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C$I$:$j;k;k;k;k;k;k;k;k;k;k;k;k;k;k;l;m;n;n;n;n;n;n;n;n;n;n;n;n;o;p;P*5;q;(*r;s;t;W@P@g@x@2%c%# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # I$0$0#=&=&=&=&=&=&=&=&=&=&=&=&=&=&=&g@g@g@g@g@g@g@g@g@g@g@g@g@g@g@g@g@X#P@0#x@^#n*9@3#k$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j$=*1%1%1%1%1%1%1%1%1%1%1%1%1%1%1%3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#f@9@P#P#I#0$p&I$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + @ ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . + ",
+"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . "};
diff --git a/rt-ide/tizen.rt.product/plugin_customization.ini b/rt-ide/tizen.rt.product/plugin_customization.ini
new file mode 100644 (file)
index 0000000..ecdf68e
--- /dev/null
@@ -0,0 +1 @@
+org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = true\r
diff --git a/rt-ide/tizen.rt.product/pom.xml b/rt-ide/tizen.rt.product/pom.xml
new file mode 100644 (file)
index 0000000..4f1400a
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+  xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+      <groupId>org.tizen.rt</groupId>
+      <artifactId>tizen-rt-parent</artifactId>
+      <version>3.0.0-SNAPSHOT</version>
+      <relativePath>../tizen.rt.parent</relativePath>
+  </parent>
+
+  <artifactId>org.tizen.rt.ide</artifactId>
+  <version>3.0.0-SNAPSHOT</version>
+  <packaging>eclipse-repository</packaging>
+
+  <properties>
+    <product-id>org.tizen.rt.ide</product-id>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.eclipse.tycho</groupId>
+        <artifactId>tycho-packaging-plugin</artifactId>
+        <version>${tycho.version}</version>
+        <configuration>
+          <format>'${buildId}'</format>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.eclipse.tycho</groupId>
+        <artifactId>tycho-p2-director-plugin</artifactId>
+        <version>${tycho.version}</version>
+        <executions>
+          <execution>
+            <id>materialize-products</id>
+            <goals>
+              <goal>materialize-products</goal>
+            </goals>
+            <configuration>
+              <profile>SDKProfile</profile>
+              <products>
+                <product>
+                  <id>${product-id}</id>
+                  <rootFolder>rt-ide</rootFolder>
+                  <rootFolders>
+                    <macosx>rt-ide.app</macosx>
+                  </rootFolders>
+                </product>
+              </products>
+            </configuration>
+          </execution>
+       </executions>
+     </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/rt-ide/tizen.rt.product/tizen.p2.inf b/rt-ide/tizen.rt.product/tizen.p2.inf
new file mode 100644 (file)
index 0000000..c88cbc7
--- /dev/null
@@ -0,0 +1,56 @@
+instructions.configure=\
+addRepository(type:0,location:http${#58}//download.eclipse.org/eclipse/updates/4.5,name:The Eclipse Project Updates);\
+addRepository(type:1,location:http${#58}//download.eclipse.org/eclipse/updates/4.5,name:The Eclipse Project Updates);\
+addRepository(type:0,location:http${#58}//download.eclipse.org/releases/mars,name:Mars);\
+addRepository(type:1,location:http${#58}//download.eclipse.org/releases/mars,name:Mars);\
+  mkdir(path:${installFolder}/dropins);
+requires.1.namespace=org.eclipse.equinox.p2.iu
+requires.1.name=toolingorg.eclipse.sdk.configuration.macosx
+requires.1.filter=(osgi.os=macosx)
+requires.1.range=[1.0.0,1.0.0]
+requires.1.greedy=true
+
+requires.2.namespace=org.eclipse.equinox.p2.iu
+requires.2.name=toolingorg.eclipse.sdk.configuration
+requires.2.filter=(!(osgi.os=macosx))
+requires.2.range=[1.0.0,1.0.0]
+requires.2.greedy=true
+
+units.1.id=toolingorg.eclipse.sdk.configuration.macosx
+units.1.version=1.0.0
+units.1.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.1.provides.1.name=toolingorg.eclipse.sdk.configuration.macosx
+units.1.provides.1.version=1.0.0
+units.1.filter=(osgi.os=macosx)
+units.1.touchpoint.id=org.eclipse.equinox.p2.osgi
+units.1.touchpoint.version=1.0.0
+units.1.instructions.configure=setProgramProperty(propName:osgi.instance.area.default,propValue:@user.home/Documents/workspace);
+units.1.instructions.unconfigure=setProgramProperty(propName:osgi.instance.area.default,propValue:);
+
+units.2.id=toolingorg.eclipse.sdk.configuration
+units.2.version=1.0.0
+units.2.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.2.provides.1.name=toolingorg.eclipse.sdk.configuration
+units.2.provides.1.version=1.0.0
+units.2.filter=(!(osgi.os=macosx))
+units.2.touchpoint.id=org.eclipse.equinox.p2.osgi
+units.2.touchpoint.version=1.0.0
+units.2.instructions.configure=setProgramProperty(propName:osgi.instance.area.default,propValue:@user.home/workspace);
+units.2.instructions.unconfigure=setProgramProperty(propName:osgi.instance.area.default,propValue:);
+
+# Restrict range so we are not an automatic update for 3.x.
+update.id= org.eclipse.sdk.ide
+update.range = [4.0,$version$)
+update.severity = 0
+update.description = An update for 4.x generation Eclipse SDK.
+
+# Set the product property type
+properties.0.name = org.eclipse.equinox.p2.type.product
+properties.0.value = true
+
+properties.1.name = org.eclipse.equinox.p2.description
+properties.1.value = Mars.2 update release of the Eclipse SDK.
+
+properties.2.name = org.eclipse.equinox.p2.provider
+properties.2.value = Eclipse.org
+
diff --git a/rt-ide/tizen.rt.product/tizen.product b/rt-ide/tizen.rt.product/tizen.product
new file mode 100644 (file)
index 0000000..95a2655
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?pde version="3.5"?>\r
+\r
+<product name="Tizen RT IDE" uid="org.tizen.rt.ide" id="org.tizen.rt.product.plugin.product" application="org.eclipse.ui.ide.workbench" version="1.0.0.qualifier" useFeatures="true" includeLaunchers="true">\r
+\r
+   <configIni use="default">\r
+   </configIni>\r
+\r
+   <launcherArgs>\r
+      <programArgs>-nl
+en\r
+      </programArgs>\r
+      <programArgsLin>--launcher.GTK_version
+2\r
+      </programArgsLin>\r
+      <vmArgs>-Dfile.encoding=UTF-8
+-Dosgi.requiredJavaVersion=1.6
+-XX:+AggressiveOpts
+-XX:PermSize=128M
+-XX:MaxPermSize=256M
+-XX:MaxNewSize=128M
+-XX:NewSize=128M
+-Xms256m
+-Xmx512m
+-Dlog4j.configuratorClass=org.tizen.common.util.log.TizenLog4jConfigurator\r
+      </vmArgs>\r
+      <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts\r
+      </vmArgsMac>\r
+   </launcherArgs>\r
+\r
+   <windowImages/>\r
+\r
+   <splash\r
+      location="org.tizen.rt.product.plugin"\r
+      startupProgressRect="0,313,478,15"\r
+      startupMessageRect="31,247,441,20"\r
+      startupForegroundColor="FFFFFF" />\r
+   <launcher name="eclipse">\r
+      <linux icon="icons/tizen_studio_256.xpm"/>\r
+      <macosx icon="icons/tizen_studio.icns"/>\r
+      <solaris/>\r
+      <win useIco="true">\r
+         <ico path="icons/tizen_studio.ico"/>\r
+         <bmp/>\r
+      </win>\r
+   </launcher>\r
+\r
+   <intro introId="org.tizen.rt.platform.intro"/>\r
+\r
+   <vm>\r
+   </vm>\r
+\r
+   <license>\r
+        <url>https://developer.tizen.org</url>\r
+        <text>\r
+   Tizen Studio
+
+
+Tizen Studio contains software portions licensed under various open source licenses as well as proprietary components. All open source software portions (&quot;Open Source Software&quot;) are licensed under the open source licenses that accompany such Open Source Software.
+
+The licenses governing the Open Source Software are available at:
+https://developer.tizen.org/tizen-sdk-opensource-license
+
+Except for the Open Source Software and proprietary components contributed from companies other than Samsung, contained in Tizen Studio, all other software portions contained in Tizen Studio are governed by the terms and conditions of the Samsung Tizen Studio License Agreement, available at:
+https://developer.tizen.org/tizen-sdk-license
+
+The licenses of all proprietary components contributed from companies other than Samsung will be either displayed as part of their respective installers or accessed inside installation package archive of each component. You may access and download Tizen Studio Open Source Software at:
+http://developer.tizen.org/download/tizenopensdk.tar.gz
+
+BY CLICKING THE &quot;I AGREE&quot; BUTTON OR BY USING ANY PART OF TIZEN STUDIO, YOU AGREE (ON BEHALF OF YOURSELF AND/OR YOUR COMPANY) TO THE OPEN SOURCE SOFTWARE LICENSE TERMS, THE SAMSUNG TIZEN STUDIO LICENSE AGREEMENT AND THE LICENSES OF ALL PROPRIETARY COMPONENTS CONTRIBUTED FROM COMPANIES OTHER THAN SAMSUNG. If you do not agree with the Open Source Software license terms or the SAMSUNG TIZEN STUDIO LICENSE AGREEMENT or THE LICENSES OF ALL PROPRIETARY COMPONENTS CONTRIBUTED FROM COMPANIES OTHER THAN SAMSUNG, you may not download or use Tizen Studio.\r
+         </text>\r
+   </license>\r
+\r
+   <plugins>\r
+   </plugins>\r
+\r
+   <features>\r
+      <feature id="org.eclipse.e4.rcp"/>\r
+      <feature id="org.eclipse.platform"/>\r
+      <feature id="org.eclipse.help"/>\r
+      <feature id="org.eclipse.emf.ecore"/>\r
+      <feature id="org.eclipse.equinox.p2.core.feature"/>\r
+      <feature id="org.eclipse.emf.common"/>\r
+      <feature id="org.eclipse.equinox.p2.rcp.feature"/>\r
+      <feature id="org.eclipse.equinox.p2.user.ui"/>\r
+      <feature id="org.eclipse.rcp"/>\r
+      <feature id="org.eclipse.equinox.p2.extras.feature"/>\r
+      <feature id="org.tizen.rt.feature"/>\r
+   </features>\r
+\r
+   <configurations>\r
+      <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="0" />\r
+      <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />\r
+      <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="2" />\r
+      <plugin id="org.eclipse.equinox.event" autoStart="true" startLevel="2" />\r
+      <plugin id="org.eclipse.equinox.p2.reconciler.dropins" autoStart="true" startLevel="0" />\r
+      <plugin id="org.eclipse.equinox.simpleconfigurator" autoStart="true" startLevel="1" />\r
+      <property name="eclipse.buildId" value="3.0" />\r
+      <property name="osgi.instance.area.default" value="@user.home/workspace" />\r
+   </configurations>\r
+\r
+   <preferencesInfo>\r
+      <targetfile overwrite="false"/>\r
+   </preferencesInfo>\r
+\r
+   <cssInfo>\r
+   </cssInfo>\r
+\r
+</product>\r
diff --git a/rt-ide/tizen.rt.releng.prereqs/.project b/rt-ide/tizen.rt.releng.prereqs/.project
new file mode 100644 (file)
index 0000000..818d415
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>tizen.rt.prereqs</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+       </buildSpec>
+       <natures>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/tizen.rt.releng.prereqs/backup b/rt-ide/tizen.rt.releng.prereqs/backup
new file mode 100644 (file)
index 0000000..8b350bb
--- /dev/null
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?><target name="tizen-releng-prereqs" sequenceNumber="1015">
+<locations>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="false" type="InstallableUnit">
+<unit id="org.eclipse.wst.web_ui.feature.feature.group" version="3.7.0.v201505261810"/>
+<unit id="org.eclipse.wst.jsdt.feature.feature.group" version="1.6.200.v201505071819"/>
+<!--<unit id="org.eclipse.platform.feature.group" version="4.5.0.v20150603-2358"/>-->
+<unit id="org.eclipse.equinox.executable.feature.group" version="3.6.200.v20150602-1417"/>
+<unit id="org.eclipse.wst.xml_ui.feature.feature.group" version="3.7.0.v201505141512"/>
+<unit id="org.eclipse.cdt.feature.group" version="8.7.0.201506070905"/>
+<unit id="org.eclipse.pde.feature.group" version="3.11.0.v20150603-2000"/>
+<unit id="org.eclipse.jst.webpageeditor.feature.feature.group" version="2.7.0.v201504282058"/>
+<unit id="org.eclipse.jdt.feature.group" version="3.11.0.v20150603-2000"/>
+<!-- org.eclipse.platform.feature.group -->
+<unit id="org.eclipse.rcp.feature.group" version="4.5.0.v20150603-2331"/>
+<unit id="org.eclipse.e4.rcp.feature.group" version="1.4.0.v20150603-0857"/>
+<unit id="org.eclipse.help.feature.group" version="2.1.0.v20150603-2000"/>
+<unit id="com.jcraft.jsch" version="0.1.51.v201410302000"/>
+<unit id="org.eclipse.core.net.linux.x86_64" version="1.1.100.v20140124-2013"/>
+<unit id="org.eclipse.core.runtime.compatibility" version="3.2.300.v20150423-0821"/>
+<unit id="org.eclipse.core.runtime.compatibility.registry" version="3.6.0.v20150318-1505"/>
+<unit id="org.eclipse.platform" version="4.5.0.v20150603-2000"/>
+<unit id="org.eclipse.platform.doc.user" version="4.5.0.v20150603-2358"/>
+<unit id="org.eclipse.jsch.core" version="1.2.0.v20141202-1415"/>
+<unit id="org.eclipse.jsch.ui"/>
+<unit id="org.eclipse.ui.net"/>
+<unit id="org.eclipse.core.filesystem.linux.x86_64"/>
+<unit id="org.eclipse.core.filesystem.java7"/>
+<unit id="org.eclipse.jsch.ui"/>
+
+<unit id="org.eclipse.jsch.ui"/>
+<unit id="org.eclipse.jsch.ui"/>
+
+
+
+<!-- org.eclipse.platform.feature.group -->
+<repository location="file://Users/nide/mustafa/eclipse/tizen/repository"/>
+</location>
+</locations>
+</target>
+
+
+<!-- <?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="Tizen IDE" uid="org.tizen.sdk.ide" id="org.tizen.base.platform.product" application="org.eclipse.ui.ide.workbench" version="3.0.0.qualifier" useFeatures="true" includeLaunchers="false">
+
+   <configIni use="default">
+   </configIni>
+
+   <launcherArgs>
+      <programArgs>-nl
+en
+      </programArgs>
+      <vmArgs>-Dfile.encoding=UTF-8
+-Dosgi.requiredJavaVersion=1.6
+-XX:+AggressiveOpts
+-XX:PermSize=128M
+-XX:MaxPermSize=256M
+-XX:MaxNewSize=128M
+-XX:NewSize=128M
+-Xms256m
+-Xmx512m
+-Dlog4j.configuratorClass=org.tizen.common.util.log.TizenLog4jConfigurator
+      </vmArgs>
+      <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
+      </vmArgsMac>
+   </launcherArgs>
+
+   <windowImages/>
+
+   <splash
+      location="org.tizen.releng.product"
+      startupProgressRect="0,313,478,15"
+      startupMessageRect="31,247,441,20"
+      startupForegroundColor="FFFFFF" />
+   <launcher name="eclipse">
+      <linux icon="icons/launching/128_IDE_icon.xpm"/>
+      <macosx icon="icons/launching/IDE_icon.icns"/>
+      <solaris/>
+      <win useIco="true">
+         <ico path="icons/launching/IDE_icon.ico"/>
+         <bmp/>
+      </win>
+   </launcher>
+
+   <intro introId="org.tizen.base.platform.intro"/>
+
+   <vm>
+   </vm>
+
+   <license>
+        <url>https://developer.tizen.org</url>
+        <text>
+   Tizen SDK
+
+
+Tizen SDK contains software portions licensed under various open source licenses as well as proprietary components. All open source software portions (&quot;Open Source Software&quot;) are licensed under the open source licenses that accompany such Open Source Software.
+
+The licenses governing the Open Source Software are available at:
+https://developer.tizen.org/tizen-sdk-opensource-license
+
+Except for the Open Source Software and proprietary components contributed from companies other than Samsung, contained in Tizen SDK, all other software portions contained in Tizen SDK are governed by the terms and conditions of the Samsung Tizen SDK License Agreement, available at:
+https://developer.tizen.org/tizen-sdk-license
+
+The licenses of all proprietary components contributed from companies other than Samsung will be either displayed as part of their respective installers or accessed inside installation package archive of each component. You may access and download Tizen SDK Open Source Software at:
+http://developer.tizen.org/download/tizenopensdk.tar.gz
+
+BY CLICKING THE &quot;I AGREE&quot; BUTTON OR BY USING ANY PART OF TIZEN SDK, YOU AGREE (ON BEHALF OF YOURSELF AND/OR YOUR COMPANY) TO THE OPEN SOURCE SOFTWARE LICENSE TERMS, THE SAMSUNG TIZEN SDK LICENSE AGREEMENT AND THE LICENSES OF ALL PROPRIETARY COMPONENTS CONTRIBUTED FROM COMPANIES OTHER THAN SAMSUNG. If you do not agree with the Open Source Software license terms or the SAMSUNG TIZEN SDK LICENSE AGREEMENT or THE LICENSES OF ALL PROPRIETARY COMPONENTS CONTRIBUTED FROM COMPANIES OTHER THAN SAMSUNG, you may not download or use Tizen SDK.
+         </text>
+   </license>
+
+   <plugins>
+   </plugins>
+
+   <features>
+      <feature id="org.tizen.base.feature" version="3.0.0.qualifier"/>
+   </features>
+
+   <configurations>
+      <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="0" />
+      <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
+      <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="2" />
+      <plugin id="org.eclipse.equinox.p2.reconciler.dropins" autoStart="true" startLevel="4" />
+      <plugin id="org.eclipse.equinox.simpleconfigurator" autoStart="true" startLevel="1" />
+      <plugin id="org.eclipse.osgi" autoStart="true" startLevel="-1" />
+      <plugin id="org.eclipse.update.configurator" autoStart="true" startLevel="0" />
+      <property name="eclipse.buildId" value="unknown" />
+      <property name="osgi.instance.area.default" value="@user.home/workspace" />
+   </configurations>
+
+</product>
+-->
diff --git a/rt-ide/tizen.rt.releng.prereqs/pom.xml b/rt-ide/tizen.rt.releng.prereqs/pom.xml
new file mode 100644 (file)
index 0000000..bc3be1b
--- /dev/null
@@ -0,0 +1,16 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+      <groupId>org.tizen.rt</groupId>
+      <artifactId>tizen-rt-parent</artifactId>
+      <version>3.0.0-SNAPSHOT</version>
+      <relativePath>../tizen.rt.parent</relativePath>
+  </parent>
+
+       <groupId>org.tizen.rt</groupId>
+       <artifactId>tizen-rt-releng-prereqs</artifactId>
+       <version>3.0.0-SNAPSHOT</version>
+       <packaging>eclipse-target-definition</packaging>
+</project>
diff --git a/rt-ide/tizen.rt.releng.prereqs/tizen-releng-prereqs.tpd b/rt-ide/tizen.rt.releng.prereqs/tizen-releng-prereqs.tpd
new file mode 100644 (file)
index 0000000..d0d8aea
--- /dev/null
@@ -0,0 +1,9 @@
+target "Tycho Tutorial" with source requirements
+
+location "file://Users/nide/mustafa/eclipse/tizen/repository/" eclipse-mars {
+       org.eclipse.platform.feature.group
+       org.eclipse.rcp.feature.group
+       org.eclipse.jdt.feature.group
+       org.eclipse.equinox.p2.discovery.feature.feature.group
+       org.eclipse.equinox.executable.feature.group
+}
diff --git a/rt-ide/tizen.rt.releng.prereqs/tizen-rt-releng-prereqs.target b/rt-ide/tizen.rt.releng.prereqs/tizen-rt-releng-prereqs.target
new file mode 100644 (file)
index 0000000..48f5e68
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?><target name="tizen-rt-releng-prereqs" sequenceNumber="1017">
+<locations>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="false" type="InstallableUnit">
+<unit id="org.eclipse.wst.web_ui.feature.feature.group" version="3.7.1.v201602111638"/>
+<unit id="org.eclipse.e4.rcp.feature.group" version="1.4.1.v20160212-1350"/>
+<unit id="org.eclipse.wst.jsdt.feature.feature.group" version="1.6.201.v201512010225"/>
+<unit id="org.eclipse.platform.feature.group" version="4.5.2.v20160212-1500"/>
+<unit id="org.eclipse.equinox.executable.feature.group" version="3.6.200.v20150602-1417"/>
+<unit id="org.eclipse.wst.xml_ui.feature.feature.group" version="3.7.2.v201511240257"/>
+<unit id="org.eclipse.cdt.feature.group" version="8.8.1.201602051005"/>
+<unit id="org.eclipse.pde.feature.group" version="3.11.2.v20160212-1500"/>
+<unit id="org.eclipse.jst.webpageeditor.feature.feature.group" version="2.7.1.v201508270443"/>
+<unit id="org.eclipse.jdt.feature.group" version="3.11.2.v20160212-1500"/>
+<unit id="org.eclipse.jgit.feature.group" version="4.1.1.201511131810-r"/>
+<!-- repository url path will be updated from dibs -->
+<repository location="file:///C:/eclipse-pde/repository_mars2"/>
+</location>
+</locations>
+</target>
diff --git a/rt-ide/tizen.rt.releng.prereqs/tizen-rt-releng-prereqs2.target b/rt-ide/tizen.rt.releng.prereqs/tizen-rt-releng-prereqs2.target
new file mode 100644 (file)
index 0000000..da6ef3d
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?><target name="tizen-rt-releng-prereqs" sequenceNumber="1017">
+<locations>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="false" type="InstallableUnit">
+<unit id="org.eclipse.wst.web_ui.feature.feature.group" version="3.7.1.v201602111638"/>
+<unit id="org.eclipse.e4.rcp.feature.group" version="1.4.1.v20160212-1350"/>
+<unit id="org.eclipse.wst.jsdt.feature.feature.group" version="1.6.201.v201512010225"/>
+<unit id="org.eclipse.platform.feature.group" version="4.5.2.v20160212-1500"/>
+<unit id="org.eclipse.equinox.executable.feature.group" version="3.6.200.v20150602-1417"/>
+<unit id="org.eclipse.wst.xml_ui.feature.feature.group" version="3.7.2.v201511240257"/>
+<unit id="org.eclipse.cdt.feature.group" version="8.8.1.201602051005"/>
+<unit id="org.eclipse.pde.feature.group" version="3.11.2.v20160212-1500"/>
+<unit id="org.eclipse.jst.webpageeditor.feature.feature.group" version="2.7.1.v201508270443"/>
+<unit id="org.eclipse.jdt.feature.group" version="3.11.2.v20160212-1500"/>
+<unit id="org.eclipse.jgit.feature.group" version="4.1.1.201511131810-r"/>
+<!-- repository url path will be updated from dibs -->
+<repository location="file:///C:/eclipse-pde/repository_mars2"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="false" type="InstallableUnit">
+<unit id="gnu.io.rxtx.sdk.feature.group" version="2.1.7.4_v20071016-417C7DP1Bh_eEaQJBrHBHg"/>
+<repository location="http://archive.eclipse.org/tm/updates/rxtx"/>
+</location>
+</locations>
+</target>
diff --git a/rt-ide/tizen.rt.releng/.project b/rt-ide/tizen.rt.releng/.project
new file mode 100644 (file)
index 0000000..d18a0b7
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>tizen.rt.releng</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+       </buildSpec>
+       <natures>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/tizen.rt.releng/pom.xml b/rt-ide/tizen.rt.releng/pom.xml
new file mode 100644 (file)
index 0000000..3fba481
--- /dev/null
@@ -0,0 +1,28 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.tizen.rt</groupId>
+               <artifactId>tizen-rt-parent</artifactId>
+               <version>3.0.0-SNAPSHOT</version>
+               <relativePath>../tizen.rt.parent</relativePath>
+       </parent>
+
+       <groupId>org.tizen.rt</groupId>
+       <artifactId>tizen-rt-releng</artifactId>
+       <version>3.0.0-SNAPSHOT</version>
+       <packaging>pom</packaging>
+
+       <modules>
+                       <module>../tizen.rt.parent</module>
+                       <module>../tizen.rt.releng.prereqs</module>
+                       <module>../tizen.rt.product.plugin</module>
+                       <module>../org.tizen.common.ui.theme</module>
+                       <module>../tizen.rt.product.feature</module>
+                       <module>../tizen.rt.product</module>
+
+                       <!-- This is upsteam modules we change for Tizen -->
+                       <module>../tizen.rt.upstream.patches</module>
+       </modules>
+</project>
diff --git a/rt-ide/tizen.rt.releng/workspace/.metadata/.log b/rt-ide/tizen.rt.releng/workspace/.metadata/.log
new file mode 100644 (file)
index 0000000..de8f456
--- /dev/null
@@ -0,0 +1,81 @@
+!SESSION 2017-02-17 14:47:41.794 -----------------------------------------------\r
+eclipse.buildId=unknown\r
+java.version=1.8.0_101\r
+java.vendor=Oracle Corporation\r
+BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=ko_KR\r
+Framework arguments:  -eclipse.keyring C:\Users\casval\AppData\Local\Temp\tycho6129282294169370240secure_storage\r
+Command-line arguments:  -eclipse.keyring C:\Users\casval\AppData\Local\Temp\tycho6129282294169370240secure_storage\r
+\r
+!ENTRY org.eclipse.equinox.p2.publisher 4 0 2017-02-17 14:47:41.794\r
+!MESSAGE An error occured while parsing advice file: basePath=C:/Users/casval/rtsdk/rtosIDE/product/rt-ide/tizen.rt.product, adviceFilePath=tizen.p2.inf.\r
+!STACK 0\r
+java.lang.IllegalArgumentException: Range minimum "4.0.0" is not less then range maximum "1.0.0.qualifier" (inclusion is required at both ends if the versions are equal)\r
+       at org.eclipse.equinox.p2.metadata.VersionRange.validateRange(VersionRange.java:467)\r
+       at org.eclipse.equinox.p2.metadata.VersionRange.<init>(VersionRange.java:252)\r
+       at org.eclipse.equinox.p2.publisher.AdviceFileParser.parseUpdateDescriptor(AdviceFileParser.java:202)\r
+       at org.eclipse.equinox.p2.publisher.AdviceFileParser.parse(AdviceFileParser.java:106)\r
+       at org.eclipse.equinox.p2.publisher.AdviceFileAdvice.<init>(AdviceFileAdvice.java:78)\r
+       at org.eclipse.tycho.p2.impl.publisher.ProductDependenciesAction.addPublisherAdvice(ProductDependenciesAction.java:88)\r
+       at org.eclipse.tycho.p2.impl.publisher.AbstractDependenciesAction.perform(AbstractDependenciesAction.java:90)\r
+       at org.eclipse.equinox.p2.publisher.Publisher$ArtifactProcess.run(Publisher.java:207)\r
+       at org.eclipse.equinox.p2.publisher.Publisher.publish(Publisher.java:237)\r
+       at org.eclipse.tycho.p2.impl.publisher.AbstractMetadataGenerator.publish(AbstractMetadataGenerator.java:122)\r
+       at org.eclipse.tycho.p2.impl.publisher.AbstractMetadataGenerator.generateMetadata(AbstractMetadataGenerator.java:58)\r
+       at org.eclipse.tycho.p2.impl.publisher.DefaultDependencyMetadataGenerator.generateMetadata(DefaultDependencyMetadataGenerator.java:31)\r
+       at org.eclipse.tycho.p2.impl.publisher.DefaultDependencyMetadataGenerator.generateMetadata(DefaultDependencyMetadataGenerator.java:1)\r
+       at org.eclipse.tycho.p2.resolver.P2DependencyResolver.getDependencyMetadata(P2DependencyResolver.java:147)\r
+       at org.eclipse.tycho.p2.resolver.P2DependencyResolver.setupProjects(P2DependencyResolver.java:130)\r
+       at org.eclipse.tycho.core.resolver.DefaultTychoResolver.setupProject(DefaultTychoResolver.java:96)\r
+       at org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant.afterProjectsRead(TychoMavenLifecycleParticipant.java:90)\r
+       at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:266)\r
+       at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)\r
+       at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)\r
+       at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)\r
+       at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)\r
+       at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)\r
+       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r
+       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r
+       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r
+       at java.lang.reflect.Method.invoke(Method.java:498)\r
+       at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)\r
+       at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)\r
+       at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)\r
+       at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)\r
+\r
+!ENTRY org.eclipse.equinox.p2.publisher 4 0 2017-02-17 14:47:47.657\r
+!MESSAGE An error occured while parsing advice file: basePath=C:/Users/casval/rtsdk/rtosIDE/product/rt-ide/tizen.rt.product, adviceFilePath=tizen.p2.inf.\r
+!STACK 0\r
+java.lang.IllegalArgumentException: Range minimum "4.0.0" is not less then range maximum "1.0.0.qualifier" (inclusion is required at both ends if the versions are equal)\r
+       at org.eclipse.equinox.p2.metadata.VersionRange.validateRange(VersionRange.java:467)\r
+       at org.eclipse.equinox.p2.metadata.VersionRange.<init>(VersionRange.java:252)\r
+       at org.eclipse.equinox.p2.publisher.AdviceFileParser.parseUpdateDescriptor(AdviceFileParser.java:202)\r
+       at org.eclipse.equinox.p2.publisher.AdviceFileParser.parse(AdviceFileParser.java:106)\r
+       at org.eclipse.equinox.p2.publisher.AdviceFileAdvice.<init>(AdviceFileAdvice.java:78)\r
+       at org.eclipse.tycho.p2.impl.publisher.ProductDependenciesAction.addPublisherAdvice(ProductDependenciesAction.java:88)\r
+       at org.eclipse.tycho.p2.impl.publisher.AbstractDependenciesAction.perform(AbstractDependenciesAction.java:90)\r
+       at org.eclipse.equinox.p2.publisher.Publisher$ArtifactProcess.run(Publisher.java:207)\r
+       at org.eclipse.equinox.p2.publisher.Publisher.publish(Publisher.java:237)\r
+       at org.eclipse.tycho.p2.impl.publisher.AbstractMetadataGenerator.publish(AbstractMetadataGenerator.java:122)\r
+       at org.eclipse.tycho.p2.impl.publisher.AbstractMetadataGenerator.generateMetadata(AbstractMetadataGenerator.java:58)\r
+       at org.eclipse.tycho.p2.impl.publisher.DefaultDependencyMetadataGenerator.generateMetadata(DefaultDependencyMetadataGenerator.java:31)\r
+       at org.eclipse.tycho.p2.impl.publisher.DefaultDependencyMetadataGenerator.generateMetadata(DefaultDependencyMetadataGenerator.java:1)\r
+       at org.eclipse.tycho.p2.resolver.P2DependencyResolver.getDependencyMetadata(P2DependencyResolver.java:147)\r
+       at org.eclipse.tycho.p2.resolver.P2DependencyResolver.getThisReactorProject(P2DependencyResolver.java:234)\r
+       at org.eclipse.tycho.p2.resolver.P2DependencyResolver.doResolveDependencies(P2DependencyResolver.java:364)\r
+       at org.eclipse.tycho.p2.resolver.P2DependencyResolver.resolveDependencies(P2DependencyResolver.java:335)\r
+       at org.eclipse.tycho.core.resolver.DefaultTychoResolver.resolveProject(DefaultTychoResolver.java:117)\r
+       at org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant.afterProjectsRead(TychoMavenLifecycleParticipant.java:95)\r
+       at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:266)\r
+       at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)\r
+       at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)\r
+       at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)\r
+       at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)\r
+       at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)\r
+       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r
+       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r
+       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r
+       at java.lang.reflect.Method.invoke(Method.java:498)\r
+       at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)\r
+       at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)\r
+       at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)\r
+       at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)\r
diff --git a/rt-ide/tizen.rt.upstream.patches/.DS_Store b/rt-ide/tizen.rt.upstream.patches/.DS_Store
new file mode 100644 (file)
index 0000000..19532aa
Binary files /dev/null and b/rt-ide/tizen.rt.upstream.patches/.DS_Store differ
diff --git a/rt-ide/tizen.rt.upstream.patches/.project b/rt-ide/tizen.rt.upstream.patches/.project
new file mode 100644 (file)
index 0000000..eeffff2
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>tizen.rt.upstream.patches</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+       </buildSpec>
+       <natures>
+       </natures>
+</projectDescription>
diff --git a/rt-ide/tizen.rt.upstream.patches/pom.xml b/rt-ide/tizen.rt.upstream.patches/pom.xml
new file mode 100644 (file)
index 0000000..087bed9
--- /dev/null
@@ -0,0 +1,29 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.tizen.rt</groupId>
+               <artifactId>tizen-rt-parent</artifactId>
+               <version>3.0.0-SNAPSHOT</version>
+               <relativePath>../tizen.rt.parent</relativePath>
+       </parent>
+
+       <groupId>org.tizen</groupId>
+       <artifactId>tizen-patches</artifactId>
+       <version>3.0.0-SNAPSHOT</version>
+       <packaging>pom</packaging>
+
+       <modules>
+               <module>../org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.control</module>
+               <module>../org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.core</module>
+               <module>../org.eclipse.tm.terminal/plugins/org.eclipse.tm.terminal.view.ui</module>
+               <module>./eclipse.platform.text</module>
+               <module>./eclipse.platform.ui</module>
+               <module>./eclipse.platform.swt</module>
+               <module>./eclipse.platform.swt.binaries</module>
+               <module>./eclipse.platform.ua</module>
+               <module>./eclipse.platform.team</module>
+               <module>./egit</module>
+       </modules>
+</project>
diff --git a/rtosIDE/META-INF/MANIFEST.MF b/rtosIDE/META-INF/MANIFEST.MF
deleted file mode 100644 (file)
index c5af698..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: RtosBuild
-Bundle-SymbolicName: tizen.rt.product.plugin;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Activator: org.tizen.rt.ide.Activator
-Bundle-Vendor: rtosBuildVendor
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.core.resources,
- org.eclipse.ui.ide,
- org.eclipse.ui.console,
- org.eclipse.tm.terminal.control,
- org.eclipse.tm.terminal.view.ui,
- org.eclipse.cdt.core,
- org.eclipse.ui.navigator,
- org.eclipse.ui.navigator.resources,
- org.eclipse.jgit,
- org.eclipse.egit.core,
- org.eclipse.egit.ui,
- org.eclipse.ui.forms,
- org.eclipse.text,
- org.eclipse.core.expressions
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Bundle-ActivationPolicy: lazy
-Bundle-ClassPath: lib/slf4j-api-1.6.4.jar,
- lib/slf4j-log4j12-1.6.4.jar,
- lib/log4j-1.2.17.jar,
- .
diff --git a/rtosIDE/plugin.xml b/rtosIDE/plugin.xml
deleted file mode 100644 (file)
index e16da6f..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
-
-   <extension
-         point="org.eclipse.ui.commands">
-         
-      <category
-            name="Rtos Category"
-            id="rtosBuild.commands.category">
-      </category>
-      
-      <command
-            name="Rtos Build"
-            categoryId="rtosBuild.commands.category"
-            id="rtosBuild.commands.buildCommand">
-      </command>
-      
-      <command
-            name="Rtos Flash"
-            categoryId="rtosBuild.commands.category"
-            id="rtosBuild.commands.flashCommand">
-      </command>
-      
-   </extension>
-   
-   <extension
-         point="org.eclipse.ui.handlers">
-         
-      <handler
-            commandId="rtosBuild.commands.buildCommand"
-            class="org.tizen.rt.ide.handlers.BuildHandler">
-         <enabledWhen>
-            <reference
-                  definitionId="org.tizen.rt.product.hasNature">
-            </reference>
-         </enabledWhen>
-      </handler>
-      
-      <!-- modify class-->
-      <handler
-            commandId="rtosBuild.commands.flashCommand"
-            class="org.tizen.rt.ide.handlers.FlashHandler">
-         <enabledWhen>
-            <reference
-                  definitionId="org.tizen.rt.product.hasNature">
-            </reference>
-         </enabledWhen>
-      </handler>
-      
-   </extension>
-   
-   <extension
-         point="org.eclipse.ui.bindings">
-      <key
-            commandId="rtosBuild.commands.buildCommand"
-            contextId="org.eclipse.ui.contexts.window"
-            sequence="M1+6"
-            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
-      </key>
-      <key
-            commandId="rtosBuild.commands.flashCommand"
-            contextId="org.eclipse.ui.contexts.window"
-            sequence="M1+7"
-            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
-      </key>      
-   </extension>
-   
-   <extension
-         point="org.eclipse.ui.menus">
-         
-      <menuContribution
-            locationURI="menu:org.eclipse.ui.main.menu?after=additions">
-         <menu
-               label="Rtos Menu"
-               mnemonic="M"
-               id="rtosBuild.menus.sampleMenu">
-            <command
-                  commandId="rtosBuild.commands.buildCommand"
-                  mnemonic="S"
-                  id="rtosBuild.menus.buildCommand">
-            </command>
-                       <command
-                  commandId="rtosBuild.commands.flashCommand"
-                  mnemonic="S"
-                  id="rtosBuild.menus.flashCommand">
-            </command>            
-         </menu>
-      </menuContribution>
-      
-      <menuContribution
-            locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
-         <toolbar
-               id="rtosBuild.toolbars.rtosToolbar">
-            <command
-                  commandId="rtosBuild.commands.buildCommand"
-                  icon="icons/buildSample.gif"
-                  tooltip="build rtos project"
-                  id="rtosBuild.toolbars.buildCommand">
-            </command>
-            <command
-                  commandId="rtosBuild.commands.flashCommand"
-                  icon="icons/flashSample.gif"
-                  tooltip="flash rtos project"
-                  id="rtosBuild.toolbars.flsahCommand">
-            </command>            
-         </toolbar>
-      </menuContribution>
-      
-   </extension>
-   <extension
-         id="product"
-         point="org.eclipse.core.runtime.products">
-      <product
-            application="org.eclipse.ui.ide.workbench"
-            name="rtosEclipse">
-         <property
-               name="appName"
-               value="rtosEclipse">
-         </property>
-      </product>
-   </extension>
-   <extension
-         point="org.eclipse.ui.newWizards">
-      <category
-            id="org.tizen.rt.TizenRT"
-            name="Tizen RT">
-      </category>
-      <wizard
-            category="org.tizen.rt.TizenRT"
-            class="org.tizen.rt.ide.wizards.NewArtikProjectWizard"
-            finalPerspective="org.tizen.rt.ide.perspectives.TizenRT"
-            icon="icons/buildSample.gif"
-            id="org.tizen.rt.LocalProject"
-            name="TizenRT Project"
-            project="true">
-      </wizard>
-      <wizard
-            category="org.tizen.rt.TizenRT"
-            class="org.eclipse.egit.ui.internal.clone.RtGitImportWizard"
-            finalPerspective="org.tizen.rt.ide.perspectives.TizenRT"
-            icon="icons/buildSample.gif"
-            id="org.tizen.rt.GitProject"
-            name="TizenRT Project from Git"
-            project="true">
-      </wizard>
-      <primaryWizard
-            id="org.tizen.rt.LocalProject">
-      </primaryWizard>
-      <primaryWizard
-            id="org.tizen.rt.GitProject">
-      </primaryWizard>
-   </extension>
-   <extension
-         point="org.eclipse.ui.perspectives">
-      <perspective
-            class="org.tizen.rt.ide.perspectives.TizenRTPerspective"
-            icon="icons/releng_gears.gif"
-            id="org.tizen.rt.ide.perspectives.TizenRT"
-            name="TizenRT">
-      </perspective>
-   </extension>
-   <extension
-         point="org.eclipse.ui.navigator.viewer">
-      <viewerActionBinding
-            viewerId="org.tizen.rt.viewer.navigator">
-         <includes>
-            <actionExtension
-                  pattern="org.eclipse.ui.navigator.resources.*">
-            </actionExtension>
-         </includes>
-      </viewerActionBinding>
-      <viewerContentBinding
-            viewerId="org.tizen.rt.viewer.navigator">
-         <includes>
-            <contentExtension
-                  pattern="org.eclipse.ui.navigator.resourceContent">
-            </contentExtension>
-            <contentExtension
-                  pattern="org.eclipse.ui.navigator.resources.filters.*">
-            </contentExtension>
-            <contentExtension
-                  pattern="org.eclipse.ui.navigator.resources.linkHelper">
-            </contentExtension>
-            <contentExtension
-                  pattern="org.eclipse.ui.navigator.resources.workingSets">
-            </contentExtension>
-         </includes>
-      </viewerContentBinding>
-   </extension>
-   <extension
-         point="org.eclipse.ui.views">
-      <view
-            class="org.eclipse.ui.navigator.CommonNavigator"
-            icon="icons/sample.gif"
-            id="org.tizen.rt.viewer.navigator"
-            name="TizenRT Navigator">
-      </view>
-   </extension>
-   <extension
-         point="org.eclipse.ui.perspectiveExtensions">
-      <perspectiveExtension
-            targetID="org.eclipse.ui.resourcePerspective">
-         <view
-               id="org.tizen.rt.viewer.navigator"
-               ratio="0.5"
-               relationship="stack"
-               relative="org.eclipse.ui.navigator.ProjectExplorer">
-         </view>
-      </perspectiveExtension>
-   </extension>
-   <extension
-         point="org.eclipse.ui.navigator.navigatorContent">
-      <commonWizard
-            type="new"
-            wizardId="org.tizen.rt.LocalProject">
-         <enablement></enablement>
-      </commonWizard>
-      <commonWizard
-            type="new"
-            wizardId="org.tizen.rt.GitProject">
-         <enablement></enablement>
-      </commonWizard>
-   </extension>
-   <extension
-         id="RtProjectNature"
-         point="org.eclipse.core.resources.natures">
-      <runtime>
-         <run
-               class="org.tizen.rt.product.RtProjectNature">
-         </run>
-      </runtime>
-      <requires-nature
-            id="org.eclipse.cdt.core.cnature">
-      </requires-nature>
-   </extension>
-   <extension
-         point="org.eclipse.ui.ide.projectNatureImages">
-      <image
-            icon="icons/releng_gears.gif"
-            id="org.tizen.rt.product.RtProjectImage"
-            natureId="org.tizen.rt.product.RtProjectNature">
-      </image>
-   </extension>
-   <extension
-         point="org.eclipse.core.expressions.definitions">
-      <definition
-            id="org.tizen.rt.product.hasNature">
-         <with
-               variable="selection">
-            <and>
-               <count
-                     value="1">
-               </count>
-               <iterate
-                     ifEmpty="false"
-                     operator="and">
-                  <test
-                        property="org.eclipse.core.resources.projectNature"
-                        value="org.tizen.rt.product.RtProjectNature">
-                  </test>
-               </iterate>
-            </and>
-         </with>
-      </definition>
-   </extension>
-
-</plugin>
diff --git a/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/BUILD_INFO.txt b/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/BUILD_INFO.txt
new file mode 100644 (file)
index 0000000..aeb74a0
--- /dev/null
@@ -0,0 +1,21 @@
+Native Build Info:
+------------------
+
+platform:         x86_64-unknown-linux-gnu
+built by:         martin.oberhuber@windriver.com
+build date:       18-Apr-2007
+OS Name:          openSUSE 10.2 (X86-64)
+OS Version:       Linux osgiliath 2.6.18.8-0.1-default #1 SMP x86_64 GNU/Linux 
+Compiler version: gcc-4.1.2 20061115 (prerelease) (SUSE Linux)
+Compiler config:  configure --enable-threads=posix --enable-ssp --disable-libssp \
+                    --enable-shared --enable-__cxa_atexit --without-system-libunwind \
+                    --with-cpu=generic
+
+build script:
+-------------
+#!/bin/sh
+mkdir build-osgiliath
+cd build-osgiliath
+../configure --disable-lockfiles
+make
+cp x86_64-unknown-linux-gnu/.libs/*.so $OUTDIR
diff --git a/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/META-INF/MANIFEST.MF b/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..7100702
--- /dev/null
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.7.0
+Created-By: 1.5.0_12-b04 (Sun Microsystems Inc.)
+Bundle-Name: %fragmentName
+Bundle-Vendor: %providerName
+Bundle-ManifestVersion: 2
+Fragment-Host: gnu.io.rxtx;bundle-version="[2.1.7,2.2.0)"
+Bundle-SymbolicName: gnu.io.rxtx.linux.x86_64
+Bundle-Localization: fragment
+Eclipse-PlatformFilter: (& (osgi.os=linux) (osgi.arch=x86_64))
+Bundle-Version: 2.1.7.3_v20071015
+
diff --git a/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/META-INF/eclipse.inf b/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/META-INF/eclipse.inf
new file mode 100644 (file)
index 0000000..92ffed2
--- /dev/null
@@ -0,0 +1,2 @@
+#Processed using Jarprocessor
+pack200.conditioned = true
diff --git a/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/about.html b/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/about.html
new file mode 100644 (file)
index 0000000..0adc920
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+This is an unmodified binary release of RXTX-2.1-7r2 as downloaded
+from <a href="http://www.rxtx.org">http://www.rxtx.org</a>, with 
+the following exception:
+<ul>
+  <li>Linux native library was built without lockfiles (contrary to
+      the original distribution) in order to allow easier use. See 
+      the file <a href="BUILD_INFO.txt">BUILD_INFO.txt</a> for details.</li>
+</ul>
+
+<h3>License</h3>
+<pre>
+RXTX License v 2.1 - LGPL v 2.1 + Linking Over Controlled Interface.
+RXTX is a native interface to serial ports in java.
+
+Copyright 1997-2007 by Trent Jarvi <a href="mailto:tjarvi@qbang.org">tjarvi@qbang.org</a> and others who
+actually wrote it.  See individual source files for more information.
+
+A copy of the LGPL v 2.1 may be found at
+<a href="http://www.gnu.org/licenses/lgpl.txt">http://www.gnu.org/licenses/lgpl.txt</a> on March 4th 2007.  A copy is
+<a href="about_files/lgpl.txt">here</a> for your convenience.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+An executable that contains no derivative of any portion of RXTX, but
+is designed to work with RXTX by being dynamically linked with it,
+is considered a "work that uses the Library" subject to the terms and
+conditions of the GNU Lesser General Public License.
+
+The following has been added to the RXTX License to remove
+any confusion about linking to RXTX.   We want to allow in part what
+section 5, paragraph 2 of the LGPL does not permit in the special
+case of linking over a controlled interface.  The intent is to add a
+Java Specification Request or standards body defined interface in the 
+future as another exception but one is not currently available.
+
+<a href="http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface">http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface</a>
+
+As a special exception, the copyright holders of RXTX give you
+permission to link RXTX with independent modules that communicate with
+RXTX solely through the Sun Microsytems CommAPI interface version 2,
+regardless of the license terms of these independent modules, and to copy
+and distribute the resulting combined work under terms of your choice,
+provided that every copy of the combined work is accompanied by a complete
+copy of the source code of RXTX (the version of RXTX used to produce the
+combined work), being distributed under the terms of the GNU Lesser General
+Public License plus this exception.  An independent module is a
+module which is not derived from or based on RXTX.
+
+Note that people who make modified versions of RXTX are not obligated
+to grant this special exception for their modified versions; it is
+their choice whether to do so.  The GNU Lesser General Public License
+gives permission to release a modified version without this exception; this
+exception also makes it possible to release a modified version which
+carries forward this exception.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+All trademarks belong to their respective owners.
+</pre>
+</body>
+</html>
diff --git a/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/about_files/lgpl.txt b/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/about_files/lgpl.txt
new file mode 100644 (file)
index 0000000..5ab7695
--- /dev/null
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/fragment.properties b/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/fragment.properties
new file mode 100644 (file)
index 0000000..856ddad
--- /dev/null
@@ -0,0 +1,12 @@
+################################################################################
+# Copyright (c) 2007 Wind River Systems, Inc.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Martin Oberhuber - initial API and implementation 
+################################################################################
+fragmentName=RXTX for Linux x86_64
+providerName=RXTX.org
diff --git a/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/os/linux/x86_64/librxtxParallel.so b/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/os/linux/x86_64/librxtxParallel.so
new file mode 100644 (file)
index 0000000..b6f8135
Binary files /dev/null and b/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/os/linux/x86_64/librxtxParallel.so differ
diff --git a/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/os/linux/x86_64/librxtxSerial.so b/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/os/linux/x86_64/librxtxSerial.so
new file mode 100644 (file)
index 0000000..470dbfa
Binary files /dev/null and b/rxtx/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/os/linux/x86_64/librxtxSerial.so differ
diff --git a/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/META-INF/MANIFEST.MF b/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..37f02ea
--- /dev/null
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.7.0
+Created-By: 1.5.0_12-b04 (Sun Microsystems Inc.)
+Bundle-Name: %pluginName
+Bundle-ManifestVersion: 2
+Bundle-Vendor: %providerName
+Bundle-SymbolicName: gnu.io.rxtx.source
+Bundle-Localization: plugin
+Bundle-Version: 2.1.7.4_v20071016
+
diff --git a/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/META-INF/eclipse.inf b/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/META-INF/eclipse.inf
new file mode 100644 (file)
index 0000000..92ffed2
--- /dev/null
@@ -0,0 +1,2 @@
+#Processed using Jarprocessor
+pack200.conditioned = true
diff --git a/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/about.html b/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/about.html
new file mode 100644 (file)
index 0000000..726bf68
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+<p>June 5, 2007</p>    
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Source Code</h3>
+
+<p>This plug-in contains source code zip files ("Source Zips") that correspond to binary content
+in other plug-ins. These Source Zips may be distributed under different license agreements and/or notices.
+Details about these license agreements and notices are contained in "about.html" files ("Abouts") located
+in sub-directories in the src/ directory of this plug-in. Such Abouts govern your use of the Source Zips
+in that directory, not the EPL.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/plugin.properties b/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/plugin.properties
new file mode 100644 (file)
index 0000000..f5c58ae
--- /dev/null
@@ -0,0 +1,12 @@
+################################################################################
+# Copyright (c) 2007 Wind River Systems, Inc.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Martin Oberhuber - initial API and implementation 
+################################################################################
+pluginName=RXTX\r Source Bundle
+providerName=RXTX.org
\ No newline at end of file
diff --git a/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/plugin.xml b/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/plugin.xml
new file mode 100644 (file)
index 0000000..be8a747
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+       <extension point="org.eclipse.pde.core.source">
+               <location path="src"/>
+       </extension>
+</plugin>
\ No newline at end of file
diff --git a/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/src/gnu.io.rxtx_2.1.7.4_v20071016/about.html b/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/src/gnu.io.rxtx_2.1.7.4_v20071016/about.html
new file mode 100644 (file)
index 0000000..099ace0
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+This is an unmodified release of RXTX-2.1-7r2 as downloaded
+from <a href="http://www.rxtx.org">http://www.rxtx.org</a>, with 
+the following exceptions:
+<ul>
+  <li>RXTXCommDriver.java v1.16.2.57 was compiled from RXTX CVS and included 
+      in order to support disabling version print on startup (set System Property
+      <tt>-Dgnu.io.rxtx.NoVersionOutput=true</tt>). This is RXTX 
+      <a href="http://bugzilla.qbang.org/show_bug.cgi?id=71">bug 71</a>.</li>
+  <li>CommPortIdentifier.java: Include the Fix for RXTX
+      <a href="http://bugzilla.qbang.org/show_bug.cgi?id=83">bug 83</a>
+      due to which CommPortOwnership events are lost. The original 
+      fix from bugzilla is included in this version of the library.</li>
+</ul>
+
+<h3>License</h3>
+<pre>
+RXTX License v 2.1 - LGPL v 2.1 + Linking Over Controlled Interface.
+RXTX is a native interface to serial ports in java.
+
+Copyright 1997-2007 by Trent Jarvi <a href="mailto:tjarvi@qbang.org">tjarvi@qbang.org</a> and others who
+actually wrote it.  See individual source files for more information.
+
+A copy of the LGPL v 2.1 may be found at
+<a href="http://www.gnu.org/licenses/lgpl.txt">http://www.gnu.org/licenses/lgpl.txt</a> on March 4th 2007.  A copy is
+<a href="about_files/lgpl.txt">here</a> for your convenience.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+An executable that contains no derivative of any portion of RXTX, but
+is designed to work with RXTX by being dynamically linked with it,
+is considered a "work that uses the Library" subject to the terms and
+conditions of the GNU Lesser General Public License.
+
+The following has been added to the RXTX License to remove
+any confusion about linking to RXTX.   We want to allow in part what
+section 5, paragraph 2 of the LGPL does not permit in the special
+case of linking over a controlled interface.  The intent is to add a
+Java Specification Request or standards body defined interface in the 
+future as another exception but one is not currently available.
+
+<a href="http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface">http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface</a>
+
+As a special exception, the copyright holders of RXTX give you
+permission to link RXTX with independent modules that communicate with
+RXTX solely through the Sun Microsytems CommAPI interface version 2,
+regardless of the license terms of these independent modules, and to copy
+and distribute the resulting combined work under terms of your choice,
+provided that every copy of the combined work is accompanied by a complete
+copy of the source code of RXTX (the version of RXTX used to produce the
+combined work), being distributed under the terms of the GNU Lesser General
+Public License plus this exception.  An independent module is a
+module which is not derived from or based on RXTX.
+
+Note that people who make modified versions of RXTX are not obligated
+to grant this special exception for their modified versions; it is
+their choice whether to do so.  The GNU Lesser General Public License
+gives permission to release a modified version without this exception; this
+exception also makes it possible to release a modified version which
+carries forward this exception.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+All trademarks belong to their respective owners.
+</pre>
+</body>
+</html>
diff --git a/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/src/gnu.io.rxtx_2.1.7.4_v20071016/about_files/lgpl.txt b/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/src/gnu.io.rxtx_2.1.7.4_v20071016/about_files/lgpl.txt
new file mode 100644 (file)
index 0000000..5ab7695
--- /dev/null
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/src/gnu.io.rxtx_2.1.7.4_v20071016/src.zip b/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/src/gnu.io.rxtx_2.1.7.4_v20071016/src.zip
new file mode 100644 (file)
index 0000000..044fcbd
Binary files /dev/null and b/rxtx/gnu.io.rxtx.source_2.1.7.4_v20071016/src/gnu.io.rxtx_2.1.7.4_v20071016/src.zip differ
diff --git a/rxtx/gnu.io.rxtx_2.1.7.4_v20071016.jar b/rxtx/gnu.io.rxtx_2.1.7.4_v20071016.jar
new file mode 100644 (file)
index 0000000..4d8b572
Binary files /dev/null and b/rxtx/gnu.io.rxtx_2.1.7.4_v20071016.jar differ
diff --git a/rxtx/gnu.io.rxtx_2.1.7.4_v20071016/about.html b/rxtx/gnu.io.rxtx_2.1.7.4_v20071016/about.html
new file mode 100644 (file)
index 0000000..099ace0
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+This is an unmodified release of RXTX-2.1-7r2 as downloaded
+from <a href="http://www.rxtx.org">http://www.rxtx.org</a>, with 
+the following exceptions:
+<ul>
+  <li>RXTXCommDriver.java v1.16.2.57 was compiled from RXTX CVS and included 
+      in order to support disabling version print on startup (set System Property
+      <tt>-Dgnu.io.rxtx.NoVersionOutput=true</tt>). This is RXTX 
+      <a href="http://bugzilla.qbang.org/show_bug.cgi?id=71">bug 71</a>.</li>
+  <li>CommPortIdentifier.java: Include the Fix for RXTX
+      <a href="http://bugzilla.qbang.org/show_bug.cgi?id=83">bug 83</a>
+      due to which CommPortOwnership events are lost. The original 
+      fix from bugzilla is included in this version of the library.</li>
+</ul>
+
+<h3>License</h3>
+<pre>
+RXTX License v 2.1 - LGPL v 2.1 + Linking Over Controlled Interface.
+RXTX is a native interface to serial ports in java.
+
+Copyright 1997-2007 by Trent Jarvi <a href="mailto:tjarvi@qbang.org">tjarvi@qbang.org</a> and others who
+actually wrote it.  See individual source files for more information.
+
+A copy of the LGPL v 2.1 may be found at
+<a href="http://www.gnu.org/licenses/lgpl.txt">http://www.gnu.org/licenses/lgpl.txt</a> on March 4th 2007.  A copy is
+<a href="about_files/lgpl.txt">here</a> for your convenience.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+An executable that contains no derivative of any portion of RXTX, but
+is designed to work with RXTX by being dynamically linked with it,
+is considered a "work that uses the Library" subject to the terms and
+conditions of the GNU Lesser General Public License.
+
+The following has been added to the RXTX License to remove
+any confusion about linking to RXTX.   We want to allow in part what
+section 5, paragraph 2 of the LGPL does not permit in the special
+case of linking over a controlled interface.  The intent is to add a
+Java Specification Request or standards body defined interface in the 
+future as another exception but one is not currently available.
+
+<a href="http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface">http://www.fsf.org/licenses/gpl-faq.html#LinkingOverControlledInterface</a>
+
+As a special exception, the copyright holders of RXTX give you
+permission to link RXTX with independent modules that communicate with
+RXTX solely through the Sun Microsytems CommAPI interface version 2,
+regardless of the license terms of these independent modules, and to copy
+and distribute the resulting combined work under terms of your choice,
+provided that every copy of the combined work is accompanied by a complete
+copy of the source code of RXTX (the version of RXTX used to produce the
+combined work), being distributed under the terms of the GNU Lesser General
+Public License plus this exception.  An independent module is a
+module which is not derived from or based on RXTX.
+
+Note that people who make modified versions of RXTX are not obligated
+to grant this special exception for their modified versions; it is
+their choice whether to do so.  The GNU Lesser General Public License
+gives permission to release a modified version without this exception; this
+exception also makes it possible to release a modified version which
+carries forward this exception.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+All trademarks belong to their respective owners.
+</pre>
+</body>
+</html>
diff --git a/rxtx/gnu.io.rxtx_2.1.7.4_v20071016/about_files/lgpl.txt b/rxtx/gnu.io.rxtx_2.1.7.4_v20071016/about_files/lgpl.txt
new file mode 100644 (file)
index 0000000..5ab7695
--- /dev/null
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/rxtx/gnu.io.rxtx_2.1.7.4_v20071016/src.zip b/rxtx/gnu.io.rxtx_2.1.7.4_v20071016/src.zip
new file mode 100644 (file)
index 0000000..044fcbd
Binary files /dev/null and b/rxtx/gnu.io.rxtx_2.1.7.4_v20071016/src.zip differ
diff --git a/rxtx/librxtxParallel.so b/rxtx/librxtxParallel.so
new file mode 100644 (file)
index 0000000..b6f8135
Binary files /dev/null and b/rxtx/librxtxParallel.so differ
diff --git a/rxtx/librxtxSerial.so b/rxtx/librxtxSerial.so
new file mode 100644 (file)
index 0000000..470dbfa
Binary files /dev/null and b/rxtx/librxtxSerial.so differ