1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-01 06:05:24 +02:00

Merge branch 'terminal_split' of ../../../tcf/sources/org.eclipse.tcf

This commit is contained in:
Uwe Stieber 2015-04-15 06:53:54 +02:00
commit cb34c361b0
260 changed files with 27017 additions and 0 deletions

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.eclipse.tcf.te.terminals.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>

View file

@ -0,0 +1,13 @@
###############################################################################
# Copyright (c) 2012, 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
###############################################################################
bin.includes = feature.xml,\
feature.properties,\
p2.inf
src.includes = feature.properties

View file

@ -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
##################################################################################
# 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=Terminals View
# "providerName" property - name of the company that provides the feature
providerName=Eclipse.org - Target Explorer
# "updateSiteName" property - label for the update site
updateSiteName=Eclipse Update Site
# "description" property - description of the feature
description=An integrated Eclipse View for the local command prompt (console) or \
remote hosts (SSH, Telnet, Serial, TCF). 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) 2011, 2015 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 ####################################

View file

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.eclipse.tcf.te.terminals.feature"
label="%featureName"
version="1.3.0.qualifier"
provider-name="%providerName"
plugin="org.eclipse.tcf.te.core.terminals"
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/releases/luna"/>
</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.tcf.te.core.terminals" version="1.3.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.tm.terminal" version="3.3.1" match="greaterOrEqual"/>
<import plugin="org.eclipse.ui" version="3.8.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.core.variables" version="3.2.600" match="greaterOrEqual"/>
<import plugin="org.eclipse.tcf.te.ui.terminals" version="1.3.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.tcf.te.ui.terminals.process" version="1.3.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.equinox.security" version="1.1.100" match="greaterOrEqual"/>
<import plugin="org.eclipse.tm.terminal.serial" version="2.1.400" match="greaterOrEqual"/>
<import plugin="org.eclipse.tm.terminal.ssh" version="2.1.400" match="greaterOrEqual"/>
<import plugin="org.eclipse.tm.terminal.telnet" version="2.1.400" match="greaterOrEqual"/>
</requires>
<plugin
id="org.eclipse.tcf.te.core.terminals"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.tcf.te.ui.terminals"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.tcf.te.ui.terminals.local"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.tcf.te.ui.terminals.process"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.tcf.te.ui.terminals.serial"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.tcf.te.ui.terminals.ssh"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.tcf.te.ui.terminals.telnet"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View file

@ -0,0 +1,22 @@
###############################################################################
# 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
###############################################################################
# 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.tcf.te.ui.terminals.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

View file

@ -0,0 +1,21 @@
<?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.tcf</groupId>
<artifactId>org.eclipse.tcf.maven-build</artifactId>
<version>1.3.0-SNAPSHOT</version>
<relativePath>../../../admin/pom-build.xml</relativePath>
</parent>
<version>1.3.0.qualifier</version>
<artifactId>org.eclipse.tcf.te.terminals.feature</artifactId>
<packaging>eclipse-feature</packaging>
<properties>
<jacoco.skip>true</jacoco.skip>
</properties>
</project>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.eclipse.tcf.te.terminals.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>

View file

@ -0,0 +1,12 @@
###############################################################################
# Copyright (c) 2012, 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
###############################################################################
bin.includes = feature.xml,\
feature.properties
src.includes = feature.properties

View file

@ -0,0 +1,37 @@
##################################################################################
# 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
##################################################################################
# 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=Remote System Explorer Terminals View add-in
# "providerName" property - name of the company that provides the feature
providerName=Eclipse.org - Target Explorer
# "updateSiteName" property - label for the update site
updateSiteName=Eclipse Update Site
# "description" property - description of the feature
description=Integrates the Terminals 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, 2015 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 ####################################

View file

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.eclipse.tcf.te.terminals.rse.feature"
label="%featureName"
version="1.3.0.qualifier"
provider-name="%providerName"
plugin="org.eclipse.tcf.te.core.terminals"
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/releases/luna"/>
</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.tcf.te.core.terminals" version="1.3.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.tcf.te.ui.terminals" version="1.3.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.tm.terminal" version="3.3.1" match="greaterOrEqual"/>
<import plugin="org.eclipse.ui" version="3.8.0" match="greaterOrEqual"/>
<import feature="org.eclipse.tcf.te.terminals.feature" version="1.3.0" match="greaterOrEqual"/>
</requires>
<plugin
id="org.eclipse.tcf.te.ui.terminals.rse"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View file

@ -0,0 +1,21 @@
<?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.tcf</groupId>
<artifactId>org.eclipse.tcf.maven-build</artifactId>
<version>1.3.0-SNAPSHOT</version>
<relativePath>../../../admin/pom-build.xml</relativePath>
</parent>
<version>1.3.0.qualifier</version>
<artifactId>org.eclipse.tcf.te.terminals.rse.feature</artifactId>
<packaging>eclipse-feature</packaging>
<properties>
<jacoco.skip>true</jacoco.skip>
</properties>
</project>

View file

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.eclipse.tcf.te.terminals.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>

View file

@ -0,0 +1,12 @@
###############################################################################
# Copyright (c) 2012, 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
###############################################################################
bin.includes = feature.xml,\
feature.properties
src.includes = feature.properties

View file

@ -0,0 +1,37 @@
##################################################################################
# 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
##################################################################################
# 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=Remote System Explorer Terminals View add-in, SDK
# "providerName" property - name of the company that provides the feature
providerName=Eclipse.org - Target Explorer
# "updateSiteName" property - label for the update site
updateSiteName=Eclipse Update Site
# "description" property - description of the feature
description=Integrates the Terminals 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 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 ####################################

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.eclipse.tcf.te.terminals.rse.sdk.feature"
label="%featureName"
version="1.3.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/releases/luna"/>
</url>
<requires>
<import feature="org.eclipse.tcf.te.terminals.sdk.feature" version="1.3.0" match="greaterOrEqual"/>
<import feature="org.eclipse.tcf.te.terminals.rse.feature" version="1.3.0" match="greaterOrEqual"/>
</requires>
<plugin
id="org.eclipse.tcf.te.ui.terminals.rse.source"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View file

@ -0,0 +1,21 @@
<?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.tcf</groupId>
<artifactId>org.eclipse.tcf.maven-build</artifactId>
<version>1.3.0-SNAPSHOT</version>
<relativePath>../../../admin/pom-build.xml</relativePath>
</parent>
<version>1.3.0.qualifier</version>
<artifactId>org.eclipse.tcf.te.terminals.rse.sdk.feature</artifactId>
<packaging>eclipse-feature</packaging>
<properties>
<jacoco.skip>true</jacoco.skip>
</properties>
</project>

View file

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.eclipse.tcf.te.terminals.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>

View file

@ -0,0 +1,12 @@
###############################################################################
# Copyright (c) 2012, 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
###############################################################################
bin.includes = feature.xml,\
feature.properties
src.includes = feature.properties

View file

@ -0,0 +1,38 @@
##################################################################################
# Copyright (c) 2011, 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
##################################################################################
# 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=Terminals View, SDK
# "providerName" property - name of the company that provides the feature
providerName=Eclipse.org - Target Explorer
# "updateSiteName" property - label for the update site
updateSiteName=Eclipse Update Site
# "description" property - description of the feature
description=An integrated Eclipse View for the local command prompt (console) or \
remote hosts via (SSH, Telnet, Serial, TCF). 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) 2011, 2014 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 ####################################

View file

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.eclipse.tcf.te.terminals.sdk.feature"
label="%featureName"
version="1.3.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/releases/luna"/>
</url>
<requires>
<import feature="org.eclipse.tcf.te.terminals.feature" version="1.3.0" match="greaterOrEqual"/>
</requires>
<plugin
id="org.eclipse.tcf.te.core.terminals.source"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.tcf.te.ui.terminals.source"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.tcf.te.ui.terminals.local.source"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.tcf.te.ui.terminals.process.source"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.tcf.te.ui.terminals.serial.source"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.tcf.te.ui.terminals.ssh.source"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.tcf.te.ui.terminals.telnet.source"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View file

@ -0,0 +1,21 @@
<?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.tcf</groupId>
<artifactId>org.eclipse.tcf.maven-build</artifactId>
<version>1.3.0-SNAPSHOT</version>
<relativePath>../../../admin/pom-build.xml</relativePath>
</parent>
<version>1.3.0.qualifier</version>
<artifactId>org.eclipse.tcf.te.terminals.sdk.feature</artifactId>
<packaging>eclipse-feature</packaging>
<properties>
<jacoco.skip>true</jacoco.skip>
</properties>
</project>

View file

@ -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>

View file

@ -0,0 +1 @@
org.eclipse.tcf.te.core.terminals/debugmode = 0

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.eclipse.tcf.te.core.terminals</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>
<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>

View file

@ -0,0 +1,362 @@
#Sat Oct 15 08:44:04 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

View file

@ -0,0 +1,56 @@
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_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.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_trailing_whitespaces=true
sp_cleanup.remove_trailing_whitespaces_all=true
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
sp_cleanup.remove_unnecessary_casts=true
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_blocks=false
sp_cleanup.use_blocks_only_for_return_and_throw=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

View file

@ -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

View file

@ -0,0 +1,21 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.tcf.te.core.terminals;singleton:=true
Bundle-Version: 1.3.0.qualifier
Bundle-Activator: org.eclipse.tcf.te.core.terminals.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.tcf.te.core.terminals,
org.eclipse.tcf.te.core.terminals.activator;x-internal:=true,
org.eclipse.tcf.te.core.terminals.interfaces,
org.eclipse.tcf.te.core.terminals.interfaces.constants,
org.eclipse.tcf.te.core.terminals.internal;x-internal:=true,
org.eclipse.tcf.te.core.terminals.nls;x-internal:=true,
org.eclipse.tcf.te.core.terminals.preferences,
org.eclipse.tcf.te.core.terminals.tracing,
org.eclipse.tcf.te.core.terminals.utils

View file

@ -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>

View file

@ -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=te-feature.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

View file

@ -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@

View file

@ -0,0 +1,24 @@
################################################################################
# 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:
# 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=TCF Terminals\n\
\n\
Version: {featureVersion}\n\
\n\
(c) Copyright Wind River Systems, Inc. and others 2011, 2015. All rights reserved.\n\
Visit http://marketplace.eclipse.org/content/tcf-terminals

View file

@ -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,\
te-feature.png

View file

@ -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 = Terminals Core
providerName = Eclipse.org - Target Explorer
ExtensionPoint.contextPropertiesProviders = Terminal Context Properties Providers

View file

@ -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.tcf.te.core.terminals.internal.PropertyTester"
id="org.eclipse.tcf.te.core.terminals.PropertyTester"
namespace="org.eclipse.tcf.te.core.terminals"
properties="hasContextPropertiesProvider"
type="java.lang.Object">
</propertyTester>
</extension>
</plugin>

View file

@ -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.tcf</groupId>
<artifactId>org.eclipse.tcf.maven-build</artifactId>
<version>1.3.0-SNAPSHOT</version>
<relativePath>../../../admin/pom-build.xml</relativePath>
</parent>
<version>1.3.0.qualifier</version>
<artifactId>org.eclipse.tcf.te.core.terminals</artifactId>
<packaging>eclipse-plugin</packaging>
</project>

View file

@ -0,0 +1,129 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Schema file written by PDE -->
<schema targetNamespace="org.eclipse.tcf.te.core.terminals" xmlns="http://www.w3.org/2001/XMLSchema">
<annotation>
<appinfo>
<meta.schema plugin="org.eclipse.tcf.te.core.terminals" 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.tcf.te.core.terminals.interfaces.ITerminalContextPropertiesProvider&lt;/code&gt;.
</documentation>
<appinfo>
<meta.attribute kind="java" basedOn=":org.eclipse.tcf.te.core.terminals.interfaces.ITerminalContextPropertiesProvider"/>
</appinfo>
</annotation>
</attribute>
</complexType>
</element>
<annotation>
<appinfo>
<meta.section type="since"/>
</appinfo>
<documentation>
Target Explorer 1.3.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.core.terminals.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.tcf.te.core.terminals.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>

View file

@ -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.tcf.te.core.terminals;
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.tcf.te.core.terminals.activator.CoreBundleActivator;
import org.eclipse.tcf.te.core.terminals.interfaces.ITerminalContextPropertiesProvider;
import org.eclipse.tcf.te.core.terminals.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.tcf.te.core.terminals.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;
}
}

View file

@ -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.tcf.te.core.terminals;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.tcf.te.core.terminals.activator.CoreBundleActivator;
import org.eclipse.tcf.te.core.terminals.interfaces.ITerminalService;
import org.eclipse.tcf.te.core.terminals.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.tcf.te.ui.terminals bundle
Bundle bundle = Platform.getBundle("org.eclipse.tcf.te.ui.terminals"); //$NON-NLS-1$
if (bundle != null && bundle.getState() != Bundle.UNINSTALLED && bundle.getState() != Bundle.STOPPING) {
try {
Class<?> clazz = bundle.loadClass("org.eclipse.tcf.te.ui.terminals.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;
}
}

View file

@ -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.tcf.te.core.terminals.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 plugin.
*/
public static String getUniqueIdentifier() {
if (getContext() != null && getContext().getBundle() != null) {
return getContext().getBundle().getSymbolicName();
}
return "org.eclipse.tcf.te.core.terminals"; //$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;
}
}

View file

@ -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.tcf.te.core.terminals.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);
}

View file

@ -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.tcf.te.core.terminals.interfaces;
import java.util.Map;
import org.eclipse.core.runtime.IStatus;
/**
* Terminals 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);
}

View file

@ -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.tcf.te.core.terminals.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);
}

View file

@ -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.tcf.te.core.terminals.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);
}

View file

@ -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.tcf.te.core.terminals.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$
}

View file

@ -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.tcf.te.core.terminals.interfaces.constants;
/**
* Line separator constants.
* <p>
* Copied from <code>org.eclipse.tcf.internal.terminal.local.ILocalTerminalSettings</code>.
*/
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$
}

View file

@ -0,0 +1,322 @@
/*******************************************************************************
* 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.tcf.te.core.terminals.interfaces.constants;
import org.eclipse.tcf.te.core.terminals.interfaces.ITerminalServiceOutputStreamMonitorListener;
/**
* Defines the terminals connector constants.
*/
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: Terminals 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$
}

View file

@ -0,0 +1,36 @@
/*******************************************************************************
* Copyright (c) 2011, 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
*******************************************************************************/
package org.eclipse.tcf.te.core.terminals.internal;
import org.eclipse.tcf.te.core.terminals.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;
}
}

View file

@ -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.tcf.te.core.terminals.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.tcf.te.core.terminals.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;
}

View file

@ -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}"!

View file

@ -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.tcf.te.core.terminals.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);
}
}
}

View file

@ -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.tcf.te.core.terminals.tracing;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.tcf.te.core.terminals.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);
}
}

View file

@ -0,0 +1,231 @@
/*******************************************************************************
* 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.tcf.te.core.terminals.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
String[] parts = envpPart.split("=");//$NON-NLS-1$
String name = parts[0].trim();
// 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("=") || name.contains(":")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
continue;
}
}
// Get the variable value
String value = parts.length > 1 ? parts[1].trim() : ""; //$NON-NLS-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();
String key = null;
String value = null;
while (line != 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);
while (line != null && !line.equals("}")) { //$NON-NLS-1$
line = reader.readLine();
if (line != null) {
value += line;
}
}
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);
key = null;
value = null;
} 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.
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -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>

View file

@ -0,0 +1 @@
org.eclipse.tcf.te.ui.terminals.local/debugmode = 0

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.eclipse.tcf.te.ui.terminals.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>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</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>

View file

@ -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

View file

@ -0,0 +1,56 @@
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_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.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_trailing_whitespaces=true
sp_cleanup.remove_trailing_whitespaces_all=true
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
sp_cleanup.remove_unnecessary_casts=true
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_blocks=false
sp_cleanup.use_blocks_only_for_return_and_throw=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

View file

@ -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

View file

@ -0,0 +1,30 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.tcf.te.ui.terminals.local;singleton:=true
Bundle-Version: 1.3.0.qualifier
Bundle-Activator: org.eclipse.tcf.te.ui.terminals.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";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.tcf.te.core.terminals;bundle-version="1.3.0",
org.eclipse.tcf.te.ui.terminals;bundle-version="1.3.0",
org.eclipse.tcf.te.ui.terminals.process;bundle-version="1.3.0",
org.eclipse.tm.terminal;bundle-version="3.3.1",
org.eclipse.ui;bundle-version="3.8.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Bundle-Localization: plugin
Export-Package: org.eclipse.tcf.te.ui.terminals.local.activator;x-internal:=true,
org.eclipse.tcf.te.ui.terminals.local.controls,
org.eclipse.tcf.te.ui.terminals.local.help,
org.eclipse.tcf.te.ui.terminals.local.launcher,
org.eclipse.tcf.te.ui.terminals.local.nls;x-internal:=true,
org.eclipse.tcf.te.ui.terminals.local.showin,
org.eclipse.tcf.te.ui.terminals.local.showin.interfaces,
org.eclipse.tcf.te.ui.terminals.local.showin.preferences

View file

@ -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))

View file

@ -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>

View file

@ -0,0 +1,17 @@
###############################################################################
# Copyright (c) 2012, 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
###############################################################################
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
plugin.xml,\
plugin.properties,\
about.html,\
icons/

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<contexts>
<context id="ExternalExecutablesDialog">
<description>Add or modify an external executable added to the 'Show In' context menu.</description>
</context>
</contexts>

Binary file not shown.

After

Width:  |  Height:  |  Size: 938 B

View file

@ -0,0 +1,23 @@
##################################################################################
# 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 = Terminals Local Connector
providerName = Eclipse.org - Target Explorer
# ----- Commands and Menu contributions -----
LocalLauncherDelegate.label=Local Terminal
command.launch.name=Open Local Terminal on Selection
menu.showIn.localterminal.label = Terminals
# ----- Preference Pages -----
preference.page.name=Local Terminal

View file

@ -0,0 +1,130 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<!-- Terminal connector contributions -->
<!-- uses process connector -->
<extension point="org.eclipse.tm.terminal.terminalConnectors">
<connector
class="org.eclipse.tcf.te.ui.terminals.process.ProcessConnector"
hidden="true"
id="org.eclipse.tcf.te.ui.terminals.local.LocalConnector"
name="%TerminalConnector.local"/>
</extension>
<!-- Terminals launcher delegate contributions -->
<extension point="org.eclipse.tcf.te.ui.terminals.launcherDelegates">
<delegate
class="org.eclipse.tcf.te.ui.terminals.local.launcher.LocalLauncherDelegate"
id="org.eclipse.tcf.te.ui.terminals.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.tcf.te.ui.terminals.ProjectExplorer.menu.showIn?after=additions">
<command
commandId="org.eclipse.tcf.te.ui.terminals.local.command.launch"
id="org.eclipse.tcf.te.ui.terminals.local.commands.showin.launch"
label="%menu.showIn.localterminal.label"
style="push">
<visibleWhen checkEnabled="false">
<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>
</visibleWhen>
</command>
<dynamic
class="org.eclipse.tcf.te.ui.terminals.local.showin.DynamicContributionItems"
id="org.eclipse.tcf.te.ui.terminals.local.LocalLauncherDynamicContributionItems">
<visibleWhen checkEnabled="false">
<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>
</visibleWhen>
</dynamic>
</menuContribution>
</extension>
<!-- Command contributions -->
<extension point="org.eclipse.ui.commands">
<command
categoryId="org.eclipse.tcf.te.ui.terminals.commands.category"
helpContextId="org.eclipse.tcf.te.ui.terminals.local.command_Launch"
id="org.eclipse.tcf.te.ui.terminals.local.command.launch"
name="%command.launch.name">
</command>
</extension>
<extension point="org.eclipse.ui.commandImages">
<image
commandId="org.eclipse.tcf.te.ui.terminals.local.command.launch"
icon="icons/eview16/terminal_view.gif">
</image>
</extension>
<!-- Key bindings -->
<extension point="org.eclipse.ui.bindings">
<key
commandId="org.eclipse.tcf.te.ui.terminals.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.tcf.te.ui.terminals.local.launcher.LocalLauncherHandler"
commandId="org.eclipse.tcf.te.ui.terminals.local.command.launch">
</handler>
</extension>
<!-- Preference page contributions -->
<extension point="org.eclipse.ui.preferencePages">
<page
category="org.eclipse.tm.terminal.TerminalPreferencePage"
class="org.eclipse.tcf.te.ui.terminals.local.showin.preferences.PreferencePage"
id="org.eclipse.tcf.te.ui.terminals.local.showin.preferences"
name="%preference.page.name">
</page>
</extension>
<!-- Preferences contributions -->
<extension point="org.eclipse.core.runtime.preferences">
<initializer
class="org.eclipse.tcf.te.ui.terminals.local.showin.preferences.PreferencesInitializer">
</initializer>
</extension>
<!-- Startup contributions -->
<extension point="org.eclipse.ui.startup">
<startup class="org.eclipse.tcf.te.ui.terminals.local.showin.ExternalExecutablesInitializer"/>
</extension>
<!-- Help Context contributions -->
<extension point="org.eclipse.help.contexts">
<contexts
file="contexts.xml">
</contexts>
</extension>
</plugin>

View file

@ -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.tcf</groupId>
<artifactId>org.eclipse.tcf.maven-build</artifactId>
<version>1.3.0-SNAPSHOT</version>
<relativePath>../../../admin/pom-build.xml</relativePath>
</parent>
<version>1.3.0.qualifier</version>
<artifactId>org.eclipse.tcf.te.ui.terminals.local</artifactId>
<packaging>eclipse-plugin</packaging>
</project>

View file

@ -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.tcf.te.ui.terminals.local.activator;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.swt.graphics.Image;
import org.eclipse.tcf.te.core.terminals.preferences.ScopedEclipsePreferences;
import org.eclipse.tcf.te.core.terminals.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.tcf.te.ui.terminals.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);
}
}

View file

@ -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.tcf.te.ui.terminals.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.tcf.te.core.terminals.interfaces.constants.ITerminalsConnectorConstants;
import org.eclipse.tcf.te.ui.terminals.interfaces.IConfigurationPanelContainer;
import org.eclipse.tcf.te.ui.terminals.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.tcf.te.ui.controls.interfaces.IWizardConfigurationPanel#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.tcf.te.ui.terminals.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.tcf.te.ui.terminals.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.tcf.te.ui.terminals.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.tcf.te.ui.terminals.panels.AbstractConfigurationPanel#fillSettingsForHost(java.lang.String)
*/
@Override
protected void fillSettingsForHost(String host){
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.terminals.panels.AbstractConfigurationPanel#saveSettingsForHost(boolean)
*/
@Override
protected void saveSettingsForHost(boolean add){
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.controls.panels.AbstractWizardConfigurationPanel#isValid()
*/
@Override
public boolean isValid(){
return true;
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.terminals.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.tcf.te.ui.terminals.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.tcf.te.ui.terminals.panels.AbstractConfigurationPanel#getHostFromSettings()
*/
@Override
protected String getHostFromSettings() {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.terminals.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;
}
}

View file

@ -0,0 +1,29 @@
/*******************************************************************************
* 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
*******************************************************************************/
package org.eclipse.tcf.te.ui.terminals.local.help;
import org.eclipse.tcf.te.ui.terminals.local.activator.UIPlugin;
/**
* UI 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$
/**
* External executables dialog.
*/
public final static String EXTERNAL_EXECUTABLES_DIALOG = PREFIX + "ExternalExecutablesDialog"; //$NON-NLS-1$
}

View file

@ -0,0 +1,402 @@
/*******************************************************************************
* 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.tcf.te.ui.terminals.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.tcf.te.core.terminals.TerminalServiceFactory;
import org.eclipse.tcf.te.core.terminals.interfaces.ITerminalService;
import org.eclipse.tcf.te.core.terminals.interfaces.ITerminalService.Done;
import org.eclipse.tcf.te.core.terminals.interfaces.ITerminalServiceOutputStreamMonitorListener;
import org.eclipse.tcf.te.core.terminals.interfaces.constants.ILineSeparatorConstants;
import org.eclipse.tcf.te.core.terminals.interfaces.constants.ITerminalsConnectorConstants;
import org.eclipse.tcf.te.ui.terminals.interfaces.IConfigurationPanel;
import org.eclipse.tcf.te.ui.terminals.interfaces.IConfigurationPanelContainer;
import org.eclipse.tcf.te.ui.terminals.interfaces.IMementoHandler;
import org.eclipse.tcf.te.ui.terminals.internal.SettingsStore;
import org.eclipse.tcf.te.ui.terminals.launcher.AbstractLauncherDelegate;
import org.eclipse.tcf.te.ui.terminals.local.activator.UIPlugin;
import org.eclipse.tcf.te.ui.terminals.local.controls.LocalWizardConfigurationPanel;
import org.eclipse.tcf.te.ui.terminals.local.showin.interfaces.IPreferenceKeys;
import org.eclipse.tcf.te.ui.terminals.process.ProcessSettings;
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.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.tcf.te.ui.terminals.interfaces.ILauncherDelegate#needsUserConfiguration()
*/
@Override
public boolean needsUserConfiguration() {
return false;
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate#getPanel(org.eclipse.tcf.te.ui.terminals.interfaces.IConfigurationPanelContainer)
*/
@Override
public IConfigurationPanel getPanel(IConfigurationPanelContainer container) {
return new LocalWizardConfigurationPanel(container);
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate#execute(java.util.Map, org.eclipse.tcf.te.core.terminals.interfaces.ITerminalService.Done)
*/
@Override
public void execute(Map<String, Object> properties, 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 = 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 {
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 = 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.tcf.te.ui.terminals.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.tcf.te.ui.terminals.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 = 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.makeSettingsPage();
// And load the real settings
connector.load(store);
}
return connector;
}
}

View file

@ -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.tcf.te.ui.terminals.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.tcf.te.core.terminals.interfaces.constants.ITerminalsConnectorConstants;
import org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate;
import org.eclipse.tcf.te.ui.terminals.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.tcf.te.ui.terminals.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;
}
}

View file

@ -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.tcf.te.ui.terminals.local.launcher;
import java.util.Map;
import org.eclipse.core.runtime.Assert;
import org.eclipse.tcf.te.ui.terminals.interfaces.IMementoHandler;
import org.eclipse.ui.IMemento;
/**
* Local terminal connection memento handler implementation.
*/
public class LocalMementoHandler implements IMementoHandler {
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.terminals.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.tcf.te.ui.terminals.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);
}
}

View file

@ -0,0 +1,66 @@
/*******************************************************************************
* 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.tcf.te.ui.terminals.local.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.tcf.te.ui.terminals.local.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_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;
}

View file

@ -0,0 +1,46 @@
###############################################################################
# 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_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:

View file

@ -0,0 +1,129 @@
/*******************************************************************************
* 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.tcf.te.ui.terminals.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.tcf.te.core.terminals.interfaces.constants.ITerminalsConnectorConstants;
import org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate;
import org.eclipse.tcf.te.ui.terminals.launcher.LauncherDelegateManager;
import org.eclipse.tcf.te.ui.terminals.local.showin.interfaces.IExternalExecutablesProperties;
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.tcf.te.ui.terminals.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;
}
}

View file

@ -0,0 +1,460 @@
/*******************************************************************************
* 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.tcf.te.ui.terminals.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.tcf.te.ui.terminals.local.help.IContextHelpIds;
import org.eclipse.tcf.te.ui.terminals.local.nls.Messages;
import org.eclipse.tcf.te.ui.terminals.local.showin.interfaces.IExternalExecutablesProperties;
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.tcf.te.ui.jface.dialogs.CustomTrayDialog#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 = data;
} 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);
}
}
}

View file

@ -0,0 +1,88 @@
/*******************************************************************************
* 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.tcf.te.ui.terminals.local.showin;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import org.eclipse.core.runtime.Platform;
import org.eclipse.tcf.te.ui.terminals.local.showin.interfaces.IExternalExecutablesProperties;
import org.eclipse.ui.IStartup;
/**
* External executables data initializer.
*/
public class ExternalExecutablesInitializer implements IStartup {
/* (non-Javadoc)
* @see org.eclipse.ui.IStartup#earlyStartup()
*/
@Override
public void earlyStartup() {
// On Windows, initialize the "Git Bash" custom "Show In" menu entry
if (Platform.OS_WIN32.equals(Platform.getOS())) {
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();
}
f2 = new File(f.getParentFile().getParentFile(), "etc/git.ico"); //$NON-NLS-1$
if (f2.canRead()) {
iconPath = f2.getAbsolutePath();
}
break;
}
}
}
if (gitPath != null) {
// Load the configured external executables
List<Map<String, String>> l = ExternalExecutablesManager.load();
if (l == null) l = new ArrayList<Map<String, String>>();
// 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 (m == 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);
ExternalExecutablesManager.save(l);
}
}
}
}
}

View file

@ -0,0 +1,181 @@
/*******************************************************************************
* 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.tcf.te.ui.terminals.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 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.tcf.te.ui.terminals.local.activator.UIPlugin;
/**
* External executables manager implementation.
*/
public class ExternalExecutablesManager {
/**
* 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 */ }
}
}
}
return l;
}
/**
* Saves the list of external executables.
*
* @param l The list of external executables or <code>null</code>.
*/
public static void save(List<Map<String, String>> l) {
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();
} 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);
} 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;
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;
} else if (id.height != 16 && d.height < id.height && id.width != 16 && d.width < id.width) {
id = d;
}
}
}
}
return id;
}
}

View file

@ -0,0 +1,41 @@
/*******************************************************************************
* 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
*******************************************************************************/
package org.eclipse.tcf.te.ui.terminals.local.showin.interfaces;
/**
* External executables data property names.
*/
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$
}

View file

@ -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.tcf.te.ui.terminals.local.showin.interfaces;
/**
* Terminals plug-in preference key definitions.
*/
public interface IPreferenceKeys {
/**
* Preference keys family prefix.
*/
public final String PREF_TERMINAL = "terminals"; //$NON-NLS-1$
/**
* Preference key: Local terminal initial working directory.
*/
public final String PREF_LOCAL_TERMINAL_INITIAL_CWD = PREF_TERMINAL + ".localTerminalInitialCwd"; //$NON-NLS-1$
/**
* Preference value: Local terminal initial working directory is "User home"
*/
public final String PREF_INITIAL_CWD_USER_HOME = "userhome"; //$NON-NLS-1$
/**
* Preference value: Local terminal initial working directory is "Eclipse home"
*/
public final String PREF_INITIAL_CWD_ECLIPSE_HOME = "eclipsehome"; //$NON-NLS-1$
/**
* Preference value: Local terminal initial working directory is "Eclipse workspace"
*/
public final String PREF_INITIAL_CWD_ECLIPSE_WS = "eclipsews"; //$NON-NLS-1$
/**
* Preference key: Local terminal default shell command on Unix hosts.
*/
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.
*/
public final String PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX_ARGS = PREF_TERMINAL + ".localTerminalDefaultShellUnixArgs"; //$NON-NLS-1$
}

View file

@ -0,0 +1,678 @@
/*******************************************************************************
* 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.tcf.te.ui.terminals.local.showin.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.tcf.te.ui.terminals.controls.NoteCompositeHelper;
import org.eclipse.tcf.te.ui.terminals.local.activator.UIPlugin;
import org.eclipse.tcf.te.ui.terminals.local.nls.Messages;
import org.eclipse.tcf.te.ui.terminals.local.showin.ExternalExecutablesDialog;
import org.eclipse.tcf.te.ui.terminals.local.showin.ExternalExecutablesManager;
import org.eclipse.tcf.te.ui.terminals.local.showin.interfaces.IExternalExecutablesProperties;
import org.eclipse.tcf.te.ui.terminals.local.showin.interfaces.IPreferenceKeys;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.osgi.framework.Bundle;
/**
* Terminals 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();
}
}

View file

@ -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.tcf.te.ui.terminals.local.showin.preferences;
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.eclipse.tcf.te.core.terminals.preferences.ScopedEclipsePreferences;
import org.eclipse.tcf.te.ui.terminals.local.activator.UIPlugin;
import org.eclipse.tcf.te.ui.terminals.local.showin.interfaces.IPreferenceKeys;
/**
* Terminals 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.putDefaultString(IPreferenceKeys.PREF_LOCAL_TERMINAL_INITIAL_CWD, IPreferenceKeys.PREF_INITIAL_CWD_USER_HOME);
prefs.putDefaultString(IPreferenceKeys.PREF_LOCAL_TERMINAL_DEFAULT_SHELL_UNIX, null);
}
}

View file

@ -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>

View file

@ -0,0 +1 @@
org.eclipse.tcf.te.ui.terminals.process/debugmode = 0

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.eclipse.tcf.te.ui.terminals.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>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</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>

View file

@ -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

View file

@ -0,0 +1,56 @@
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_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.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_trailing_whitespaces=true
sp_cleanup.remove_trailing_whitespaces_all=true
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
sp_cleanup.remove_unnecessary_casts=true
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_blocks=false
sp_cleanup.use_blocks_only_for_return_and_throw=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

View file

@ -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

View file

@ -0,0 +1,24 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.tcf.te.ui.terminals.process;singleton:=true
Bundle-Version: 1.3.0.qualifier
Bundle-Activator: org.eclipse.tcf.te.ui.terminals.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";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.tcf.te.core.terminals;bundle-version="1.3.0",
org.eclipse.tcf.te.ui.terminals;bundle-version="1.3.0",
org.eclipse.tm.terminal;bundle-version="3.3.1",
org.eclipse.ui;bundle-version="3.8.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Bundle-Localization: plugin
Export-Package: org.eclipse.tcf.te.ui.terminals.process,
org.eclipse.tcf.te.ui.terminals.process.activator;x-internal:=true,
org.eclipse.tcf.te.ui.terminals.process.help,
org.eclipse.tcf.te.ui.terminals.process.nls;x-internal:=true

View file

@ -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))

View file

@ -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>

View file

@ -0,0 +1,16 @@
###############################################################################
# Copyright (c) 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:
# Wind River Systems - initial API and implementation
###############################################################################
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
plugin.xml,\
plugin.properties,\
about.html

View file

@ -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 = Terminals Process Connector
providerName = Eclipse.org - Target Explorer
# ----- Terminal Connectors -----
TerminalConnector.process=Process Connector (hidden)
# ----- Terminal Launcher Delegates -----
ProcessLauncherDelegate.label=Streams Terminal
# ----- Commands and Menu contributions -----

View file

@ -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.terminalConnectors">
<connector
class="org.eclipse.tcf.te.ui.terminals.process.ProcessConnector"
hidden="true"
id="org.eclipse.tcf.te.ui.terminals.ProcessConnector"
name="%TerminalConnector.process"/>
</extension>
<!-- Terminals launcher delegate contributions -->
<extension point="org.eclipse.tcf.te.ui.terminals.launcherDelegates">
<delegate
class="org.eclipse.tcf.te.ui.terminals.process.ProcessLauncherDelegate"
hidden="true"
id="org.eclipse.tcf.te.ui.terminals.telnet.launcher.process"
label="%ProcessLauncherDelegate.label">
</delegate>
</extension>
</plugin>

View file

@ -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.tcf</groupId>
<artifactId>org.eclipse.tcf.maven-build</artifactId>
<version>1.3.0-SNAPSHOT</version>
<relativePath>../../../admin/pom-build.xml</relativePath>
</parent>
<version>1.3.0.qualifier</version>
<artifactId>org.eclipse.tcf.te.ui.terminals.process</artifactId>
<packaging>eclipse-plugin</packaging>
</project>

View file

@ -0,0 +1,304 @@
/*******************************************************************************
* 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.tcf.te.ui.terminals.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.tcf.te.core.terminals.interfaces.constants.ILineSeparatorConstants;
import org.eclipse.tcf.te.core.terminals.utils.Env;
import org.eclipse.tcf.te.ui.terminals.manager.ConsoleManager;
import org.eclipse.tcf.te.ui.terminals.process.nls.Messages;
import org.eclipse.tcf.te.ui.terminals.streams.AbstractStreamsConnector;
import org.eclipse.tm.internal.terminal.emulator.VT100Emulator;
import org.eclipse.tm.internal.terminal.emulator.VT100TerminalControl;
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsPage;
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;
/**
* 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.tcf.internal.terminal.provisional.api.provider.TerminalConnectorImpl#connect(org.eclipse.tcf.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.tcf.internal.terminal.provisional.api.provider.TerminalConnectorImpl#isLocalEcho()
*/
@Override
public boolean isLocalEcho() {
return settings.isLocalEcho();
}
/* (non-Javadoc)
* @see org.eclipse.tcf.internal.terminal.provisional.api.provider.TerminalConnectorImpl#doDisconnect()
*/
@Override
public void doDisconnect() {
// Stop monitoring the process
monitor.dispose();
// Dispose the streams
super.doDisconnect();
// Dispose the process
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.tcf.internal.terminal.provisional.api.provider.TerminalConnectorImpl#makeSettingsPage()
*/
@Override
public ISettingsPage makeSettingsPage() {
return new ProcessSettingsPage(settings);
}
/* (non-Javadoc)
* @see org.eclipse.tcf.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.tcf.internal.terminal.provisional.api.provider.TerminalConnectorImpl#load(org.eclipse.tcf.internal.terminal.provisional.api.ISettingsStore)
*/
@Override
public void load(ISettingsStore store) {
settings.load(store);
}
/* (non-Javadoc)
* @see org.eclipse.tcf.internal.terminal.provisional.api.provider.TerminalConnectorImpl#save(org.eclipse.tcf.internal.terminal.provisional.api.ISettingsStore)
*/
@Override
public void save(ISettingsStore store) {
settings.save(store);
}
/* (non-Javadoc)
* @see org.eclipse.tcf.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);
}
}
}
}

View file

@ -0,0 +1,134 @@
/*******************************************************************************
* 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.tcf.te.ui.terminals.process;
import java.util.Map;
import org.eclipse.cdt.utils.pty.PTY;
import org.eclipse.core.runtime.Assert;
import org.eclipse.tcf.te.core.terminals.TerminalServiceFactory;
import org.eclipse.tcf.te.core.terminals.interfaces.ITerminalService;
import org.eclipse.tcf.te.core.terminals.interfaces.ITerminalService.Done;
import org.eclipse.tcf.te.core.terminals.interfaces.ITerminalServiceOutputStreamMonitorListener;
import org.eclipse.tcf.te.core.terminals.interfaces.constants.ITerminalsConnectorConstants;
import org.eclipse.tcf.te.ui.terminals.interfaces.IConfigurationPanel;
import org.eclipse.tcf.te.ui.terminals.interfaces.IConfigurationPanelContainer;
import org.eclipse.tcf.te.ui.terminals.internal.SettingsStore;
import org.eclipse.tcf.te.ui.terminals.launcher.AbstractLauncherDelegate;
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;
/**
* Process launcher delegate implementation.
*/
@SuppressWarnings("restriction")
public class ProcessLauncherDelegate extends AbstractLauncherDelegate {
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate#needsUserConfiguration()
*/
@Override
public boolean needsUserConfiguration() {
return false;
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate#getPanel(org.eclipse.tcf.te.ui.terminals.interfaces.IConfigurationPanelContainer)
*/
@Override
public IConfigurationPanel getPanel(IConfigurationPanelContainer container) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.terminals.interfaces.ILauncherDelegate#execute(java.util.Map, org.eclipse.tcf.te.core.terminals.interfaces.ITerminalService.Done)
*/
@Override
public void execute(Map<String, Object> properties, 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.tcf.te.ui.terminals.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.tcf.te.ui.terminals.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.makeSettingsPage();
// And load the real settings
connector.load(store);
}
return connector;
}
}

Some files were not shown because too many files have changed in this diff Show more