diff --git a/agents/bootstrapper/pom.xml b/agents/bootstrapper/pom.xml index e2dba47a1ccd..a9098e302ae8 100644 --- a/agents/bootstrapper/pom.xml +++ b/agents/bootstrapper/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT bootstrapper Agents :: Bootstrapper diff --git a/agents/exec/che-exec-agent-client/pom.xml b/agents/exec/che-exec-agent-client/pom.xml index b79107c03a1a..2a92da1613cf 100644 --- a/agents/exec/che-exec-agent-client/pom.xml +++ b/agents/exec/che-exec-agent-client/pom.xml @@ -16,7 +16,7 @@ exec-agent-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-exec-agent-client jar diff --git a/agents/exec/che-exec-agent-shared/pom.xml b/agents/exec/che-exec-agent-shared/pom.xml index 9ae63a3ccdab..ed09e6be6138 100644 --- a/agents/exec/che-exec-agent-shared/pom.xml +++ b/agents/exec/che-exec-agent-shared/pom.xml @@ -16,7 +16,7 @@ exec-agent-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-exec-agent-shared jar diff --git a/agents/exec/installer/pom.xml b/agents/exec/installer/pom.xml index f6025b1a0ed2..3bdd68548a45 100644 --- a/agents/exec/installer/pom.xml +++ b/agents/exec/installer/pom.xml @@ -16,7 +16,7 @@ exec-agent-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT exec-agent Agent :: Exec diff --git a/agents/exec/pom.xml b/agents/exec/pom.xml index 4ecd828bcd1b..5f7134d3a812 100644 --- a/agents/exec/pom.xml +++ b/agents/exec/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT exec-agent-parent pom diff --git a/agents/git-credentials/pom.xml b/agents/git-credentials/pom.xml index 87b8bafc93f8..ac71917d357a 100644 --- a/agents/git-credentials/pom.xml +++ b/agents/git-credentials/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT git-credentials-agent Git Credentials Agent diff --git a/agents/go-agents/pom.xml b/agents/go-agents/pom.xml index d9c18a24a2fa..d4f23ca2f89a 100644 --- a/agents/go-agents/pom.xml +++ b/agents/go-agents/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT go-agents Agent :: Golang agents diff --git a/agents/ls-csharp/pom.xml b/agents/ls-csharp/pom.xml index 69819808aaff..0b658d8f1089 100644 --- a/agents/ls-csharp/pom.xml +++ b/agents/ls-csharp/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ls-csharp-agent Language Server C# Agent diff --git a/agents/ls-json/pom.xml b/agents/ls-json/pom.xml index 259b36488292..b68f4e1154df 100644 --- a/agents/ls-json/pom.xml +++ b/agents/ls-json/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ls-json-agent Language Server Json Agent diff --git a/agents/ls-php/pom.xml b/agents/ls-php/pom.xml index b8a4cc7608bc..4a6035caabe7 100644 --- a/agents/ls-php/pom.xml +++ b/agents/ls-php/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ls-php-agent Language Server PHP Agent diff --git a/agents/ls-python/pom.xml b/agents/ls-python/pom.xml index 3f1f207ce673..34a64661ad61 100644 --- a/agents/ls-python/pom.xml +++ b/agents/ls-python/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ls-python-agent Language Server python Agent diff --git a/agents/ls-typescript/pom.xml b/agents/ls-typescript/pom.xml index cc0b22264152..b52a60c487d9 100644 --- a/agents/ls-typescript/pom.xml +++ b/agents/ls-typescript/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ls-typescript-agent Language Server typescript Agent diff --git a/agents/ls-yaml/pom.xml b/agents/ls-yaml/pom.xml index 31ca6be4c240..75538b34f8e8 100644 --- a/agents/ls-yaml/pom.xml +++ b/agents/ls-yaml/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ls-yaml-agent Language Server Yaml Agent diff --git a/agents/pom.xml b/agents/pom.xml index 5fe5ae91938a..4a64b70c4b38 100644 --- a/agents/pom.xml +++ b/agents/pom.xml @@ -16,11 +16,11 @@ che-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-agents-parent - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT pom Che Agents Parent diff --git a/agents/ssh/pom.xml b/agents/ssh/pom.xml index 1e1d69730b94..fdebd1e7194d 100644 --- a/agents/ssh/pom.xml +++ b/agents/ssh/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ssh-agent SSH Agent diff --git a/agents/terminal/pom.xml b/agents/terminal/pom.xml index 16c9676215fa..a73c3a5cbefb 100644 --- a/agents/terminal/pom.xml +++ b/agents/terminal/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT terminal-agent Agent :: Terminal diff --git a/agents/test-ls/pom.xml b/agents/test-ls/pom.xml index 46819438a8df..30f477d569b0 100644 --- a/agents/test-ls/pom.xml +++ b/agents/test-ls/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT test-ls-agent Test Language Server Agent diff --git a/agents/unison/pom.xml b/agents/unison/pom.xml index 80230fec9493..6a3261fff7cd 100644 --- a/agents/unison/pom.xml +++ b/agents/unison/pom.xml @@ -16,7 +16,7 @@ che-agents-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT unison-agent Unison Agent diff --git a/assembly/assembly-ide-war/pom.xml b/assembly/assembly-ide-war/pom.xml index e7c28be5700e..794e28316865 100644 --- a/assembly/assembly-ide-war/pom.xml +++ b/assembly/assembly-ide-war/pom.xml @@ -16,7 +16,7 @@ che-assembly-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT assembly-ide-war war diff --git a/assembly/assembly-main/pom.xml b/assembly/assembly-main/pom.xml index 2211fed4b56a..d8e12378a32c 100644 --- a/assembly/assembly-main/pom.xml +++ b/assembly/assembly-main/pom.xml @@ -16,7 +16,7 @@ che-assembly-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT assembly-main pom diff --git a/assembly/assembly-wsagent-server/pom.xml b/assembly/assembly-wsagent-server/pom.xml index 3fa6d0c61735..9c7e920d79d1 100644 --- a/assembly/assembly-wsagent-server/pom.xml +++ b/assembly/assembly-wsagent-server/pom.xml @@ -16,7 +16,7 @@ che-assembly-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT assembly-wsagent-server pom diff --git a/assembly/assembly-wsagent-war/pom.xml b/assembly/assembly-wsagent-war/pom.xml index e4e6941a3099..fa6fa10ffb8a 100644 --- a/assembly/assembly-wsagent-war/pom.xml +++ b/assembly/assembly-wsagent-war/pom.xml @@ -16,7 +16,7 @@ che-assembly-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT assembly-wsagent-war war diff --git a/assembly/assembly-wsmaster-war/pom.xml b/assembly/assembly-wsmaster-war/pom.xml index 3e470558c6f3..755429e561f5 100644 --- a/assembly/assembly-wsmaster-war/pom.xml +++ b/assembly/assembly-wsmaster-war/pom.xml @@ -16,7 +16,7 @@ che-assembly-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT assembly-wsmaster-war war diff --git a/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties b/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties index ed83916ed65b..42bf559e8469 100644 --- a/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties +++ b/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/che/che.properties @@ -255,6 +255,9 @@ che.infra.docker.bootstrapper.installer_timeout_sec=180 # Once servers for one installer available - checks stopped. che.infra.docker.bootstrapper.server_check_period_sec=3 +# URL rewriter. May be overriden in case of single-port mode e.t.c +che.infra.docker.url_rewriter=default + # Enable to perform migration of workpace projects at Che startup. # Projects, which are stored in directories named after their workspace name, # will be stored by workspace id instead. @@ -379,3 +382,7 @@ che.infra.openshift.pvc.access_mode=ReadWriteOnce # then OpenShift infrastructure will reconfigure installer to use first available from this range che.infra.openshift.installer_server_min_port=10000 che.infra.openshift.installer_server_max_port=20000 + +# Single port mode wildcard domain host & port. nip.io is used by default +che.singleport.wildcard_domain.host=NULL +che.singleport.wildcard_domain.port=NULL diff --git a/assembly/pom.xml b/assembly/pom.xml index 5bcdd7386561..f598a0379c42 100644 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -16,12 +16,12 @@ che-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml org.eclipse.che che-assembly-parent - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT pom Che IDE :: Parent diff --git a/core/che-core-api-core/pom.xml b/core/che-core-api-core/pom.xml index 5267f1bbad0d..4eb8c30eea69 100644 --- a/core/che-core-api-core/pom.xml +++ b/core/che-core-api-core/pom.xml @@ -16,7 +16,7 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-core jar diff --git a/core/che-core-api-dto-maven-plugin/pom.xml b/core/che-core-api-dto-maven-plugin/pom.xml index 292f036a03f1..f677fe9ab969 100644 --- a/core/che-core-api-dto-maven-plugin/pom.xml +++ b/core/che-core-api-dto-maven-plugin/pom.xml @@ -16,7 +16,7 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-dto-maven-plugin maven-plugin diff --git a/core/che-core-api-dto/pom.xml b/core/che-core-api-dto/pom.xml index 153f22dfa141..fbf9a7d53a7c 100644 --- a/core/che-core-api-dto/pom.xml +++ b/core/che-core-api-dto/pom.xml @@ -16,7 +16,7 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-dto jar diff --git a/core/che-core-api-model/pom.xml b/core/che-core-api-model/pom.xml index 452ee0a5e2e4..637b5852dff0 100644 --- a/core/che-core-api-model/pom.xml +++ b/core/che-core-api-model/pom.xml @@ -16,7 +16,7 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-model jar diff --git a/core/che-core-db-vendor-h2/pom.xml b/core/che-core-db-vendor-h2/pom.xml index 8e7fba58a614..d1eba09bc86a 100644 --- a/core/che-core-db-vendor-h2/pom.xml +++ b/core/che-core-db-vendor-h2/pom.xml @@ -16,7 +16,7 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-db-vendor-h2 Che Core :: DB :: Vendor H2 diff --git a/core/che-core-db-vendor-postgresql/pom.xml b/core/che-core-db-vendor-postgresql/pom.xml index 98844077cbf9..edf74f2346b5 100644 --- a/core/che-core-db-vendor-postgresql/pom.xml +++ b/core/che-core-db-vendor-postgresql/pom.xml @@ -16,7 +16,7 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-db-vendor-postgresql Che Core :: DB :: Vendor PostgreSQL diff --git a/core/che-core-db/pom.xml b/core/che-core-db/pom.xml index 76afbe8d66b0..b1b7d7172c8e 100644 --- a/core/che-core-db/pom.xml +++ b/core/che-core-db/pom.xml @@ -16,7 +16,7 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-db Che Core :: DB diff --git a/core/che-core-dynamodule-maven-plugin/pom.xml b/core/che-core-dynamodule-maven-plugin/pom.xml index 8aece31a2b6b..8a1ea1710633 100644 --- a/core/che-core-dynamodule-maven-plugin/pom.xml +++ b/core/che-core-dynamodule-maven-plugin/pom.xml @@ -16,7 +16,7 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.che.core che-core-dynamodule-maven-plugin diff --git a/core/che-core-gwt-maven-plugin/pom.xml b/core/che-core-gwt-maven-plugin/pom.xml index ad7e3c96748f..b2cbf006aed9 100644 --- a/core/che-core-gwt-maven-plugin/pom.xml +++ b/core/che-core-gwt-maven-plugin/pom.xml @@ -16,7 +16,7 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-gwt-maven-plugin maven-plugin diff --git a/core/che-core-typescript-dto-maven-plugin/pom.xml b/core/che-core-typescript-dto-maven-plugin/pom.xml index d08f3beb95cc..58dc4a35323f 100644 --- a/core/che-core-typescript-dto-maven-plugin/pom.xml +++ b/core/che-core-typescript-dto-maven-plugin/pom.xml @@ -16,7 +16,7 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.che.core che-core-typescript-dto-maven-plugin diff --git a/core/commons/che-core-commons-annotations/pom.xml b/core/commons/che-core-commons-annotations/pom.xml index cda4a0b04c56..5fb0c5dc8940 100644 --- a/core/commons/che-core-commons-annotations/pom.xml +++ b/core/commons/che-core-commons-annotations/pom.xml @@ -16,7 +16,7 @@ che-core-commons-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-commons-annotations jar diff --git a/core/commons/che-core-commons-auth/pom.xml b/core/commons/che-core-commons-auth/pom.xml index 38c92e2c7e7b..1e96345b2177 100644 --- a/core/commons/che-core-commons-auth/pom.xml +++ b/core/commons/che-core-commons-auth/pom.xml @@ -16,7 +16,7 @@ che-core-commons-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-commons-auth jar diff --git a/core/commons/che-core-commons-inject/pom.xml b/core/commons/che-core-commons-inject/pom.xml index 4a0507234518..4d0558122636 100644 --- a/core/commons/che-core-commons-inject/pom.xml +++ b/core/commons/che-core-commons-inject/pom.xml @@ -16,7 +16,7 @@ che-core-commons-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-commons-inject jar diff --git a/core/commons/che-core-commons-j2ee/pom.xml b/core/commons/che-core-commons-j2ee/pom.xml index 095b08ca4132..e38ab4a050f6 100644 --- a/core/commons/che-core-commons-j2ee/pom.xml +++ b/core/commons/che-core-commons-j2ee/pom.xml @@ -16,7 +16,7 @@ che-core-commons-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-commons-j2ee jar diff --git a/core/commons/che-core-commons-json/pom.xml b/core/commons/che-core-commons-json/pom.xml index 4e33fca5295d..ee353d4ff068 100644 --- a/core/commons/che-core-commons-json/pom.xml +++ b/core/commons/che-core-commons-json/pom.xml @@ -16,7 +16,7 @@ che-core-commons-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-commons-json jar diff --git a/core/commons/che-core-commons-lang/pom.xml b/core/commons/che-core-commons-lang/pom.xml index bc88f1099863..4377e76980d1 100644 --- a/core/commons/che-core-commons-lang/pom.xml +++ b/core/commons/che-core-commons-lang/pom.xml @@ -16,7 +16,7 @@ che-core-commons-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-commons-lang jar diff --git a/core/commons/che-core-commons-logback/pom.xml b/core/commons/che-core-commons-logback/pom.xml index 1f55f93a85c4..f678d31977e6 100644 --- a/core/commons/che-core-commons-logback/pom.xml +++ b/core/commons/che-core-commons-logback/pom.xml @@ -16,7 +16,7 @@ che-core-commons-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-commons-logback jar diff --git a/core/commons/che-core-commons-mail/pom.xml b/core/commons/che-core-commons-mail/pom.xml index 6ee42cb87e17..2b916061c771 100644 --- a/core/commons/che-core-commons-mail/pom.xml +++ b/core/commons/che-core-commons-mail/pom.xml @@ -16,7 +16,7 @@ che-core-commons-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-commons-mail jar diff --git a/core/commons/che-core-commons-schedule/pom.xml b/core/commons/che-core-commons-schedule/pom.xml index 4fcfa8ed20d7..85239dfdc7b3 100644 --- a/core/commons/che-core-commons-schedule/pom.xml +++ b/core/commons/che-core-commons-schedule/pom.xml @@ -16,7 +16,7 @@ che-core-commons-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-commons-schedule jar diff --git a/core/commons/che-core-commons-test/pom.xml b/core/commons/che-core-commons-test/pom.xml index 0a7237143ba8..000b01fd3a83 100644 --- a/core/commons/che-core-commons-test/pom.xml +++ b/core/commons/che-core-commons-test/pom.xml @@ -16,7 +16,7 @@ che-core-commons-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-commons-test jar diff --git a/core/commons/che-core-commons-xml/pom.xml b/core/commons/che-core-commons-xml/pom.xml index 0a5b88b93757..2d535ac8dd72 100644 --- a/core/commons/che-core-commons-xml/pom.xml +++ b/core/commons/che-core-commons-xml/pom.xml @@ -16,7 +16,7 @@ che-core-commons-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-commons-xml jar diff --git a/core/commons/pom.xml b/core/commons/pom.xml index 5e613adcca5a..879b040f5819 100644 --- a/core/commons/pom.xml +++ b/core/commons/pom.xml @@ -16,7 +16,7 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-core-commons-parent diff --git a/core/pom.xml b/core/pom.xml index e5a5659372fe..054e6998ac0d 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -16,12 +16,12 @@ che-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml org.eclipse.che.core che-core-parent - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT pom Che Core Parent diff --git a/dashboard/pom.xml b/dashboard/pom.xml index 0fc25a519ea5..5eab75db78fb 100644 --- a/dashboard/pom.xml +++ b/dashboard/pom.xml @@ -16,12 +16,12 @@ che-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml org.eclipse.che.dashboard che-dashboard-war - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT war Che Dashboard :: Web App 2015 diff --git a/dashboard/src/app/demo-components/demo-components.controller.ts b/dashboard/src/app/demo-components/demo-components.controller.ts index 648efc1e56fe..19903bf6170f 100644 --- a/dashboard/src/app/demo-components/demo-components.controller.ts +++ b/dashboard/src/app/demo-components/demo-components.controller.ts @@ -15,7 +15,10 @@ import { ICheButtonDropdownOtherAction } from '../../components/widget/button-dropdown/che-button-dropdown.directive'; -enum Tab {Font, Panel, Selecter, Icons, Dropdown_button, Buttons, Input, List, Label_container, Stack_selector, Popover} +import {ICheEditModeOverlayConfig} from '../../components/widget/edit-mode-overlay/che-edit-mode-overlay.directive'; +import {CheNotification} from '../../components/notification/che-notification.factory'; + +enum Tab {Font, Panel, Selecter, Icons, Dropdown_button, Buttons, Input, List, Label_container, Stack_selector, Popover, Edit_mode_overlay} /** * This class is handling the controller for the demo of components @@ -24,6 +27,7 @@ enum Tab {Font, Panel, Selecter, Icons, Dropdown_button, Buttons, Input, List, L export class DemoComponentsController { $location: ng.ILocationService; + cheNotification: CheNotification; selectedIndex: number; tab: Object = Tab; @@ -48,12 +52,16 @@ export class DemoComponentsController { otherActions: Array; }; + overlayConfig: ICheEditModeOverlayConfig; + /** * Default constructor that is using resource * @ngInject for Dependency injection */ - constructor($location: ng.ILocationService) { + constructor($location: ng.ILocationService, + cheNotification: CheNotification) { this.$location = $location; + this.cheNotification = cheNotification; const tab = $location.search().tab; if (Tab[tab]) { @@ -114,6 +122,34 @@ export class DemoComponentsController { // number spinner this.number = 0; this.numberIsChanged = 0; + + // edit-mode config + this.overlayConfig = { + visible: true, + disabled: false, + message: { + content: `Information message`, + visible: true + }, + applyButton: { + action: () => { + this.cheNotification.showInfo(`Button 'Apply' was clicked.`); + }, + disabled: false + }, + saveButton: { + action: () => { + this.cheNotification.showInfo(`Button 'Save' was clicked.`); + }, + disabled: false + }, + cancelButton: { + action: () => { + this.cheNotification.showInfo(`Button 'Cancel' was clicked.`); + }, + disabled: false + } + }; } /** diff --git a/dashboard/src/app/demo-components/demo-components.html b/dashboard/src/app/demo-components/demo-components.html index 036bf92db967..8d408c72e14e 100644 --- a/dashboard/src/app/demo-components/demo-components.html +++ b/dashboard/src/app/demo-components/demo-components.html @@ -421,5 +421,59 @@
This is h6 class="btn btn-default">HTML Popover (inline) + + + +
+
+ + +
+ + + +
+ Message + + +
+ + +
+
+ SAVE button + + +
+ + +
+
+ APPLY button + + +
+ + +
+
+ CANCEL button + + +
+ + +
+
+
+ + + +
+ + diff --git a/dashboard/src/app/demo-components/demo-components.styl b/dashboard/src/app/demo-components/demo-components.styl index 9993990c6165..363440809f83 100644 --- a/dashboard/src/app/demo-components/demo-components.styl +++ b/dashboard/src/app/demo-components/demo-components.styl @@ -8,3 +8,14 @@ & + button margin-left 70px outline none !important + + .demo-edit-overlay + fieldset + margin-top 20px + + legend + font-size 1em + font-weight bold + + label + min-width 100px diff --git a/dashboard/src/app/factories/factory-details/information-tab/factory-information/factory-information.html b/dashboard/src/app/factories/factory-details/information-tab/factory-information/factory-information.html index ead2471d009e..0e137ba0e7d7 100644 --- a/dashboard/src/app/factories/factory-details/information-tab/factory-information/factory-information.html +++ b/dashboard/src/app/factories/factory-details/information-tab/factory-information/factory-information.html @@ -177,7 +177,7 @@
diff --git a/dashboard/src/app/factories/list-factories/list-factories.html b/dashboard/src/app/factories/list-factories/list-factories.html index a96b105fff8a..d97f20e571c2 100644 --- a/dashboard/src/app/factories/list-factories/list-factories.html +++ b/dashboard/src/app/factories/list-factories/list-factories.html @@ -11,7 +11,7 @@ --> - + Factories enable workspace automation and are packaged as a consumer-friendly URL. Create new Factories to onboard your team, or integrate with your toolchain. diff --git a/dashboard/src/app/factories/load-factory/load-factory.controller.ts b/dashboard/src/app/factories/load-factory/load-factory.controller.ts index 5f9b2bf1d5ab..5d4f730922b1 100644 --- a/dashboard/src/app/factories/load-factory/load-factory.controller.ts +++ b/dashboard/src/app/factories/load-factory/load-factory.controller.ts @@ -366,7 +366,7 @@ export class LoadFactoryController { .ok('OK') ); } - if (message.eventType === 'ERROR' && message.workspaceId === data.id) { + if (message.eventType === 'FAILED' && message.workspaceId === workspaceId && message.error) { this.getLoadingSteps()[this.getCurrentProgressStep()].hasError = true; // need to show the error this.$mdDialog.show( @@ -398,7 +398,7 @@ export class LoadFactoryController { this.jsonRpcMasterApi.subscribeEnvironmentOutput(workspaceId, environmentOutputHandler); let workspaceStatusHandler = (message: any) => { - if (message.status === 'ERROR' && message.workspaceId === workspaceId) { + if (message.status === 'STOPPED' && message.workspaceId === workspaceId && message.error) { // need to show the error this.$mdDialog.show( this.$mdDialog.alert() diff --git a/dashboard/src/app/navbar/recent-workspaces/recent-workspaces.html b/dashboard/src/app/navbar/recent-workspaces/recent-workspaces.html index 2cab6dde7619..f98e7d2e7990 100644 --- a/dashboard/src/app/navbar/recent-workspaces/recent-workspaces.html +++ b/dashboard/src/app/navbar/recent-workspaces/recent-workspaces.html @@ -39,7 +39,7 @@ - {{navbarRecentWorkspacesController.getWorkspaceName(workspace.id)}} + {{workspace.config.name}}
diff --git a/dashboard/src/app/organizations/organizations.html b/dashboard/src/app/organizations/organizations.html index 902ea8ea2746..fa7b10326b5a 100644 --- a/dashboard/src/app/organizations/organizations.html +++ b/dashboard/src/app/organizations/organizations.html @@ -1,5 +1,5 @@ -Organizations allow +Organizations allow groups of developers to collaborate with private and shared workspaces. Resources and permissions are controlled and allocated within the organization by administrator. diff --git a/dashboard/src/app/workspaces/workspace-details/workspace-details.controller.ts b/dashboard/src/app/workspaces/workspace-details/workspace-details.controller.ts index 36162a7aa57f..9bfbac9d051c 100644 --- a/dashboard/src/app/workspaces/workspace-details/workspace-details.controller.ts +++ b/dashboard/src/app/workspaces/workspace-details/workspace-details.controller.ts @@ -14,6 +14,7 @@ import {CheNotification} from '../../../components/notification/che-notification import {WorkspaceDetailsService} from './workspace-details.service'; import IdeSvc from '../../ide/ide.service'; import {WorkspacesService} from '../workspaces.service'; +import {ICheEditModeOverlayConfig} from '../../../components/widget/edit-mode-overlay/che-edit-mode-overlay.directive'; export interface IInitData { namespaceId: string; @@ -23,9 +24,6 @@ export interface IInitData { const TAB: Array = ['Overview', 'Projects', 'Machines', 'Installers', 'Servers', 'Env_Variables', 'Volumes', 'Config', 'SSH']; -const STOPPING = WorkspaceStatus[WorkspaceStatus.STOPPING]; -const STOPPED = WorkspaceStatus[WorkspaceStatus.STOPPED]; - /** * @ngdoc controller * @name workspaces.workspace.details.controller:WorkspaceDetailsController @@ -35,6 +33,12 @@ const STOPPED = WorkspaceStatus[WorkspaceStatus.STOPPED]; * @author Oleksii Orel */ export class WorkspaceDetailsController { + /** + * Overlay panel configuration. + */ + editOverlayConfig: ICheEditModeOverlayConfig; + workspaceDetails: che.IWorkspace; + workspacesService: WorkspacesService; private $scope: ng.IScope; private $log: ng.ILogService; private $location: ng.ILocationService; @@ -43,23 +47,22 @@ export class WorkspaceDetailsController { private cheWorkspace: CheWorkspace; private ideSvc: IdeSvc; private workspaceDetailsService: WorkspaceDetailsService; - private workspacesService: WorkspacesService; private loading: boolean = false; private selectedTabIndex: number; private namespaceId: string = ''; private workspaceId: string = ''; private workspaceName: string = ''; private newName: string = ''; - private workspaceDetails: che.IWorkspace; private originWorkspaceDetails: any = {}; - private editMode: boolean = false; - private showOverlayMessage: boolean = false; private workspaceImportedRecipe: che.IRecipe; private forms: Map = new Map(); private tab: { [key: string]: string } = {}; - private saving: boolean = false; - private editModeMessage: string = ''; private errorMessage: string = ''; + private tabsValidationTimeout: ng.IPromise; + /** + * There are unsaved changes to apply (with restart) when is't true. + */ + private unsavedChangesToApply: boolean; /** * Default constructor that is using resource injection @@ -95,12 +98,22 @@ export class WorkspaceDetailsController { this.workspaceName = initData.workspaceName; this.workspaceId = initData.workspaceDetails.id; - const action = (workspaceDetails: che.IWorkspace) => { - this.workspaceDetails = angular.copy(this.cheWorkspace.getWorkspaceById(this.originWorkspaceDetails.id)); - this.updateWorkspaceData(workspaceDetails); + const action = (newWorkspaceDetails: che.IWorkspace) => { + if (angular.equals(newWorkspaceDetails, this.originWorkspaceDetails)) { + return; + } + + this.originWorkspaceDetails = angular.copy(newWorkspaceDetails); + if (this.unsavedChangesToApply === false) { + this.workspaceDetails = angular.copy(newWorkspaceDetails); + } + this.checkEditMode(); }; this.cheWorkspace.subscribeOnWorkspaceChange(initData.workspaceDetails.id, action); - this.updateWorkspaceData(initData.workspaceDetails); + + this.originWorkspaceDetails = angular.copy(initData.workspaceDetails); + this.workspaceDetails = angular.copy(initData.workspaceDetails); + this.checkEditMode(); this.updateTabs(); @@ -116,6 +129,34 @@ export class WorkspaceDetailsController { this.cheWorkspace.unsubscribeOnWorkspaceChange(this.workspaceId, action); searchDeRegistrationFn(); }); + + this.editOverlayConfig = { + visible: false, + disabled: false, + message: { + content: this.getOverlayMessage(), + visible: false + }, + applyButton: { + action: () => { + this.applyConfigChanges(); + }, + disabled: this.workspaceDetailsService.getRestartToApply(this.workspaceId) === false, + title: 'Apply' + }, + saveButton: { + action: () => { + this.saveConfigChanges(); + }, + title: 'Save', + disabled: false + }, + cancelButton: { + action: () => { + this.cancelConfigChanges(); + } + } + }; } /** @@ -124,13 +165,7 @@ export class WorkspaceDetailsController { * @returns {boolean} */ get isSupported(): boolean { - const isSupported = this.workspacesService.isSupported(this.workspaceDetails); - if (!isSupported) { - this.showOverlayMessage = true; - this.editModeMessage = `Current infrastructure doesn't support this workspace recipe type.`; - } - - return isSupported; + return this.workspacesService.isSupported(this.workspaceDetails); } /** @@ -188,21 +223,6 @@ export class WorkspaceDetailsController { } } - /** - * Prepare workspaces data. - * - * @param workspaceDetails {che.IWorkspace} - */ - updateWorkspaceData(workspaceDetails: che.IWorkspace): void { - this.originWorkspaceDetails = angular.copy(workspaceDetails); - this.checkEditMode(); - if (this.workspaceDetails && this.editMode) { - return; - } - this.workspaceDetails = angular.copy(workspaceDetails); - this.workspaceDetailsService.publishWorkspaceChange(workspaceDetails); - } - /** * Returns current status of workspace. * @@ -239,6 +259,9 @@ export class WorkspaceDetailsController { if (!config) { return; } + if (angular.equals(this.workspaceDetails.config, config)) { + return; + } if (this.newName !== config.name) { this.newName = config.name; @@ -251,88 +274,193 @@ export class WorkspaceDetailsController { this.checkEditMode(); } + /** + * This method checks form validity on each tab and returns true if + * all forms are valid. + * + * @returns {string[]} list of names of failed tabs. + */ + checkForFailedTabs(): string[] { + const failTabs = []; + const tabs = Object.keys(this.tab).filter((tabKey: string) => { + return !isNaN(parseInt(tabKey, 10)); + }); + tabs.forEach((tabKey: string) => { + if (this.checkFormsNotValid(tabKey)) { + failTabs.push(this.tab[tabKey]); + } + }); + + return failTabs; + } + + /** + * Builds and returns message for edit-mode-overlay component. + * + * @param {string[]=} failedTabs list of names of failed tabs. + * @returns {string} + */ + getOverlayMessage(failedTabs?: string[]): string { + if (this.isSupported === false) { + return `Current infrastructure doesn't support this workspace recipe type.`; + } + + if (failedTabs && failedTabs.length > 0) { + const url = this.$location.absUrl().split('?')[0]; + let message = ` Impossible to save and apply the configuration. Errors in `; + message += failedTabs.map((tab: string) => { + return `${tab}`; + }).join(', '); + + return message; + } + + return 'Your workspace will be restarted if you click Apply button.'; + } + + /** + * Updates config of edit-mode-overlay component. + * + * @param {boolean} configIsDiffer true if config is differ + * @param {string[]=} failedTabs list of names of failed tabs. + */ + updateEditModeOverlayConfig(configIsDiffer: boolean, failedTabs?: string[]): void { + const formIsValid = !failedTabs || failedTabs.length === 0; + + // panel + this.editOverlayConfig.disabled = !formIsValid || this.loading; + this.editOverlayConfig.visible = configIsDiffer || this.workspaceDetailsService.getRestartToApply(this.workspaceId); + + // 'save' button + this.editOverlayConfig.saveButton.disabled = !this.isSupported || !configIsDiffer; + + // 'apply' button + this.editOverlayConfig.applyButton.disabled = !this.isSupported + || (!this.unsavedChangesToApply && !this.workspaceDetailsService.getRestartToApply(this.workspaceId)); + + // 'cancel' button + this.editOverlayConfig.cancelButton.disabled = !configIsDiffer; + + // message content + this.editOverlayConfig.message.content = this.getOverlayMessage(failedTabs); + + // message visibility + this.editOverlayConfig.message.visible = !this.isSupported + || failedTabs.length > 0 + || this.unsavedChangesToApply + || this.workspaceDetailsService.getRestartToApply(this.workspaceId); + } + /** * Checks editing mode for workspace config. */ - checkEditMode(): void { + checkEditMode(restartToApply?: boolean): ng.IPromise { if (!this.originWorkspaceDetails || !this.workspaceDetails) { return; } - this.editMode = !angular.equals(this.originWorkspaceDetails.config, this.workspaceDetails.config); - if (this.editMode === false) { - this.editModeMessage = ''; - this.showOverlayMessage = false; - return; - } - this.workspaceDetailsService.publishWorkspaceChange(this.workspaceDetails); - this.editModeMessage = 'Changes will be applied and workspace restarted'; - const needRunningStatus = this.workspaceDetailsService.needRunningToUpdate(); - if (needRunningStatus) { - this.showOverlayMessage = true; - } else { - const statusStr = this.getWorkspaceStatus(); - this.showOverlayMessage = [STOPPED, STOPPING].indexOf(statusStr) === -1; + + if (this.tabsValidationTimeout) { + this.$timeout.cancel(this.tabsValidationTimeout); } - // check for fail tab. - this.$timeout(() => { - const failTabs = []; - const tabs = Object.keys(this.tab).filter((tabKey: string) => { - return !isNaN(parseInt(tabKey, 10)); - }); - tabs.forEach((tabKey: string) => { - if (this.checkFormsNotValid(tabKey)) { - failTabs.push(this.tab[tabKey]); - } - }); - if (failTabs.length) { - const url = this.$location.absUrl().split('?')[0]; - this.editModeMessage = ` Impossible to save and apply the configuration. Errors in `; - this.editModeMessage += failTabs.map((tab: string) => { - return `${tab}`; - }).join(', '); - this.showOverlayMessage = true; - return; + + return this.tabsValidationTimeout = this.$timeout(() => { + const configIsDiffer = !angular.equals(this.originWorkspaceDetails.config, this.workspaceDetails.config); + + // the workspace should be restarted only if its status is STARTING or RUNNING + if (this.getWorkspaceStatus() === WorkspaceStatus[WorkspaceStatus.STARTING] || this.getWorkspaceStatus() === WorkspaceStatus[WorkspaceStatus.RUNNING]) { + this.unsavedChangesToApply = configIsDiffer && (this.unsavedChangesToApply || !!restartToApply); + } else { + this.unsavedChangesToApply = false; } + + // check for failed tabs + const failedTabs = this.checkForFailedTabs(); + // update overlay + this.updateEditModeOverlayConfig(configIsDiffer, failedTabs); + // publish changes + this.workspaceDetailsService.publishWorkspaceChange(this.workspaceDetails); }, 500); } /** - * Updates workspace config changes. + * Applies workspace config changes and restarts the workspace. */ - saveWorkspace(): void { - this.editMode = false; - this.showOverlayMessage = false; + applyConfigChanges(): void { + this.editOverlayConfig.disabled = true; - this.saving = true; this.loading = true; this.$scope.$broadcast('edit-workspace-details', {status: 'saving'}); - this.workspaceDetailsService.applyChanges(this.originWorkspaceDetails, this.workspaceDetails).then((data: any) => { - this.cheNotification.showInfo('Workspace updated.'); - this.$scope.$broadcast('edit-workspace-details', {status: 'saved'}); - this.saving = false; - this.cheWorkspace.fetchWorkspaceDetails(this.originWorkspaceDetails.id).then(() => { - this.$location.path('/workspace/' + this.namespaceId + '/' + this.workspaceDetails.config.name).search({tab: this.tab[this.selectedTabIndex]}); - }).finally(() => { + this.workspaceDetailsService.applyConfigChanges(this.workspaceDetails) + .then(() => { + this.workspaceDetailsService.removeRestartToApply(this.workspaceId); + this.unsavedChangesToApply = false; + + this.cheNotification.showInfo('Workspace updated.'); + this.$scope.$broadcast('edit-workspace-details', {status: 'saved'}); + + return this.cheWorkspace.fetchWorkspaceDetails(this.originWorkspaceDetails.id).then(() => { + this.$location.path('/workspace/' + this.namespaceId + '/' + this.workspaceDetails.config.name).search({tab: this.tab[this.selectedTabIndex]}); + }); + }) + .catch((error: any) => { + this.$scope.$broadcast('edit-workspace-details', {status: 'failed'}); + this.cheNotification.showError('Update workspace failed.', error); + return this.checkEditMode(true); + }) + .finally(() => { this.loading = false; }); - }, (error: any) => { - this.$scope.$broadcast('edit-workspace-details', {status: 'failed'}); - this.cheNotification.showError('Update workspace failed.', error); - this.checkEditMode(); - this.saving = false; - this.loading = false; - }); + } + + /** + * Updates workspace with new config. + */ + saveConfigChanges(): void { + this.editOverlayConfig.disabled = true; + + this.loading = true; + this.$scope.$broadcast('edit-workspace-details', {status: 'saving'}); + + this.workspaceDetailsService.saveConfigChanges(this.workspaceDetails) + .then(() => { + if (this.unsavedChangesToApply) { + this.workspaceDetailsService.addRestartToApply(this.workspaceId); + } else { + this.workspaceDetailsService.removeRestartToApply(this.workspaceId); + } + this.unsavedChangesToApply = false; + + this.cheNotification.showInfo('Workspace updated.'); + this.$scope.$broadcast('edit-workspace-details', {status: 'saved'}); + + return this.cheWorkspace.fetchWorkspaceDetails(this.originWorkspaceDetails.id).then(() => { + this.$location.path('/workspace/' + this.namespaceId + '/' + this.workspaceDetails.config.name).search({tab: this.tab[this.selectedTabIndex]}); + }); + }) + .catch((error: any) => { + this.$scope.$broadcast('edit-workspace-details', {status: 'failed'}); + const errorMessage = 'Cannot update workspace configuration.'; + this.cheNotification.showError(error && error.data && error.data.message ? error.data.message : errorMessage); + }) + .finally(() => { + this.loading = false; + + return this.checkEditMode(); + }); } /** * Cancels workspace config changes that weren't stored */ cancelConfigChanges(): void { + this.editOverlayConfig.disabled = true; + this.unsavedChangesToApply = false; + this.workspaceDetails = angular.copy(this.originWorkspaceDetails); - this.workspaceDetailsService.publishWorkspaceChange(this.workspaceDetails); - this.editMode = false; + + this.checkEditMode(); this.$scope.$broadcast('edit-workspace-details', {status: 'cancelled'}); } diff --git a/dashboard/src/app/workspaces/workspace-details/workspace-details.directive.spec.ts b/dashboard/src/app/workspaces/workspace-details/workspace-details.directive.spec.ts new file mode 100644 index 000000000000..38a1437a8c27 --- /dev/null +++ b/dashboard/src/app/workspaces/workspace-details/workspace-details.directive.spec.ts @@ -0,0 +1,625 @@ +/* + * Copyright (c) 2015-2018 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +'use strict'; + +import {CheHttpBackend} from '../../../components/api/test/che-http-backend'; +import {WorkspaceDetailsController} from './workspace-details.controller'; +import {CheWorkspace, WorkspaceStatus} from '../../../components/api/workspace/che-workspace.factory'; + +/** + * Test of the WorkspaceDetailsController + * + * @author Oleksii Kurinnyi + */ +describe(`WorkspaceDetailsController >`, () => { + + /** + * Controller to test. + */ + let controller: WorkspaceDetailsController; + + let cheHttpBackend: CheHttpBackend; + + let $httpBackend: ng.IHttpBackendService; + + let $compile: ng.ICompileService; + + let $timeout: ng.ITimeoutService; + + let $q: ng.IQService; + + let $scope: ng.IScope; + + let compiledDirective; + + let cheWorkspace: CheWorkspace; + let newWorkspace: che.IWorkspace; // the updated workspace + + function getWorkspace(): che.IWorkspace { + return { + 'namespace': 'che', + 'status': 'RUNNING', + 'config': { + 'environments': { + 'default': { + 'recipe': {'type': 'dockerimage', 'content': 'eclipse/ubuntu_jdk8'}, + 'machines': { + 'dev-machine': { + 'env': {}, + 'volumes': {}, + 'installers': ['org.eclipse.che.exec', 'org.eclipse.che.terminal', 'org.eclipse.che.ws-agent'], + 'servers': { + 'tomcat8-debug': {'protocol': 'http', 'port': '8000'}, + 'codeserver': {'protocol': 'http', 'port': '9876'}, + 'tomcat8': {'protocol': 'http', 'port': '8080'} + }, + 'attributes': {'memoryLimitBytes': '2147483648'} + } + } + } + }, 'projects': [], 'commands': [], 'defaultEnv': 'default', 'name': 'wksp-98cs' + }, + 'temporary': false, + 'links': { + 'self': 'http://localhost:8080/api/workspace/workspacezbkov1e8qcm00dli', + 'ide': 'http://localhost:8080/che/wksp-98cs' + }, + 'id': 'workspacezbkov1e8qcm00dli', + 'attributes': {'created': 1516282666658, 'stackId': 'blank-default'} + }; + } + + /** + * Setup module + */ + beforeEach(() => { + angular.mock.module('userDashboard'); + }); + + beforeEach(() => { + const workspace = getWorkspace(); + + angular.module('workspaceDetailsMock', []) + // create a directive to test + .directive('workspaceDetails', function() { + return { + restrict: 'E', + scope: {}, + controller: 'WorkspaceDetailsController', + controllerAs: 'workspaceDetailsController', + templateUrl: 'app/workspaces/workspace-details/workspace-details.html' + }; + }) + .service('initData', function() { + return { + namespaceId: workspace.namespace, + workspaceName: workspace.config.name, + workspaceDetails: workspace + }; + }) + .service('workspacesService', function() { + this.isSupported = () => { return true; }; + }) + .service('$route', function() { + this.current = { + params: { + tab: 'Overview' + } + }; + }) + .service('$location', function () { + this.path = (path: string) => { + console.log('$location.path: ', path); + return this; + }; + this.search = () => { + return { + tab: 'Overview' + }; + }; + }) + .service('$log', function () { + this.log = this.warn = (message: string) => { + console.log('$log.log: ', message); + }; + }) + .service('cheNotification', function () { + this.showInfo = (message: string): void => { + console.log('cheNotification.info: ', message); + }; + }) + .service('ideSvc', function () { + return; + }) + .service('namespaceSelectorSvc', function () { + this.getNamespaceId = () => { + return workspace.namespace; + }; + }) + .service('cheWorkspace', function () { + const subscriptions: any = {}; + this.fetchWorkspaceDetails = (workspaceId: string): ng.IPromise => { + if (subscriptions[workspaceId]) { + subscriptions[workspaceId].forEach((action: Function) => action(newWorkspace)); + } + return $q.when(); + }; + this.subscribeOnWorkspaceChange = (workspaceId: string, action: Function): void => { + if (!subscriptions[workspaceId]) { + subscriptions[workspaceId] = []; + } + subscriptions[workspaceId].push(action); + }; + this.getWorkspaceById = (workspaceId: string): che.IWorkspace => { + return workspace; + }; + this.startWorkspace = (workspaceId: string): ng.IPromise => { + const startingPromise = $q.when().then(() => { + workspace.status = WorkspaceStatus[WorkspaceStatus.STARTING]; + }); + startingPromise.then(() => { + return $timeout(() => { + workspace.status = WorkspaceStatus[WorkspaceStatus.RUNNING]; + }); + }); + return startingPromise; + }; + this.stopWorkspace = (workspaceId: string): ng.IPromise => { + const stoppingPromise = $q.when().then(() => { + workspace.status = WorkspaceStatus[WorkspaceStatus.STOPPING]; + }); + stoppingPromise.then(() => { + return $timeout(() => { + workspace.status = WorkspaceStatus[WorkspaceStatus.STOPPED]; + }); + }); + return stoppingPromise; + }; + this.fetchStatusChange = (workspaceId: string, status: string): ng.IPromise => { + workspace.status = status; + return $q.when(); + }; + this.updateWorkspace = (workspaceId: string, data: che.IWorkspace): ng.IPromise => { + if (subscriptions[workspaceId]) { + subscriptions[workspaceId].forEach((action: Function) => action(newWorkspace)); + } + return $q.when(workspace); + }; + this.getSupportedRecipeTypes = () => { + return ['dockerimage', 'dockerfile', 'compose']; + }; + }) + // terminal directives which prevent to execute an original ones + .directive('mdTab', function () { + // this directive produces timeout task which cannot be flushed + return { priority: 100000, terminal: true, restrict: 'E' }; + }) + .directive('cheWorkspaceConfigImport', function () { + return { priority: 100000, terminal: true, restrict: 'E' }; + }) + .directive('cheMachineVolumes', function () { + return { priority: 100000, terminal: true, restrict: 'E' }; + }) + .directive('cheEnvVariables', function () { + return { priority: 100000, terminal: true, restrict: 'E' }; + }) + .directive('cheMachineServers', function () { + return { priority: 100000, terminal: true, restrict: 'E' }; + }) + .directive('cheMachineAgents', function () { + return { priority: 100000, terminal: true, restrict: 'E' }; + }) + .directive('cheMachineSelector', function () { + return { priority: 100000, terminal: true, restrict: 'E' }; + }) + .directive('workspaceMachines', function () { + return { priority: 100000, terminal: true, restrict: 'E' }; + }) + .directive('workspaceDetailsProjects', function () { + return { priority: 100000, terminal: true, restrict: 'E' }; + }) + .directive('workspaceDetailsSsh', function () { + return { priority: 100000, terminal: true, restrict: 'E' }; + }); + + angular.mock.module('workspaceDetailsMock'); + }); + + beforeEach(inject((_$rootScope_: ng.IRootScopeService, + _$compile_: ng.ICompileService, + _cheHttpBackend_: CheHttpBackend, + _$timeout_: ng.ITimeoutService, + _$q_: ng.IQService, + _cheWorkspace_: CheWorkspace) => { + $scope = _$rootScope_.$new(); + $compile = _$compile_; + $timeout = _$timeout_; + $q = _$q_; + cheWorkspace = _cheWorkspace_; + cheHttpBackend = _cheHttpBackend_; + $httpBackend = cheHttpBackend.getHttpBackend(); + + cheHttpBackend.setup(); + $httpBackend.flush(); + })); + + function compileDirective(): void { + compiledDirective = $compile(angular.element( + `` + ))($scope); + $scope.$digest(); + $timeout.flush(); + controller = compiledDirective.controller('workspaceDetails'); + } + + afterEach(() => { + $timeout.verifyNoPendingTasks(); + }); + + /** + * Check assertion after the test + */ + afterEach(() => { + $httpBackend.verifyNoOutstandingExpectation(); + $httpBackend.verifyNoOutstandingRequest(); + }); + + describe(`overflow panel >`, () => { + + function getOverlayPanelEl(): ng.IAugmentedJQuery { + return compiledDirective.find('.che-edit-mode-overlay'); + } + function getSaveButton(): ng.IAugmentedJQuery { + return compiledDirective.find('.save-button button'); + } + function getApplyButton(): ng.IAugmentedJQuery { + return compiledDirective.find('.apply-button button'); + } + function getCancelButton(): ng.IAugmentedJQuery { + return compiledDirective.find('.cancel-button button'); + } + + it(`should be hidden initially >`, () => { + compileDirective(); + expect(getOverlayPanelEl().length).toEqual(0); + }); + + describe(`when config is changed >`, () => { + + describe(`and workspace is RUNNING >`, () => { + + describe(`and restart is not necessary > `, () => { + + beforeEach(() => { + compileDirective(); + + controller.workspaceDetails.config.name = 'wksp-new-name'; + controller.checkEditMode(false); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overflow panel should be shown >`, () => { + expect(getOverlayPanelEl().length).toEqual(1); + }); + + it(`the saveButton should be enabled >`, () => { + expect(getSaveButton().attr('disabled')).toBeFalsy(); + }); + + it(`the applyButton should be disabled >`, () => { + expect(getApplyButton().attr('disabled')).toBeTruthy(); + }); + + it(`the cancelButton should be enabled >`, () => { + expect(getCancelButton().attr('disabled')).toBeFalsy(); + }); + + describe(`and cancelButton is clicked >`, () => { + + beforeEach(() => { + getCancelButton().click(); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overlay panel should be hidden >`, () => { + expect(getOverlayPanelEl().length).toEqual(0); + }); + + }); + + describe(`and saveButton is clicked >`, () => { + + beforeEach(() => { + // set new workspace to publish + newWorkspace = angular.copy(controller.workspaceDetails); + + getSaveButton().click(); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overlay panel should be hidden >`, () => { + expect(getOverlayPanelEl().length).toEqual(0); + }); + + }); + + }); + + describe(`and restart is necessary >`, () => { + + beforeEach(() => { + compileDirective(); + + controller.workspaceDetails.config.name = 'wksp-new-name'; + controller.checkEditMode(true); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overflow panel should be shown >`, () => { + expect(getOverlayPanelEl().length).toEqual(1); + }); + + it(`the saveButton should be enabled >`, () => { + expect(getSaveButton().attr('disabled')).toBeFalsy(); + }); + + it(`the applyButton should be enabled >`, () => { + expect(getApplyButton().attr('disabled')).toBeFalsy(); + }); + + it(`the cancelButton should be enabled >`, () => { + expect(getCancelButton().attr('disabled')).toBeFalsy(); + }); + + describe(`and cancelButton is clicked >`, () => { + + beforeEach(() => { + getCancelButton().click(); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overlay panel should be hidden >`, () => { + expect(getOverlayPanelEl().length).toEqual(0); + }); + + }); + + describe(`and saveButton is clicked >`, () => { + + beforeEach(() => { + getSaveButton().click(); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overlay panel should remain visible >`, () => { + expect(getOverlayPanelEl().length).toEqual(1); + }); + + it(`the saveButton should be disabled >`, () => { + expect(getSaveButton().attr('disabled')).toBeTruthy(); + }); + + it(`the applyButton should be enabled >`, () => { + expect(getApplyButton().attr('disabled')).toBeFalsy(); + }); + + it(`the cancelButton should be disabled >`, () => { + expect(getCancelButton().attr('disabled')).toBeTruthy(); + }); + + }); + + describe(`and applyButton is clicked >`, () => { + + beforeEach(() => { + // set new workspace to publish + newWorkspace = angular.copy(controller.workspaceDetails); + + getApplyButton().click(); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overlay panel should be hidden >`, () => { + expect(getOverlayPanelEl().length).toEqual(0); + }); + + }); + + }); + + }); + + describe(`and workspace is STOPPED >`, () => { + + beforeEach(() => { + compileDirective(); + + controller.stopWorkspace(); + controller.workspaceDetails.config.name = 'wksp-new-name'; + }); + + describe(`and restart is not necessary >`, () => { + + beforeEach(() => { + controller.checkEditMode(false); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overflow panel should be shown >`, () => { + expect(getOverlayPanelEl().length).toEqual(1); + }); + + it(`the saveButton should be enabled >`, () => { + expect(getSaveButton().attr('disabled')).toBeFalsy(); + }); + + it(`the applyButton should be disabled >`, () => { + expect(getApplyButton().attr('disabled')).toBeTruthy(); + }); + + it(`the cancelButton should be enabled >`, () => { + expect(getCancelButton().attr('disabled')).toBeFalsy(); + }); + + describe(`and cancelButton is clicked >`, () => { + + beforeEach(() => { + getCancelButton().click(); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overlay panel should be hidden >`, () => { + expect(getOverlayPanelEl().length).toEqual(0); + }); + + }); + + describe(`and saveButton is clicked >`, () => { + + beforeEach(() => { + // set new workspace to publish + newWorkspace = angular.copy(controller.workspaceDetails); + + getSaveButton().click(); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overlay panel should be hidden >`, () => { + expect(getOverlayPanelEl().length).toEqual(0); + }); + + }); + + }); + + describe(`and restart is necessary >`, () => { + + beforeEach(() => { + controller.checkEditMode(true); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overflow panel should be shown >`, () => { + expect(getOverlayPanelEl().length).toEqual(1); + }); + + it(`the saveButton should be enabled >`, () => { + expect(getSaveButton().attr('disabled')).toBeFalsy(); + }); + + it(`the applyButton should be disabled >`, () => { + expect(getApplyButton().attr('disabled')).toBeTruthy(); + }); + + it(`the cancelButton should be enabled >`, () => { + expect(getCancelButton().attr('disabled')).toBeFalsy(); + }); + + describe(`and cancelButton is clicked >`, () => { + + beforeEach(() => { + getCancelButton().click(); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overlay panel should be hidden >`, () => { + expect(getOverlayPanelEl().length).toEqual(0); + }); + + }); + + describe(`and saveButton is clicked >`, () => { + + beforeEach(() => { + // set new workspace to publish + newWorkspace = angular.copy(controller.workspaceDetails); + + getSaveButton().click(); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overlay panel should be hidden >`, () => { + expect(getOverlayPanelEl().length).toEqual(0); + }); + + }); + + }); + + }); + + describe(`and workspace recipe type is not supported >`, () => { + + beforeEach(() => { + compileDirective(); + + controller.workspacesService.isSupported = jasmine.createSpy('workspaceDetailsController.isSupported') + .and + .callFake(() => { + return false; + }); + + controller.workspaceDetails.config.name = 'wksp-new-name'; + controller.checkEditMode(false); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overflow panel should be shown >`, () => { + expect(getOverlayPanelEl().length).toEqual(1); + }); + + it(`the saveButton should be disabled >`, () => { + expect(getSaveButton().attr('disabled')).toBeTruthy(); + }); + + it(`the applyButton should be disabled >`, () => { + expect(getApplyButton().attr('disabled')).toBeTruthy(); + }); + + it(`the cancelButton should be enabled >`, () => { + expect(getCancelButton().attr('disabled')).toBeFalsy(); + }); + + describe(`and cancelButton is clicked >`, () => { + + beforeEach(() => { + getCancelButton().click(); + $scope.$digest(); + $timeout.flush(); + }); + + it(`the overlay panel should be hidden >`, () => { + expect(getOverlayPanelEl().length).toEqual(0); + }); + + }); + + }); + + }); + + }); + +}); diff --git a/dashboard/src/app/workspaces/workspace-details/workspace-details.html b/dashboard/src/app/workspaces/workspace-details/workspace-details.html index 988f0a3c7ef7..a99cb762f9ab 100644 --- a/dashboard/src/app/workspaces/workspace-details/workspace-details.html +++ b/dashboard/src/app/workspaces/workspace-details/workspace-details.html @@ -12,8 +12,7 @@ button-disabled="workspaceDetailsController.isSupported===false" on-stop-workspace="workspaceDetailsController.stopWorkspace()" on-run-workspace="workspaceDetailsController.runWorkspace()"> - @@ -40,7 +39,7 @@ @@ -54,7 +53,7 @@ + projects-on-change="workspaceDetailsController.checkEditMode(true)"> @@ -65,7 +64,7 @@ + on-change="workspaceDetailsController.checkEditMode(true)"> @@ -77,7 +76,7 @@ + on-change="workspaceDetailsController.checkEditMode(true)"> @@ -93,7 +92,7 @@ + on-change="workspaceDetailsController.checkEditMode(true)"> @@ -109,7 +108,7 @@ + on-change="workspaceDetailsController.checkEditMode(true)"> @@ -125,7 +124,7 @@ + on-change="workspaceDetailsController.checkEditMode(true)"> @@ -176,9 +175,4 @@ - + diff --git a/dashboard/src/app/workspaces/workspace-details/workspace-details.service.ts b/dashboard/src/app/workspaces/workspace-details/workspace-details.service.ts index 8c546315c48d..426a918d917a 100644 --- a/dashboard/src/app/workspaces/workspace-details/workspace-details.service.ts +++ b/dashboard/src/app/workspaces/workspace-details/workspace-details.service.ts @@ -72,6 +72,10 @@ export class WorkspaceDetailsService { private pages: IPage[]; private sections: ISection[]; + /** + * This workspaces should be restarted for new config to be applied. + */ + private restartToApply: string[] = []; /** * Default constructor that is using resource @@ -204,122 +208,68 @@ export class WorkspaceDetailsService { } /** - * Returns true if workspace has to be running to apply changes. + * Applies changes to the workspace config with workspace restarting. * - * @return {boolean} + * @param {che.IWorkspace} workspace + * @returns {ng.IPromise} */ - needRunningToUpdate(): boolean { - return this.workspaceDetailsProjectsService.getProjectTemplates().length > 0 || this.workspaceDetailsProjectsService.getProjectNamesToDelete().length > 0; + applyConfigChanges(workspace: che.IWorkspace): ng.IPromise { + return this.$q.when() + .then(() => { + if (this.getWorkspaceStatus(workspace.id) !== WorkspaceStatus[WorkspaceStatus.STOPPED]) { + this.stopWorkspace(workspace.id); + } + return this.cheWorkspace.fetchStatusChange(workspace.id, WorkspaceStatus[WorkspaceStatus.STOPPED]); + }) + .then(() => { + this.removeRestartToApply(workspace.id); + + return this.saveConfigChanges(workspace); + }) + .then(() => { + this.cheWorkspace.startWorkspace(workspace.id, workspace.config.defaultEnv); + return this.cheWorkspace.fetchStatusChange(workspace.id, WorkspaceStatus[WorkspaceStatus.RUNNING]); + }) + .catch((error: any) => { + this.$log.error(error); + return this.$q.reject(error); + }); } /** - * Updates workspace with config's changes, creates and/or removes projects. + * Add workspace ID to the list of workspaces that should be restarted. * - * @param {che.IWorkspace} oldWorkspace old workspace details - * @param {che.IWorkspace} newWorkspace new workspace details - * @return {angular.IPromise} + * @param {string} workspaceId */ - applyChanges(oldWorkspace: che.IWorkspace, newWorkspace: che.IWorkspace): ng.IPromise { - if (angular.equals(oldWorkspace.config, newWorkspace.config)) { - return this.$q.when(); + addRestartToApply(workspaceId: string): void { + if (this.restartToApply.indexOf(workspaceId) === -1) { + this.restartToApply.push(workspaceId); } + } - const initStatus = oldWorkspace && oldWorkspace.status; - - const oldConfig = angular.copy(oldWorkspace.config); - delete oldConfig.projects; - const newConfig = angular.copy(newWorkspace.config); - delete newConfig.projects; - - const projectTemplatesToAdd = this.workspaceDetailsProjectsService.getProjectTemplates(), - hasProjectsToAdd = projectTemplatesToAdd.length > 0, - projectNamesToDelete = this.workspaceDetailsProjectsService.getProjectNamesToDelete(), - hasProjectsToDelete = projectNamesToDelete.length > 0, - hasConfigChanges = !angular.equals(newConfig, oldConfig); - - return this.$q.when().then(() => { - // update config - if (!projectTemplatesToAdd && !hasConfigChanges) { - return this.$q.when(); - } - - return this.$q.when().then(() => { - /* Stop workspace */ - const status = this.getWorkspaceStatus(newWorkspace.id); - - if (WorkspaceStatus[status] === WorkspaceStatus.STARTING || WorkspaceStatus[status] === WorkspaceStatus.RUNNING) { - this.stopWorkspace(newWorkspace.id); - return this.cheWorkspace.fetchStatusChange(newWorkspace.id, WorkspaceStatus[WorkspaceStatus.STOPPED]); - } - - if (WorkspaceStatus[status] === WorkspaceStatus.STOPPING) { - return this.cheWorkspace.fetchStatusChange(newWorkspace.id, WorkspaceStatus[WorkspaceStatus.STOPPED]); - } - - return this.$q.when(); - }).then(() => { - return this.applyConfigChanges(newWorkspace); - }).then(() => { - // restore init status - if (WorkspaceStatus[initStatus] === WorkspaceStatus.STARTING || WorkspaceStatus[initStatus] === WorkspaceStatus.RUNNING) { - this.cheWorkspace.startWorkspace(newWorkspace.id, newWorkspace.config.defaultEnv); - return this.cheWorkspace.fetchStatusChange(newWorkspace.id, WorkspaceStatus[WorkspaceStatus.RUNNING]).then(() => { - return this.cheWorkspace.fetchWorkspaceDetails(newWorkspace.id); - }); - } - }); - }).then(() => { - if (!hasProjectsToAdd && !hasProjectsToDelete) { - return this.$q.when(); - } - - return this.$q.when().then(() => { - const status = this.getWorkspaceStatus(newWorkspace.id); - - if (WorkspaceStatus[status] === WorkspaceStatus.RUNNING) { - return this.$q.when(); - } - - if (WorkspaceStatus[status] === WorkspaceStatus.STARTING) { - return this.cheWorkspace.fetchStatusChange(newWorkspace.id, WorkspaceStatus[WorkspaceStatus.RUNNING]); - } - - this.cheWorkspace.startWorkspace(newWorkspace.id, newWorkspace.config.defaultEnv); - return this.cheWorkspace.fetchStatusChange(newWorkspace.id, WorkspaceStatus[WorkspaceStatus.RUNNING]).then(() => { - return this.cheWorkspace.fetchWorkspaceDetails(newWorkspace.id); - }); - }).then(() => { - // delete projects - if (!hasProjectsToDelete) { - return this.$q.when(); - } - - return this.workspaceDetailsProjectsService.deleteSelectedProjects(newWorkspace.id, projectNamesToDelete); - }).then(() => { - // add projects - if (!hasProjectsToAdd) { - return this.$q.when(); - } + /** + * Remove workspace ID from the list of workspaces that should be restarted. + * + * @param {string} workspaceId + */ + removeRestartToApply(workspaceId: string): void { + const index = this.restartToApply.indexOf(workspaceId); + if (index === -1) { + return; + } + this.restartToApply.splice(index, 1); + } - // add commands - return this.createWorkspaceSvc.addProjectCommands(newWorkspace.config, projectTemplatesToAdd); - }).then(() => { - if (WorkspaceStatus[initStatus] === WorkspaceStatus.STOPPED || WorkspaceStatus[initStatus] === WorkspaceStatus.STOPPING) { - // stop workspace - const status = this.getWorkspaceStatus(newWorkspace.id); - - if (WorkspaceStatus[status] === WorkspaceStatus.STARTING || WorkspaceStatus[status] === WorkspaceStatus.RUNNING) { - this.stopWorkspace(newWorkspace.id); - return this.cheWorkspace.fetchStatusChange(newWorkspace.id, WorkspaceStatus[WorkspaceStatus.STOPPED]); - } - - if (WorkspaceStatus[status] === WorkspaceStatus.STOPPING) { - return this.cheWorkspace.fetchStatusChange(newWorkspace.id, WorkspaceStatus[WorkspaceStatus.STOPPED]); - } - } - return this.$q.when(); - }); - }); + /** + * Returns true if workspace ID belongs to the list of + * workspaces that should be restarted. + * + * @param {string} workspaceId + * @returns {boolean} + */ + getRestartToApply(workspaceId: string): boolean { + const index = this.restartToApply.indexOf(workspaceId); + return index !== -1; } /** @@ -328,13 +278,23 @@ export class WorkspaceDetailsService { * @param {che.IWorkspace} workspace new workspace details * @return {angular.IPromise} */ - applyConfigChanges(workspace: che.IWorkspace): ng.IPromise { + saveConfigChanges(workspace: che.IWorkspace): ng.IPromise { delete workspace.links; - return this.cheWorkspace.updateWorkspace(workspace.id, workspace).catch((error: any) => { - this.$log.error(error); - return this.$q.reject(error); - }); + const projectNamesToDelete = this.workspaceDetailsProjectsService.getProjectNamesToDelete(), + hasProjectsToDelete = projectNamesToDelete.length > 0; + + return this.cheWorkspace.updateWorkspace(workspace.id, workspace) + .then(() => { + if (!hasProjectsToDelete) { + return this.$q.when(); + } + return this.workspaceDetailsProjectsService.deleteSelectedProjects(workspace.id, projectNamesToDelete); + }) + .catch((error: any) => { + this.$log.error(error); + return this.$q.reject(error); + }); } /** diff --git a/dashboard/src/app/workspaces/workspace-details/workspace-machines/machine-item/workspace-machine-item.html b/dashboard/src/app/workspaces/workspace-details/workspace-machines/machine-item/workspace-machine-item.html index 1b872d03d71b..4bf45db99efc 100644 --- a/dashboard/src/app/workspaces/workspace-details/workspace-machines/machine-item/workspace-machine-item.html +++ b/dashboard/src/app/workspaces/workspace-details/workspace-machines/machine-item/workspace-machine-item.html @@ -61,7 +61,7 @@ popover-trigger="outsideClick" popover-class="workspace-machine-actions-popover" uib-popover-html=" - 'Installers + 'Installers Servers Environment Variables'">
diff --git a/dashboard/src/components/api/builder/che-stack-builder.ts b/dashboard/src/components/api/builder/che-stack-builder.ts index ab6b7c28b968..f780739b4230 100644 --- a/dashboard/src/components/api/builder/che-stack-builder.ts +++ b/dashboard/src/components/api/builder/che-stack-builder.ts @@ -22,10 +22,6 @@ export class CheStackBuilder { */ constructor() { this.stack = {} as che.IStack; - this.stack.source = { - origin: '', - type: '' - }; this.stack.components = []; this.stack.tags = []; this.stack.workspaceConfig = {} as che.IWorkspaceConfig; diff --git a/dashboard/src/components/attribute/clip-the-middle/che-clip-the-middle.styl b/dashboard/src/components/attribute/clip-the-middle/che-clip-the-middle.styl index a9a86bd29dc1..b6c8443b4040 100644 --- a/dashboard/src/components/attribute/clip-the-middle/che-clip-the-middle.styl +++ b/dashboard/src/components/attribute/clip-the-middle/che-clip-the-middle.styl @@ -12,3 +12,4 @@ .che-clip-the-middle-end flex 1 0 auto white-space nowrap + padding-right 1px diff --git a/dashboard/src/components/widget/accordion/che-accordion.directive.ts b/dashboard/src/components/widget/accordion/che-accordion.directive.ts index dd6fa2045e2c..f632740c6df3 100644 --- a/dashboard/src/components/widget/accordion/che-accordion.directive.ts +++ b/dashboard/src/components/widget/accordion/che-accordion.directive.ts @@ -43,24 +43,7 @@ export class CheAccordion implements ng.IDirective { link($scope: ICheAccordionScope, $element: ng.IAugmentedJQuery): void { let currentBodyElement = $element.find('.che-accordion-body'); - // automatic switching panes - $scope.$watch(() => { - return $scope.openCondition; - }, (doOpenPane: boolean) => { - if (!$element.siblings().hasClass('che-accordion-dirty')) { - openPane(doOpenPane); - } - }); - - // manual switching panes - $element.bind('click', (event: JQueryEventObject) => { - if (angular.element(event.target).parent().hasClass('che-accordion-title')) { - $element.addClass('che-accordion-dirty'); - openPane(true); - } - }); - - function openPane (doOpenPane: boolean) { + let openPane = (doOpenPane: boolean) => { if ($element.hasClass('che-accordion-closed')) { let siblingElements = $element.siblings(), panesToClose = []; @@ -99,6 +82,23 @@ export class CheAccordion implements ng.IDirective { } }); } - } + }; + + // automatic switching panes + $scope.$watch(() => { + return $scope.openCondition; + }, (doOpenPane: boolean) => { + if (!$element.siblings().hasClass('che-accordion-dirty')) { + openPane(doOpenPane); + } + }); + + // manual switching panes + $element.bind('click', (event: JQueryEventObject) => { + if (angular.element(event.target).parent().hasClass('che-accordion-title')) { + $element.addClass('che-accordion-dirty'); + openPane(true); + } + }); } } diff --git a/dashboard/src/components/widget/button/che-button.directive.ts b/dashboard/src/components/widget/button/che-button.directive.ts index afaf067fcaf5..4f290f8f6057 100644 --- a/dashboard/src/components/widget/button/che-button.directive.ts +++ b/dashboard/src/components/widget/button/che-button.directive.ts @@ -53,7 +53,7 @@ export abstract class CheButton implements ng.IDirective { compile($element: ng.IAugmentedJQuery, $attrs: ICheButtonAttributes): ng.IDirectivePrePost { const avoidAttrs = ['ng-model', 'ng-click']; const allowedAttrPrefixes = ['ng-']; - const allowedAttributes = ['href', 'target', 'tabindex']; + const allowedAttributes = ['href', 'name', 'target', 'tabindex']; const mdButtonEl = $element.find('md-button'); diff --git a/dashboard/src/components/widget/edit-mode-overlay/che-edit-mode-overlay.directive.spec.ts b/dashboard/src/components/widget/edit-mode-overlay/che-edit-mode-overlay.directive.spec.ts new file mode 100644 index 000000000000..2e4706d57134 --- /dev/null +++ b/dashboard/src/components/widget/edit-mode-overlay/che-edit-mode-overlay.directive.spec.ts @@ -0,0 +1,559 @@ +/* + * Copyright (c) 2015-2018 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +'use strict'; + +import {ICheEditModeOverlayConfig} from './che-edit-mode-overlay.directive'; +import {CheHttpBackend} from '../../api/test/che-http-backend'; + +interface ITestScope extends ng.IScope { + config: ICheEditModeOverlayConfig; +} + +describe(`cheEditModeOverlay >`, () => { + + let $scope: ITestScope; + + let $compile: ng.ICompileService; + + let $timeout: ng.ITimeoutService; + + let compiledDirective; + + /** + * Setup module + */ + beforeEach(angular.mock.module('userDashboard')); + + beforeEach(inject((_$compile_: ng.ICompileService, + _$timeout_: ng.ITimeoutService, + _$rootScope_: ng.IRootScopeService, + _cheHttpBackend_: CheHttpBackend) => { + $scope = _$rootScope_.$new() as ITestScope; + $compile = _$compile_; + $timeout = _$timeout_; + + const $httpBackend = _cheHttpBackend_.getHttpBackend(); + // avoid tracking requests from branding controller; + $httpBackend.whenGET(/.*/).respond(200, ''); + $httpBackend.when('OPTIONS', '/api/').respond({}); + })); + + beforeEach(() => { + $scope.config = { + visible: true, + message: { + content: 'Test message', + visible: false + } + }; + }); + + afterEach(() => { + $timeout.verifyNoPendingTasks(); + }); + + function compileDirective(): void { + const template = `
`; + + compiledDirective = $compile(angular.element(template))($scope); + $timeout.flush(); + $scope.$digest(); + } + + it(`should be compiled >`, () => { + compileDirective(); + expect(compiledDirective.find('.che-edit-mode-overlay').length).toEqual(1); + }); + + describe(`'visible' >`, () => { + + function getOverlayEl(): ng.IAugmentedJQuery { + return compiledDirective.find('.che-edit-mode-overlay'); + } + + describe(`initially visible >`, () => { + + beforeEach(() => { + $scope.config.visible = true; + compileDirective(); + }); + + it(`should be in DOM >`, () => { + expect(getOverlayEl().length).toEqual(1); + }); + + it(`should be hidden when it's set to 'false' >`, () => { + $scope.config.visible = false; + $scope.$digest(); + + expect(getOverlayEl().length).toEqual(0); + }); + + }); + + describe(`initially hidden >`, () => { + + beforeEach(() => { + $scope.config.visible = false; + compileDirective(); + }); + + it(`shouldn't be in DOM >`, () => { + expect(getOverlayEl().length).toEqual(0); + }); + + it(`should be shown when it's set to 'true' >`, () => { + $scope.config.visible = true; + $scope.$digest(); + + expect(getOverlayEl().length).toEqual(1); + }); + }); + + }); + + describe(`'disabled' >`, () => { + + let saveButtonEl, applyButtonEl, cancelButtonEl; + + beforeEach(() => { + $scope.config.saveButton = { + action: jasmine.createSpy('saveButton.action') + }; + $scope.config.applyButton = { + action: jasmine.createSpy('applyButton.action') + }; + $scope.config.cancelButton = { + action: jasmine.createSpy('cancelButton.action') + }; + }); + + describe(`equals to 'false' >`, () => { + + beforeEach(() => { + $scope.config.disabled = false; + compileDirective(); + + saveButtonEl = compiledDirective.find('.save-button button'); + applyButtonEl = compiledDirective.find('.apply-button button'); + cancelButtonEl = compiledDirective.find('.cancel-button button'); + }); + + it(`should call a callback when 'saveButton' is clicked >`, () => { + saveButtonEl.click(); + expect($scope.config.saveButton.action).toHaveBeenCalled(); + }); + + it(`should call a callback when 'applyButton' is clicked >`, () => { + applyButtonEl.click(); + expect($scope.config.applyButton.action).toHaveBeenCalled(); + }); + + it(`should call a callback when 'cancelButton' is clicked >`, () => { + cancelButtonEl.click(); + expect($scope.config.cancelButton.action).toHaveBeenCalled(); + }); + + }); + + describe(`equals to 'true' >`, () => { + + beforeEach(() => { + $scope.config.disabled = true; + compileDirective(); + + saveButtonEl = compiledDirective.find('.save-button button'); + applyButtonEl = compiledDirective.find('.apply-button button'); + cancelButtonEl = compiledDirective.find('.cancel-button button'); + }); + + it(`shouldn't call a callback when 'saveButton' is clicked >`, () => { + saveButtonEl.click(); + expect($scope.config.saveButton.action).not.toHaveBeenCalled(); + }); + + it(`shouldn't call a callback when 'applyButton' is clicked >`, () => { + applyButtonEl.click(); + expect($scope.config.applyButton.action).not.toHaveBeenCalled(); + }); + + it(`shouldn't call a callback when 'cancelButton' is clicked >`, () => { + cancelButtonEl.click(); + expect($scope.config.cancelButton.action).not.toHaveBeenCalled(); + }); + + }); + + }); + + describe(`'message' >`, () => { + + function getMessageElement(): ng.IAugmentedJQuery { + return compiledDirective.find('.che-edit-mode-overlay-message span'); + } + + describe(`content isn't set up initially >`, () => { + + beforeEach(() => { + $scope.config.message.content = ''; + $scope.config.message.visible = true; + + compileDirective(); + }); + + it(`should not be shown >`, () => { + expect(getMessageElement().length).toEqual(0); + }); + + describe(`and set later >`, () => { + + beforeEach(() => { + $scope.config.message.content = 'Information message'; + $scope.$digest(); + }); + + it(`should be shown >`, () => { + expect(getMessageElement().length).toEqual(1); + }); + + it(`should have correct content`, () => { + expect(getMessageElement().text().trim()).toEqual($scope.config.message.content); + }); + + }); + + }); + + describe(`content is set up and visible initially >`, () => { + + beforeEach(() => { + $scope.config.message.content = 'Information message'; + $scope.config.message.visible = true; + + compileDirective(); + }); + + it(`should be shown >`, () => { + expect(getMessageElement().length).toEqual(1); + }); + + it(`should have correct content >`, () => { + expect(getMessageElement().text().trim()).toEqual($scope.config.message.content); + }); + + it(`should be hide when visibility is changed >`, () => { + $scope.config.message.visible = false; + $scope.$digest(); + + expect(getMessageElement().length).toEqual(0); + }); + + it(`should be hide when content is removed >`, () => { + $scope.config.message.content = ''; + $scope.$digest(); + + expect(getMessageElement().length).toEqual(0); + }); + + }); + + describe(`content is set up and hidden initially >`, () => { + + beforeEach(() => { + $scope.config.message.content = 'Information message'; + $scope.config.message.visible = false; + + compileDirective(); + }); + + it(`shouldn't be shown initially > `, () => { + expect(getMessageElement().length).toEqual(0); + }); + + it(`can be shown later >`, () => { + $scope.config.message.visible = true; + $scope.$digest(); + + expect(getMessageElement().length).toEqual(1); + }); + + it(`should have correct content when it's shown >`, () => { + $scope.config.message.visible = true; + $scope.$digest(); + + expect(getMessageElement().text()).toEqual($scope.config.message.content); + }); + + }); + + }); + + describe(`'saveButton' >`, () => { + + function getSaveButton(): ng.IAugmentedJQuery { + return compiledDirective.find(`.save-button`); + } + + describe(`not described in config >`, () => { + + beforeEach(() => { + delete $scope.config.saveButton; + compileDirective(); + }); + + it(`shouldn't be in DOM >`, () => { + expect(getSaveButton().length).toEqual(0); + }); + + }); + + describe(`default name and title >`, () => { + + beforeEach(() => { + $scope.config.saveButton = { + action: jasmine.createSpy('saveButton.action') + }; + compileDirective(); + }); + + it(`should be able to found by default name >`, () => { + expect(getSaveButton().length).toEqual(1); + }); + + it(`should have default title`, () => { + expect(getSaveButton().text()).toEqual('Save'); + }); + + }); + + describe(`config is set up >`, () => { + + beforeEach(() => { + $scope.config.saveButton = { + name: 'my-save-button', + title: 'My Save Button', + action: jasmine.createSpy('saveButton.action') + }; + + compileDirective(); + }); + + it(`should have BUTTON with correct name >`, () => { + expect(getSaveButton().find('button').attr('name')).toEqual($scope.config.saveButton.name); + }); + + it(`should have correct title >`, () => { + expect(getSaveButton().text()).toEqual($scope.config.saveButton.title); + }); + + describe(`when enabled >`, () => { + + it(`should call a callback when clicked >`, () => { + getSaveButton().click(); + + expect($scope.config.saveButton.action).toHaveBeenCalled(); + }); + + }); + + describe(`when disabled > `, () => { + + beforeEach(() => { + $scope.config.saveButton.disabled = true; + $scope.$digest(); + }); + + it(`shouldn't call a callback when clicked`, () => { + getSaveButton().find('button').click(); + + expect($scope.config.saveButton.action).not.toHaveBeenCalled(); + }); + + }); + + }); + + }); + + describe(`'applyButton' >`, () => { + + function getApplyButton(): ng.IAugmentedJQuery { + return compiledDirective.find('.apply-button'); + } + + describe(`not described in config >`, () => { + + beforeEach(() => { + delete $scope.config.applyButton; + compileDirective(); + }); + + it(`shouldn't be in DOM >`, () => { + expect(getApplyButton().length).toEqual(0); + }); + + }); + + describe(`default name and title >`, () => { + + beforeEach(() => { + $scope.config.applyButton = { + action: jasmine.createSpy('applyButton.action') + }; + compileDirective(); + }); + + it(`should be able to found by default name >`, () => { + expect(getApplyButton().length).toEqual(1); + }); + + it(`should have default title`, () => { + expect(getApplyButton().text().trim()).toEqual('Apply'); + }); + + }); + + describe(`config is set up >`, () => { + + beforeEach(() => { + $scope.config.applyButton = { + name: 'my-apply-button', + title: 'My Apply Button', + action: jasmine.createSpy('applyButton.action') + }; + + compileDirective(); + }); + + it(`should have BUTTON with correct name >`, () => { + expect(getApplyButton().find('button').attr('name')).toEqual($scope.config.applyButton.name); + }); + + it(`should have correct title >`, () => { + expect(getApplyButton().text()).toEqual($scope.config.applyButton.title); + }); + + describe(`when enabled >`, () => { + + it(`should call a callback when clicked >`, () => { + getApplyButton().find('button').click(); + + expect($scope.config.applyButton.action).toHaveBeenCalled(); + }); + + }); + + describe(`when disabled > `, () => { + + beforeEach(() => { + $scope.config.applyButton.disabled = true; + $scope.$digest(); + }); + + it(`shouldn't call a callback when clicked`, () => { + getApplyButton().find('button').click(); + + expect($scope.config.applyButton.action).not.toHaveBeenCalled(); + }); + + }); + + }); + + }); + + describe(`'cancelButton' >`, () => { + + function getCancelButton(): ng.IAugmentedJQuery { + return compiledDirective.find('.cancel-button'); + } + + describe(`not described in config >`, () => { + + beforeEach(() => { + delete $scope.config.cancelButton; + compileDirective(); + }); + + it(`shouldn't be in DOM >`, () => { + expect(getCancelButton().length).toEqual(0); + }); + + }); + + describe(`default name and title >`, () => { + + beforeEach(() => { + $scope.config.cancelButton = { + action: jasmine.createSpy('cancelButton.action') + }; + compileDirective(); + }); + + it(`should be able to found by default name >`, () => { + expect(getCancelButton().length).toEqual(1); + }); + + it(`should have default title`, () => { + expect(getCancelButton().text().trim()).toEqual('Cancel'); + }); + + }); + + describe(`config is set up >`, () => { + + beforeEach(() => { + $scope.config.cancelButton = { + name: 'my-cancel-button', + title: 'My Cancel Button', + action: jasmine.createSpy('cancelButton.action') + }; + + compileDirective(); + }); + + it(`should have BUTTON with correct name >`, () => { + expect(getCancelButton().find('button').attr('name')).toEqual($scope.config.cancelButton.name); + }); + + it(`should have correct title >`, () => { + expect(getCancelButton().text().trim()).toEqual($scope.config.cancelButton.title); + }); + + describe(`when enabled >`, () => { + + it(`should call a callback when clicked >`, () => { + getCancelButton().find('button').click(); + + expect($scope.config.cancelButton.action).toHaveBeenCalled(); + }); + + }); + + describe(`when disabled > `, () => { + + beforeEach(() => { + $scope.config.cancelButton.disabled = true; + $scope.$digest(); + }); + + it(`shouldn't call a callback when clicked`, () => { + getCancelButton().find('button').click(); + + expect($scope.config.cancelButton.action).not.toHaveBeenCalled(); + }); + + }); + + }); + + }); +}); diff --git a/dashboard/src/components/widget/edit-mode-overlay/che-edit-mode-overlay.directive.ts b/dashboard/src/components/widget/edit-mode-overlay/che-edit-mode-overlay.directive.ts new file mode 100644 index 000000000000..ab68cc061dae --- /dev/null +++ b/dashboard/src/components/widget/edit-mode-overlay/che-edit-mode-overlay.directive.ts @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2015-2018 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +'use strict'; + +export interface ICheEditModeOverlayMessage { + content: string; + visible: boolean; +} + +export interface ICheEditModeOverlayButton { + action: (args?: any) => void; + disabled?: boolean; + name?: string; + title?: string; +} + +export interface ICheEditModeOverlayConfig { + visible?: boolean; + disabled?: boolean; + message?: ICheEditModeOverlayMessage; + saveButton?: ICheEditModeOverlayButton; + applyButton?: ICheEditModeOverlayButton; + cancelButton?: ICheEditModeOverlayButton; +} + +export class CheEditModeOverlay implements ng.IDirective { + + restrict = 'E'; + + scope = { + config: '=' + }; + + template(): string { + return ` +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
`; + } + +} diff --git a/dashboard/src/components/widget/edit-mode-overlay/che-edit-mode-overlay.styl b/dashboard/src/components/widget/edit-mode-overlay/che-edit-mode-overlay.styl new file mode 100644 index 000000000000..022260e3a9d3 --- /dev/null +++ b/dashboard/src/components/widget/edit-mode-overlay/che-edit-mode-overlay.styl @@ -0,0 +1,18 @@ +.che-edit-mode-overlay + position relative + bottom 0 + left 0 + right 0 + background-color lighten($mouse-gray-color, 10%) + height 50px + border-top 1px solid $very-light-grey-color + border-bottom 1px solid $very-light-grey-color + + button + margin 0 20px 0 0 + + .che-edit-mode-overlay-message + width 100% + margin-right 20px + text-align center + color darken($dark-menacing-sky-color, 27%) diff --git a/dashboard/src/components/widget/loader/che-loader-crane.directive.ts b/dashboard/src/components/widget/loader/che-loader-crane.directive.ts index 989a4a6f1c60..c83f3feffe44 100644 --- a/dashboard/src/components/widget/loader/che-loader-crane.directive.ts +++ b/dashboard/src/components/widget/loader/che-loader-crane.directive.ts @@ -62,10 +62,10 @@ export class CheLoaderCrane implements ng.IDirective { animationRunning = false; let applyScale = (element: any, scale: number) => { - let jqElement; - if (element.nodeType) { - jqElement = angular.element(element); + if (!element.nodeType) { + return; } + let jqElement = angular.element(element); jqElement.css('transform', 'scale(' + scale + ')'); jqElement.css('height', craneHeight * scale); jqElement.css('width', craneWidth * scale); diff --git a/dashboard/src/components/widget/widget-config.ts b/dashboard/src/components/widget/widget-config.ts index 58ee196de862..a7cc1c37ec36 100644 --- a/dashboard/src/components/widget/widget-config.ts +++ b/dashboard/src/components/widget/widget-config.ts @@ -88,116 +88,119 @@ import {CheEditor} from './editor/che-editor.directive'; import {CheEditorController} from './editor/che-editor.controller'; import {PagingButtons} from './paging-button/paging-button.directive'; import {CheRowToolbar} from './toolbar/che-row-toolbar.directive'; +import {CheEditModeOverlay} from './edit-mode-overlay/che-edit-mode-overlay.directive'; export class WidgetConfig { constructor(register: che.IRegisterService) { // accordion - register.directive('cheAccordion', CheAccordion) + register.directive('cheAccordion', CheAccordion); // button - .directive('cheButtonPrimary', CheButtonPrimary) - .directive('cheButtonPrimaryFlat', CheButtonPrimaryFlat) - .directive('cheButtonDanger', CheButtonDanger) - .directive('cheButtonDefault', CheButtonDefault) - .directive('cheButtonNotice', CheButtonNotice) - .directive('cheButtonWarning', CheButtonWarning) - .directive('cheButtonSaveFlat', CheButtonSaveFlat) - .directive('cheButtonCancelFlat', CheButtonCancelFlat) - // paging buttons - .directive('chePagingButtons', PagingButtons) - // dropdown - .directive('cheButtonDropdown', CheButtonDropdownDirective) - // clipboard - .directive('cheClipboard', CheClipboard) - .directive('cheCompile', CheCompile) - .directive('cheDescription', CheDescription) - // dropzone - .controller('CheDropZoneCtrl', CheDropZoneCtrl) - .directive('cheDropzone', CheDropZone) - .directive('cheEmptyState', CheEmptyState) - .directive('cheFilterSelector', CheFilterSelector) - .controller('CheFilterSelectorController', CheFilterSelectorController) - .directive('cheFrame', CheFrame) - .directive('cheFooter', CheFooter) - .controller('CheFooterController', CheFooterController) - .directive('cheHtmlSource', CheHtmlSource) - .directive('demoSourceRender', DemoSourceRender) - .directive('cheInput', CheInput) - .directive('cheInputBox', CheInputBox) - .directive('cheTextarea', CheTextarea) - .directive('cheNumberSpinner', CheNumberSpinner) - .directive('cheLabel', CheLabel) - .directive('cheLabelContainer', CheLabelContainer) - - .controller('CheLearnMoreCtrl', CheLearnMoreCtrl) - .directive('cheLearnMore', CheLearnMore) - .directive('cheLearnMoreItem', CheLearnMoreItem) - .directive('cheLearnMoreTemplate', CheLearnMoreTemplate) - - .directive('cheLink', CheLink) - - .directive('cheListItemChecked', CheListItemChecked) - .directive('cheListTitle', CheListTitle) - .directive('cheList', CheList) - .directive('cheListItem', CheListItem) - .directive('cheListHeader', CheListHeader) - .directive('cheListHeaderColumn', CheListHeaderColumn) - .factory('cheListHelperFactory', CheListHelperFactory) - - .directive('cheListHeaderAdditionalParts', CheListHeaderAdditionalParts) - .directive('cheListHeaderAddButton', CheListHeaderAddButton) - .directive('cheListHeaderImportButton', CheListHeaderImportButton) - .directive('cheListHeaderDeleteButton', CheListHeaderDeleteButton) - .directive('cheListHeaderSearch', CheListHeaderSearch) - .directive('cheListHeaderFilter', CheListHeaderFilter) - - .directive('cheLoader', CheLoader) - .directive('cheLoaderCrane', CheLoaderCrane) - - .controller('ChePanelCtrl', ChePanelCtrl) - .directive('chePanel', ChePanel) - - .directive('cheSearch', CheSearch) - .directive('searchInput', SearchInput) - - .directive('cheSelect', CheSelect) - - .controller('CheSelecterCtrl', CheSelecterCtrl) - .directive('cheSelecter', CheSelecter) - - .directive('cheSlider', CheSlider) - - .directive('cheLogsOutput', CheLogsOutput) - - .directive('cheTextInfo', CheTextInfo) - - .controller('CheToggleController', CheToggleController) - .directive('cheToggleButton', CheToggleButton) - .directive('cheToggle', CheToggle) - .directive('cheToggleJoined', CheToggleJoined) - .directive('cheToggleJoinedButton', CheToggleJoinedButton) - .directive('toggleSingleButton', ToggleSingleButton) - - .directive('cheToolbar', CheToolbar) - // notifications - .directive('cheErrorNotification', CheErrorNotification) - .directive('cheInfoNotification', CheInfoNotification) - // wrapper for popup - .directive('chePopup', ChePopup) - .directive('cheModalPopup', CheModalPopup) - // show area - .directive('cheShowArea', CheShowArea) - // tags - .directive('cheChipsList', CheChipsList) - // editor - .controller('CheEditorController', CheEditorController) - .directive('cheEditor', CheEditor) - // row toolbar - .directive('cheRowToolbar', CheRowToolbar) - // popover - .directive('cheTogglePopover', CheTogglePopover) - .directive('toggleButtonPopover', CheToggleButtonPopover); + register.directive('cheButtonPrimary', CheButtonPrimary); + register.directive('cheButtonPrimaryFlat', CheButtonPrimaryFlat); + register.directive('cheButtonDanger', CheButtonDanger); + register.directive('cheButtonDefault', CheButtonDefault); + register.directive('cheButtonNotice', CheButtonNotice); + register.directive('cheButtonWarning', CheButtonWarning); + register.directive('cheButtonSaveFlat', CheButtonSaveFlat); + register.directive('cheButtonCancelFlat', CheButtonCancelFlat); + // paging buttons + register.directive('chePagingButtons', PagingButtons); + // dropdown + register.directive('cheButtonDropdown', CheButtonDropdownDirective); + // clipboard + register.directive('cheClipboard', CheClipboard); + register.directive('cheCompile', CheCompile); + register.directive('cheDescription', CheDescription); + // dropzone + register.controller('CheDropZoneCtrl', CheDropZoneCtrl); + register.directive('cheDropzone', CheDropZone); + register.directive('cheEmptyState', CheEmptyState); + register.directive('cheFilterSelector', CheFilterSelector); + register.controller('CheFilterSelectorController', CheFilterSelectorController); + register.directive('cheFrame', CheFrame); + register.directive('cheFooter', CheFooter); + register.controller('CheFooterController', CheFooterController); + register.directive('cheHtmlSource', CheHtmlSource); + register.directive('demoSourceRender', DemoSourceRender); + register.directive('cheInput', CheInput); + register.directive('cheInputBox', CheInputBox); + register.directive('cheTextarea', CheTextarea); + register.directive('cheNumberSpinner', CheNumberSpinner); + register.directive('cheLabel', CheLabel); + register.directive('cheLabelContainer', CheLabelContainer); + + register.controller('CheLearnMoreCtrl', CheLearnMoreCtrl); + register.directive('cheLearnMore', CheLearnMore); + register.directive('cheLearnMoreItem', CheLearnMoreItem); + register.directive('cheLearnMoreTemplate', CheLearnMoreTemplate); + + register.directive('cheLink', CheLink); + + register.directive('cheListItemChecked', CheListItemChecked); + register.directive('cheListTitle', CheListTitle); + register.directive('cheList', CheList); + register.directive('cheListItem', CheListItem); + register.directive('cheListHeader', CheListHeader); + register.directive('cheListHeaderColumn', CheListHeaderColumn); + register.factory('cheListHelperFactory', CheListHelperFactory); + + register.directive('cheListHeaderAdditionalParts', CheListHeaderAdditionalParts); + register.directive('cheListHeaderAddButton', CheListHeaderAddButton); + register.directive('cheListHeaderImportButton', CheListHeaderImportButton); + register.directive('cheListHeaderDeleteButton', CheListHeaderDeleteButton); + register.directive('cheListHeaderSearch', CheListHeaderSearch); + register.directive('cheListHeaderFilter', CheListHeaderFilter); + + register.directive('cheLoader', CheLoader); + register.directive('cheLoaderCrane', CheLoaderCrane); + + register.controller('ChePanelCtrl', ChePanelCtrl); + register.directive('chePanel', ChePanel); + + register.directive('cheSearch', CheSearch); + register.directive('searchInput', SearchInput); + + register.directive('cheSelect', CheSelect); + + register.controller('CheSelecterCtrl', CheSelecterCtrl); + register.directive('cheSelecter', CheSelecter); + + register.directive('cheSlider', CheSlider); + + register.directive('cheLogsOutput', CheLogsOutput); + + register.directive('cheTextInfo', CheTextInfo); + + register.controller('CheToggleController', CheToggleController); + register.directive('cheToggleButton', CheToggleButton); + register.directive('cheToggle', CheToggle); + register.directive('cheToggleJoined', CheToggleJoined); + register.directive('cheToggleJoinedButton', CheToggleJoinedButton); + register.directive('toggleSingleButton', ToggleSingleButton); + + register.directive('cheToolbar', CheToolbar); + // notifications + register.directive('cheErrorNotification', CheErrorNotification); + register.directive('cheInfoNotification', CheInfoNotification); + // wrapper for popup + register.directive('chePopup', ChePopup); + register.directive('cheModalPopup', CheModalPopup); + // show area + register.directive('cheShowArea', CheShowArea); + // tags + register.directive('cheChipsList', CheChipsList); + // editor + register.controller('CheEditorController', CheEditorController); + register.directive('cheEditor', CheEditor); + // row toolbar + register.directive('cheRowToolbar', CheRowToolbar); + // popover + register.directive('cheTogglePopover', CheTogglePopover); + register.directive('toggleButtonPopover', CheToggleButtonPopover); + // edit overlay + register.directive('cheEditModeOverlay', CheEditModeOverlay); } } diff --git a/dockerfiles/cli/images.template b/dockerfiles/cli/images.template index 1af778dc277d..7fc35c0deb87 100644 --- a/dockerfiles/cli/images.template +++ b/dockerfiles/cli/images.template @@ -1,6 +1,6 @@ IMAGE_INIT=${BUILD_ORGANIZATION}/${BUILD_PREFIX}-init:${BUILD_TAG} IMAGE_CHE=${BUILD_ORGANIZATION}/${BUILD_PREFIX}-server:${BUILD_TAG} IMAGE_COMPOSE=docker/compose:1.10.1 -IMAGE_TRAEFIK=traefik:v1.3.0-rc3 +IMAGE_TRAEFIK=traefik:v1.5.0 IMAGE_POSTGRES=centos/postgresql-96-centos7 IMAGE_KEYCLOACK=jboss/keycloak-openshift:3.3.0.CR2-3 diff --git a/dockerfiles/cli/version/6.0.0-M5/images b/dockerfiles/cli/version/6.0.0/images similarity index 69% rename from dockerfiles/cli/version/6.0.0-M5/images rename to dockerfiles/cli/version/6.0.0/images index 29d8780dd0e6..9403197843db 100644 --- a/dockerfiles/cli/version/6.0.0-M5/images +++ b/dockerfiles/cli/version/6.0.0/images @@ -1,5 +1,5 @@ -IMAGE_INIT=eclipse/che-init:6.0.0-M5 -IMAGE_CHE=eclipse/che-server:6.0.0-M5 +IMAGE_INIT=eclipse/che-init:6.0.0 +IMAGE_CHE=eclipse/che-server:6.0.0 IMAGE_COMPOSE=docker/compose:1.10.1 IMAGE_TRAEFIK=traefik:v1.3.0-rc3 IMAGE_POSTGRES=centos/postgresql-96-centos7:9.6 diff --git a/dockerfiles/cli/version/6.0.0-M5/images-stacks b/dockerfiles/cli/version/6.0.0/images-stacks similarity index 100% rename from dockerfiles/cli/version/6.0.0-M5/images-stacks rename to dockerfiles/cli/version/6.0.0/images-stacks diff --git a/dockerfiles/cli/version/6.1.0/images b/dockerfiles/cli/version/6.1.0/images new file mode 100644 index 000000000000..c00b56ca4bee --- /dev/null +++ b/dockerfiles/cli/version/6.1.0/images @@ -0,0 +1,6 @@ +IMAGE_INIT=eclipse/che-init:6.1.0 +IMAGE_CHE=eclipse/che-server:6.1.0 +IMAGE_COMPOSE=docker/compose:1.10.1 +IMAGE_TRAEFIK=traefik:v1.3.0-rc3 +IMAGE_POSTGRES=centos/postgresql-96-centos7:9.6 +IMAGE_KEYCLOACK=jboss/keycloak-openshift:3.3.0.CR2-3 diff --git a/dockerfiles/cli/version/6.1.0/images-stacks b/dockerfiles/cli/version/6.1.0/images-stacks new file mode 100644 index 000000000000..73398d4dd94d --- /dev/null +++ b/dockerfiles/cli/version/6.1.0/images-stacks @@ -0,0 +1,23 @@ +eclipse/alpine_jdk8 +eclipse/aspnet +eclipse/centos_jdk8 +eclipse/cpp_gcc +eclipse/debian_jdk8 +eclipse/debian_jdk8_node +eclipse/debian_jre +eclipse/dotnet_core +eclipse/hadoop-dev +eclipse/meteor +eclipse/node +eclipse/php +eclipse/platformio +eclipse/ruby_rails +eclipse/selenium +eclipse/ubuntu_android +eclipse/ubuntu_go +eclipse/ubuntu_gradle +eclipse/ubuntu_jdk8 +eclipse/ubuntu_jre +eclipse/ubuntu_python +eclipse/ubuntu_wildfly8 +registry.centos.org/che-stacks/vertx diff --git a/dockerfiles/cli/version/latest.ver b/dockerfiles/cli/version/latest.ver index 5b4ab23e108b..09b254e90c61 100644 --- a/dockerfiles/cli/version/latest.ver +++ b/dockerfiles/cli/version/latest.ver @@ -1 +1 @@ -6.0.0-M5 +6.0.0 diff --git a/dockerfiles/cli/version/latest/images b/dockerfiles/cli/version/latest/images index 193b3d8b82d6..880dcf359085 100644 --- a/dockerfiles/cli/version/latest/images +++ b/dockerfiles/cli/version/latest/images @@ -1,6 +1,6 @@ IMAGE_INIT=eclipse/che-init:latest IMAGE_CHE=eclipse/che-server:latest IMAGE_COMPOSE=docker/compose:1.10.1 -IMAGE_TRAEFIK=traefik:v1.3.0-rc3 +IMAGE_TRAEFIK=traefik:v1.5.0 IMAGE_POSTGRES=centos/postgresql-96-centos7:9.6 IMAGE_KEYCLOACK=jboss/keycloak-openshift:3.3.0.CR2-3 diff --git a/dockerfiles/cli/version/nightly/images b/dockerfiles/cli/version/nightly/images index ed120a199540..02722d426e89 100644 --- a/dockerfiles/cli/version/nightly/images +++ b/dockerfiles/cli/version/nightly/images @@ -1,6 +1,6 @@ IMAGE_INIT=eclipse/che-init:nightly IMAGE_CHE=eclipse/che-server:nightly IMAGE_COMPOSE=docker/compose:1.10.1 -IMAGE_TRAEFIK=traefik:v1.3.0-rc3 +IMAGE_TRAEFIK=traefik:v1.5.0 IMAGE_POSTGRES=centos/postgresql-96-centos7:9.6 IMAGE_KEYCLOACK=jboss/keycloak-openshift:3.3.0.CR2-3 diff --git a/dockerfiles/init/manifests/che.env b/dockerfiles/init/manifests/che.env index f28fd9c4ad59..e8c2d4e5528a 100644 --- a/dockerfiles/init/manifests/che.env +++ b/dockerfiles/init/manifests/che.env @@ -245,6 +245,14 @@ # user configuration. CHE_SINGLE_PORT=false +# Wildcard DNS host and port for the single port mode. Default is nip.io. +# Only http protocol is currently supported. +#CHE_SINGLEPORT_WILDCARD__DOMAIN_HOST=NULL +#CHE_SINGLEPORT_WILDCARD__DOMAIN_PORT=NULL + +# Default rewriter for URLs in links. +# This variable is automatically overridden in single port mode. +#CHE_INFRA_DOCKER_URL__REWRITER=DEFAULT ######################################################################################## @@ -348,7 +356,6 @@ CHE_SINGLE_PORT=false #CHE_DOCKER_CLEANUP__PERIOD__MIN=60 - ######################################################################################## ##### ##### ##### OAUTH ##### diff --git a/dockerfiles/init/modules/che/templates/che.env.erb b/dockerfiles/init/modules/che/templates/che.env.erb index 7eb3c0b62f1d..8e417ce01e1d 100644 --- a/dockerfiles/init/modules/che/templates/che.env.erb +++ b/dockerfiles/init/modules/che/templates/che.env.erb @@ -79,5 +79,5 @@ CHE_WORKSPACE_HTTP__PROXY__JAVA__OPTIONS=<% if ! @http_proxy_for_che_workspaces. # Enable single port options <% if scope.lookupvar('che::che_single_port') == "true" -%> -CHE_PLUGIN_TRAEFIK_ENABLED=true +CHE_INFRA_DOCKER_URL__REWRITER=singleport <% end -%> diff --git a/dockerfiles/lib/dto-pom.xml b/dockerfiles/lib/dto-pom.xml index 363c61011e75..6a817e835c9f 100644 --- a/dockerfiles/lib/dto-pom.xml +++ b/dockerfiles/lib/dto-pom.xml @@ -17,13 +17,13 @@ maven-depmgt-pom org.eclipse.che.depmgt - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT dto-typescript pom Che TypeScript DTO - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT diff --git a/ide/che-core-dyna-provider-generator-maven-plugin/pom.xml b/ide/che-core-dyna-provider-generator-maven-plugin/pom.xml index 838c07292809..355ac8cc070e 100644 --- a/ide/che-core-dyna-provider-generator-maven-plugin/pom.xml +++ b/ide/che-core-dyna-provider-generator-maven-plugin/pom.xml @@ -16,7 +16,7 @@ che-core-ide-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-dyna-provider-generator-maven-plugin maven-plugin diff --git a/ide/che-core-ide-api/pom.xml b/ide/che-core-ide-api/pom.xml index 1f0e0313d50b..64dcc64647f4 100644 --- a/ide/che-core-ide-api/pom.xml +++ b/ide/che-core-ide-api/pom.xml @@ -16,7 +16,7 @@ che-core-ide-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.che.core che-core-ide-api diff --git a/ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/theme/Theme.java b/ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/theme/Theme.java index 7cc14bf5756e..f6ab696a27be 100644 --- a/ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/theme/Theme.java +++ b/ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/theme/Theme.java @@ -1357,8 +1357,6 @@ public interface Theme { String openedFilesDropdownListBackgroundColor(); - String openedFilesDropdownListBorderColor(); - String openedFilesDropdownListShadowColor(); String openedFilesDropdownListTextColor(); @@ -1367,8 +1365,6 @@ public interface Theme { String openedFilesDropdownListHoverBackgroundColor(); - String openedFilesDropdownListHoverTextColor(); - /** * ****************************************************************************************** * diff --git a/ide/che-core-ide-api/src/main/resources/org/eclipse/che/ide/api/parts/partstack.css b/ide/che-core-ide-api/src/main/resources/org/eclipse/che/ide/api/parts/partstack.css index 7361f5c782df..02c62f894528 100644 --- a/ide/che-core-ide-api/src/main/resources/org/eclipse/che/ide/api/parts/partstack.css +++ b/ide/che-core-ide-api/src/main/resources/org/eclipse/che/ide/api/parts/partstack.css @@ -10,9 +10,8 @@ */ .listItemPanel { background-color: openedFilesDropdownListBackgroundColor; - border: 1px solid openedFilesDropdownListBorderColor; + border: none; box-shadow: 0 2px 2px 0 openedFilesDropdownListShadowColor; - border-radius: 0 0 3px 3px; max-height: 300px; overflow-y: auto; width: 200px; diff --git a/ide/che-core-ide-api/src/main/resources/org/eclipse/che/ide/api/ui/style.css b/ide/che-core-ide-api/src/main/resources/org/eclipse/che/ide/api/ui/style.css index 1ba79913b64c..1be96970f795 100644 --- a/ide/che-core-ide-api/src/main/resources/org/eclipse/che/ide/api/ui/style.css +++ b/ide/che-core-ide-api/src/main/resources/org/eclipse/che/ide/api/ui/style.css @@ -48,7 +48,6 @@ @eval inactiveTabBorderColor org.eclipse.che.ide.api.theme.Style.theme.inactiveTabBorderColor(); @eval openedFilesDropdownListBackgroundColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListBackgroundColor(); -@eval openedFilesDropdownListBorderColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListBorderColor(); @eval openedFilesDropdownListShadowColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListShadowColor(); @eval partBackground org.eclipse.che.ide.api.theme.Style.theme.partBackground(); diff --git a/ide/che-core-ide-app/pom.xml b/ide/che-core-ide-app/pom.xml index ecfff1252184..3d5b6e0e41a3 100644 --- a/ide/che-core-ide-app/pom.xml +++ b/ide/che-core-ide-app/pom.xml @@ -16,7 +16,7 @@ che-core-ide-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-ide-app gwt-lib diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/actions/CollapseAllAction.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/actions/CollapseAllAction.java index 4fbd1f05caf2..9c45ad18d4f0 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/actions/CollapseAllAction.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/actions/CollapseAllAction.java @@ -12,9 +12,13 @@ import com.google.inject.Inject; import com.google.inject.Singleton; +import com.google.web.bindery.event.shared.EventBus; import org.eclipse.che.ide.CoreLocalizationConstant; import org.eclipse.che.ide.api.action.ActionEvent; import org.eclipse.che.ide.api.action.BaseAction; +import org.eclipse.che.ide.api.parts.ActivePartChangedEvent; +import org.eclipse.che.ide.api.parts.ActivePartChangedHandler; +import org.eclipse.che.ide.api.parts.PartPresenter; import org.eclipse.che.ide.part.explorer.project.ProjectExplorerPresenter; /** @@ -23,20 +27,36 @@ * @author Vlad Zhukovskiy */ @Singleton -public class CollapseAllAction extends BaseAction { +public class CollapseAllAction extends BaseAction implements ActivePartChangedHandler { + private ProjectExplorerPresenter projectExplorer; + private PartPresenter activePart; @Inject public CollapseAllAction( - ProjectExplorerPresenter projectExplorer, CoreLocalizationConstant localizationConstant) { + ProjectExplorerPresenter projectExplorer, + CoreLocalizationConstant localizationConstant, + EventBus eventBus) { super( localizationConstant.collapseAllActionTitle(), localizationConstant.collapseAllActionDescription()); this.projectExplorer = projectExplorer; + + eventBus.addHandler(ActivePartChangedEvent.TYPE, this); + } + + @Override + public void onActivePartChanged(ActivePartChangedEvent event) { + activePart = event.getActivePart(); } @Override public void update(ActionEvent e) { + if (!(activePart instanceof ProjectExplorerPresenter)) { + e.getPresentation().setEnabledAndVisible(false); + return; + } + e.getPresentation().setEnabledAndVisible(true); } diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/console/OutputConsoleViewImpl.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/console/OutputConsoleViewImpl.java index f6df6675a63d..27cc37b29c76 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/console/OutputConsoleViewImpl.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/console/OutputConsoleViewImpl.java @@ -218,6 +218,8 @@ public void onClick(ClickEvent event) { BOTTOM, MIDDLE, localization.consolesAutoScrollButtonTooltip()); + + toggleScrollToEndButton(followOutput); } @Override diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/console/OutputConsoleViewImpl.ui.xml b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/console/OutputConsoleViewImpl.ui.xml index 0f78a0a5c8d0..9919f7bc5072 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/console/OutputConsoleViewImpl.ui.xml +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/console/OutputConsoleViewImpl.ui.xml @@ -42,8 +42,9 @@ overflow: hidden; color: consolesToolbarButtonColor; opacity: 0.8; - position: relative; + border: 1px solid transparent; + background-clip: content-box; } .wrapTextButton { diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/keybinding/KeyBindingManager.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/keybinding/KeyBindingManager.java index ba68967da604..a2cb7004e542 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/keybinding/KeyBindingManager.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/keybinding/KeyBindingManager.java @@ -143,7 +143,7 @@ private void runActions(List actionIds, Event keyEvent) { ActionEvent e = new ActionEvent(presentationFactory.getPresentation(action), actionManager); action.update(e); - if (e.getPresentation().isEnabled() && e.getPresentation().isVisible()) { + if (e.getPresentation().isEnabled()) { /** Stop handling the key event */ keyEvent.preventDefault(); keyEvent.stopPropagation(); diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/explorer/project/ProjectExplorerPresenter.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/explorer/project/ProjectExplorerPresenter.java index 0058e75d52b5..8afc766d9e4e 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/explorer/project/ProjectExplorerPresenter.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/explorer/project/ProjectExplorerPresenter.java @@ -230,6 +230,12 @@ public void initFileWatchers() { } /* Expose Project Explorer's internal API to the world, to allow automated Selenium scripts expand all projects tree. */ + /* + Notice that the reference to the exported method has been wrapped in a call to the $entry function. + This implicitly-defined function ensures that the Java-derived method is executed with the uncaught + exception handler installed and pumps a number of other utility services. The $entry function is + reentrant-safe and should be used anywhere that GWT-derived JavaScript may be called into from a non-GWT context. + */ private native void registerNative() /*-{ var that = this; diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/widgets/panemenu/PaneMenuActionItemWidget.ui.xml b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/widgets/panemenu/PaneMenuActionItemWidget.ui.xml index 3a29e6aad0f6..8d69aef8bb95 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/widgets/panemenu/PaneMenuActionItemWidget.ui.xml +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/widgets/panemenu/PaneMenuActionItemWidget.ui.xml @@ -20,11 +20,10 @@ @eval openedFilesDropdownListTextColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListTextColor(); @eval openedFilesDropdownListCloseButtonColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListCloseButtonColor(); @eval openedFilesDropdownListHoverBackgroundColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListHoverBackgroundColor(); - @eval openedFilesDropdownListHoverTextColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListHoverTextColor(); .main { - height: 20px; - line-height: 20px; + height: 24px; + line-height: 24px; color: openedFilesDropdownListTextColor; position: relative; font-family: "Open Sans", sans-serif; @@ -37,7 +36,7 @@ overflow: hidden; position: absolute; left: 0px; - top: 0px; + top: 2px; } .icon svg { @@ -56,14 +55,13 @@ position: absolute; left: 22px; top: 0px; - height: 20px; - line-height: 20px; + height: 24px; + line-height: 24px; white-space: nowrap; } .main:HOVER { background-color: openedFilesDropdownListHoverBackgroundColor; - color: openedFilesDropdownListHoverTextColor; } .main:HOVER .closePanel .closeButton svg { diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/widgets/panemenu/PaneMenuTabItemWidget.ui.xml b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/widgets/panemenu/PaneMenuTabItemWidget.ui.xml index 434dd0d406b0..4e4db3ae6492 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/widgets/panemenu/PaneMenuTabItemWidget.ui.xml +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/part/widgets/panemenu/PaneMenuTabItemWidget.ui.xml @@ -21,11 +21,10 @@ @eval openedFilesDropdownListTextColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListTextColor(); @eval openedFilesDropdownListCloseButtonColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListCloseButtonColor(); @eval openedFilesDropdownListHoverBackgroundColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListHoverBackgroundColor(); - @eval openedFilesDropdownListHoverTextColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListHoverTextColor(); .main { - height: 20px; - line-height: 20px; + height: 24px; + line-height: 24px; color: openedFilesDropdownListTextColor; position: relative; font-family: "Open Sans", sans-serif; @@ -38,7 +37,7 @@ overflow: hidden; position: absolute; left: 0px; - top: 0px; + top: 2px; } .icon svg { @@ -57,8 +56,8 @@ position: absolute; left: 22px; top: 0px; - height: 20px; - line-height: 20px; + height: 24px; + line-height: 24px; white-space: nowrap; } @@ -68,7 +67,7 @@ overflow: hidden; position: absolute; right: 0px; - top: 0px; + top: 2px; } .closeButton { @@ -98,7 +97,6 @@ .main:HOVER { background-color: openedFilesDropdownListHoverBackgroundColor; - color: openedFilesDropdownListHoverTextColor; } .main:HOVER .closePanel .closeButton svg { diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/processes/loading/WorkspaceLoadingTrackerViewImpl.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/processes/loading/WorkspaceLoadingTrackerViewImpl.java index 2ee5e7b4af81..baa19a24bea0 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/processes/loading/WorkspaceLoadingTrackerViewImpl.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/processes/loading/WorkspaceLoadingTrackerViewImpl.java @@ -86,6 +86,12 @@ private class Installer { // Row containing error message Element errorSection; + /** + * Creates installer section. + * + * @param installerName installer name + * @param installerDescription installer description + */ public Installer(String installerName, String installerDescription) { // Clone installerTemplate node section = installerTemplate.cloneNode(true).cast(); @@ -121,6 +127,25 @@ public Installer(String installerName, String installerDescription) { description.setInnerText(installerDescription); } + /** + * Sets installer name. + * + * @param installerName installer name + */ + void setName(String installerName) { + name.setInnerText(installerName); + } + + /** + * Sets installer description. + * + * @param installerDescription installer description + */ + void setDescription(String installerDescription) { + description.setInnerText(installerDescription); + } + + /** Changes installer state to STARTING. */ void setStarting() { state.setAttribute("rel", "starting"); state.setInnerText("Starting"); @@ -131,6 +156,7 @@ void setStarting() { animatedElements.add(status); } + /** Changes installer state to RUNNING. */ void setRunning() { state.setAttribute("rel", "running"); state.setInnerText("Running"); @@ -141,6 +167,7 @@ void setRunning() { animatedElements.remove(status); } + /** Changes installer state to STOPPED. */ void setStopped() { state.setAttribute("rel", "stopped"); state.setInnerText("Stopped"); @@ -186,6 +213,7 @@ void setFailed(String errorMessage) { tableBody.insertAfter(errorSection, section); } + /** Resets installer state. */ void reset() { state.setAttribute("rel", ""); state.setInnerText(""); @@ -325,12 +353,15 @@ void setState(String newState) { * @param installerDescription installer description */ void addInstaller(String installerId, String installerName, String installerDescription) { - if (installers.containsKey(installerId)) { + Installer installer = installers.get(installerId); + + if (installer != null) { + installer.setName(installerName); + installer.setDescription(installerDescription); return; } - Installer installer = new Installer(installerName, installerDescription); - + installer = new Installer(installerName, installerDescription); installers.put(installerId, installer); tableBody.insertBefore(installer.section, machinesDelimiter); diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/resources/action/RevealResourceAction.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/resources/action/RevealResourceAction.java index a33a6abc0d6e..283f47496e72 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/resources/action/RevealResourceAction.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/resources/action/RevealResourceAction.java @@ -27,6 +27,8 @@ import org.eclipse.che.ide.api.action.AbstractPerspectiveAction; import org.eclipse.che.ide.api.action.ActionEvent; import org.eclipse.che.ide.api.app.AppContext; +import org.eclipse.che.ide.api.parts.ActivePartChangedEvent; +import org.eclipse.che.ide.api.parts.ActivePartChangedHandler; import org.eclipse.che.ide.api.parts.PartPresenter; import org.eclipse.che.ide.api.parts.PartStack; import org.eclipse.che.ide.api.parts.WorkspaceAgent; @@ -43,7 +45,8 @@ */ @Beta @Singleton -public class RevealResourceAction extends AbstractPerspectiveAction { +public class RevealResourceAction extends AbstractPerspectiveAction + implements ActivePartChangedHandler { private static final String PATH = "path"; @@ -51,6 +54,7 @@ public class RevealResourceAction extends AbstractPerspectiveAction { private final EventBus eventBus; private final Provider projectExplorerPresenterProvider; private final WorkspaceAgent workspaceAgent; + private PartPresenter activePart; @Inject public RevealResourceAction( @@ -67,11 +71,23 @@ public RevealResourceAction( this.eventBus = eventBus; this.projectExplorerPresenterProvider = projectExplorerPresenterProvider; this.workspaceAgent = workspaceAgent; + + eventBus.addHandler(ActivePartChangedEvent.TYPE, this); + } + + @Override + public void onActivePartChanged(ActivePartChangedEvent event) { + activePart = event.getActivePart(); } /** {@inheritDoc} */ @Override public void updateInPerspective(@NotNull ActionEvent event) { + if (!(activePart instanceof ProjectExplorerPresenter)) { + event.getPresentation().setVisible(false); + return; + } + final Resource[] resources = appContext.getResources(); event.getPresentation().setVisible(true); @@ -88,19 +104,19 @@ public void actionPerformed(ActionEvent e) { checkState(!path.isEmpty()); - ensureProjectExplorerPart(); + ensureProjectExplorerActive(); eventBus.fireEvent(new RevealResourceEvent(path)); } else { final Resource[] resources = appContext.getResources(); checkState(resources != null && resources.length == 1); - ensureProjectExplorerPart(); + ensureProjectExplorerActive(); eventBus.fireEvent(new RevealResourceEvent(resources[0])); } } - private void ensureProjectExplorerPart() { + private void ensureProjectExplorerActive() { PartStack navigationPartStack = workspaceAgent.getPartStack(NAVIGATION); PartPresenter activePart = navigationPartStack.getActivePart(); ProjectExplorerPresenter projectExplorerPresenter = projectExplorerPresenterProvider.get(); diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/DarkTheme.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/DarkTheme.java index eaf4ccdd9970..8cae364ba8f0 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/DarkTheme.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/DarkTheme.java @@ -1259,7 +1259,7 @@ public String currentSearchBlockBorderColor() { @Override public String openedFilesDropdownButtonBackground() { - return "rgba(51,55,59,0.50)"; + return "#242a3a"; } @Override @@ -1294,12 +1294,7 @@ public String openedFilesDropdownButtonActiveBorderColor() { @Override public String openedFilesDropdownListBackgroundColor() { - return "#292C2f"; - } - - @Override - public String openedFilesDropdownListBorderColor() { - return "#121416"; + return "#383f53"; } @Override @@ -1309,7 +1304,7 @@ public String openedFilesDropdownListShadowColor() { @Override public String openedFilesDropdownListTextColor() { - return "#AAAAAA"; + return "#e4e4e4"; } @Override @@ -1322,11 +1317,6 @@ public String openedFilesDropdownListHoverBackgroundColor() { return "rgba(215, 215, 215, 0.12)"; } - @Override - public String openedFilesDropdownListHoverTextColor() { - return "#FFFFFF"; - } - @Override public String radioButtonIconColor() { return this.getBlueIconColor(); diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/LightTheme.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/LightTheme.java index 133db91e09bd..5463c967a168 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/LightTheme.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/theme/LightTheme.java @@ -1269,11 +1269,6 @@ public String openedFilesDropdownListBackgroundColor() { return "#ECECEC"; } - @Override - public String openedFilesDropdownListBorderColor() { - return "#A4A4A4"; - } - @Override public String openedFilesDropdownListShadowColor() { return "rgba(0, 0, 0, 0.30)"; @@ -1294,11 +1289,6 @@ public String openedFilesDropdownListHoverBackgroundColor() { return "rgba(0, 0, 0, 0.12)"; } - @Override - public String openedFilesDropdownListHoverTextColor() { - return "#8E8E8E"; - } - @Override public String radioButtonIconColor() { return this.getBlueIconColor(); diff --git a/ide/che-core-ide-generators/pom.xml b/ide/che-core-ide-generators/pom.xml index c6a0be173b89..43ed42f5a0a3 100644 --- a/ide/che-core-ide-generators/pom.xml +++ b/ide/che-core-ide-generators/pom.xml @@ -16,7 +16,7 @@ che-core-ide-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.che.core che-core-ide-generators diff --git a/ide/che-core-ide-stacks/pom.xml b/ide/che-core-ide-stacks/pom.xml index a3e437d1b6f9..4763c50fec67 100644 --- a/ide/che-core-ide-stacks/pom.xml +++ b/ide/che-core-ide-stacks/pom.xml @@ -16,7 +16,7 @@ che-core-ide-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.che.core che-core-ide-stacks diff --git a/ide/che-core-ide-templates/pom.xml b/ide/che-core-ide-templates/pom.xml index af74c08afc17..2813b1ef0443 100644 --- a/ide/che-core-ide-templates/pom.xml +++ b/ide/che-core-ide-templates/pom.xml @@ -16,7 +16,7 @@ che-core-ide-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.che.core che-core-ide-templates diff --git a/ide/che-core-ide-ui/pom.xml b/ide/che-core-ide-ui/pom.xml index 4819b352aefe..79c3bef22148 100644 --- a/ide/che-core-ide-ui/pom.xml +++ b/ide/che-core-ide-ui/pom.xml @@ -16,7 +16,7 @@ che-core-ide-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.che.core che-core-ide-ui diff --git a/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/multisplitpanel/menu/MenuItemActionWidget.ui.xml b/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/multisplitpanel/menu/MenuItemActionWidget.ui.xml index d1ebc7074a1f..1f978586eafb 100644 --- a/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/multisplitpanel/menu/MenuItemActionWidget.ui.xml +++ b/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/multisplitpanel/menu/MenuItemActionWidget.ui.xml @@ -21,11 +21,10 @@ @eval openedFilesDropdownListTextColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListTextColor(); @eval openedFilesDropdownListCloseButtonColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListCloseButtonColor(); @eval openedFilesDropdownListHoverBackgroundColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListHoverBackgroundColor(); - @eval openedFilesDropdownListHoverTextColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListHoverTextColor(); .main { - height: 20px; - line-height: 20px; + height: 24px; + line-height: 24px; color: openedFilesDropdownListTextColor; position: relative; font-family: "Open Sans", sans-serif; @@ -38,7 +37,7 @@ overflow: hidden; position: absolute; left: 0px; - top: 0px; + top: 2px; } .icon svg { @@ -57,14 +56,13 @@ position: absolute; left: 22px; top: 0px; - height: 20px; - line-height: 20px; + height: 24px; + line-height: 24px; white-space: nowrap; } .main:HOVER { background-color: openedFilesDropdownListHoverBackgroundColor; - color: openedFilesDropdownListHoverTextColor; } diff --git a/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/multisplitpanel/menu/MenuItemWidget.ui.xml b/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/multisplitpanel/menu/MenuItemWidget.ui.xml index 434dd0d406b0..4e4db3ae6492 100644 --- a/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/multisplitpanel/menu/MenuItemWidget.ui.xml +++ b/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/multisplitpanel/menu/MenuItemWidget.ui.xml @@ -21,11 +21,10 @@ @eval openedFilesDropdownListTextColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListTextColor(); @eval openedFilesDropdownListCloseButtonColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListCloseButtonColor(); @eval openedFilesDropdownListHoverBackgroundColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListHoverBackgroundColor(); - @eval openedFilesDropdownListHoverTextColor org.eclipse.che.ide.api.theme.Style.theme.openedFilesDropdownListHoverTextColor(); .main { - height: 20px; - line-height: 20px; + height: 24px; + line-height: 24px; color: openedFilesDropdownListTextColor; position: relative; font-family: "Open Sans", sans-serif; @@ -38,7 +37,7 @@ overflow: hidden; position: absolute; left: 0px; - top: 0px; + top: 2px; } .icon svg { @@ -57,8 +56,8 @@ position: absolute; left: 22px; top: 0px; - height: 20px; - line-height: 20px; + height: 24px; + line-height: 24px; white-space: nowrap; } @@ -68,7 +67,7 @@ overflow: hidden; position: absolute; right: 0px; - top: 0px; + top: 2px; } .closeButton { @@ -98,7 +97,6 @@ .main:HOVER { background-color: openedFilesDropdownListHoverBackgroundColor; - color: openedFilesDropdownListHoverTextColor; } .main:HOVER .closePanel .closeButton svg { diff --git a/ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/dropdown/styles.css b/ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/dropdown/styles.css index e19536102d87..793d1e37c6ba 100644 --- a/ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/dropdown/styles.css +++ b/ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/dropdown/styles.css @@ -10,7 +10,7 @@ */ .menu { background-color: openedFilesDropdownListBackgroundColor; - border: 1px solid openedFilesDropdownListBorderColor; + border: none; box-shadow: 0 2px 2px 0 openedFilesDropdownListShadowColor; } diff --git a/ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/menubutton/button.css b/ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/menubutton/button.css index b7c4747d94b2..a56cd0edca03 100644 --- a/ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/menubutton/button.css +++ b/ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/menubutton/button.css @@ -51,9 +51,8 @@ .popupPanel { background-color: openedFilesDropdownListBackgroundColor; - border: 1px solid openedFilesDropdownListBorderColor; + border: none; box-shadow: 0 2px 2px 0 openedFilesDropdownListShadowColor; - border-radius: 0 0 3px 3px; font-size: 10px; font-weight: normal; font-style: normal; diff --git a/ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/multisplitpanel/menu/style.css b/ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/multisplitpanel/menu/style.css index 5bc9e367a404..a7b94e7fd4a6 100644 --- a/ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/multisplitpanel/menu/style.css +++ b/ide/che-core-ide-ui/src/main/resources/org/eclipse/che/ide/ui/multisplitpanel/menu/style.css @@ -10,9 +10,8 @@ */ .listItemPanel { background-color: openedFilesDropdownListBackgroundColor; - border: 1px solid openedFilesDropdownListBorderColor; + border: none; box-shadow: 0 2px 2px 0 openedFilesDropdownListShadowColor; - border-radius: 0 0 3px 3px; max-height: 300px; overflow-y: auto; width: 200px; diff --git a/ide/che-core-orion-editor/pom.xml b/ide/che-core-orion-editor/pom.xml index 9aa38c4adf45..378602283c14 100644 --- a/ide/che-core-orion-editor/pom.xml +++ b/ide/che-core-orion-editor/pom.xml @@ -16,7 +16,7 @@ che-core-ide-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-orion-editor gwt-lib diff --git a/ide/che-ide-core/pom.xml b/ide/che-ide-core/pom.xml index bb4fe278c19f..eb556dcb62fa 100644 --- a/ide/che-ide-core/pom.xml +++ b/ide/che-ide-core/pom.xml @@ -16,7 +16,7 @@ che-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../../pom.xml org.eclipse.che.core diff --git a/ide/che-ide-full/pom.xml b/ide/che-ide-full/pom.xml index ab7d368c1716..79724971ee09 100644 --- a/ide/che-ide-full/pom.xml +++ b/ide/che-ide-full/pom.xml @@ -16,7 +16,7 @@ che-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../../pom.xml org.eclipse.che.core diff --git a/ide/che-ide-gwt-app/pom.xml b/ide/che-ide-gwt-app/pom.xml index e52e4b363c15..1c83c53980c8 100644 --- a/ide/che-ide-gwt-app/pom.xml +++ b/ide/che-ide-gwt-app/pom.xml @@ -16,7 +16,7 @@ che-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../../pom.xml che-ide-gwt-app diff --git a/ide/commons-gwt/pom.xml b/ide/commons-gwt/pom.xml index 1865e49291af..affe9680d4ad 100644 --- a/ide/commons-gwt/pom.xml +++ b/ide/commons-gwt/pom.xml @@ -16,7 +16,7 @@ che-core-ide-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-commons-gwt Che Core :: Commons :: GWT diff --git a/ide/gwt-logger/pom.xml b/ide/gwt-logger/pom.xml index 1df764473e0d..1b4fc581b851 100644 --- a/ide/gwt-logger/pom.xml +++ b/ide/gwt-logger/pom.xml @@ -16,7 +16,7 @@ che-core-ide-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-gwt-logger gwt-lib diff --git a/ide/pom.xml b/ide/pom.xml index 363dea8544f5..de5124c0a5f2 100644 --- a/ide/pom.xml +++ b/ide/pom.xml @@ -16,7 +16,7 @@ che-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml org.eclipse.che.core diff --git a/infrastructures/docker/docker-client/pom.xml b/infrastructures/docker/docker-client/pom.xml index 9b4437de76c2..19077549f519 100644 --- a/infrastructures/docker/docker-client/pom.xml +++ b/infrastructures/docker/docker-client/pom.xml @@ -16,7 +16,7 @@ che-infrastructures-docker-parent org.eclipse.che.infrastructure.docker - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml docker-client diff --git a/infrastructures/docker/environment/pom.xml b/infrastructures/docker/environment/pom.xml index 44b8454cac8a..2369452a3d67 100644 --- a/infrastructures/docker/environment/pom.xml +++ b/infrastructures/docker/environment/pom.xml @@ -16,7 +16,7 @@ che-infrastructures-docker-parent org.eclipse.che.infrastructure.docker - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml docker-environment diff --git a/infrastructures/docker/infrastructure/pom.xml b/infrastructures/docker/infrastructure/pom.xml index eab1ceb98f72..fab84f445a34 100644 --- a/infrastructures/docker/infrastructure/pom.xml +++ b/infrastructures/docker/infrastructure/pom.xml @@ -16,7 +16,7 @@ che-infrastructures-docker-parent org.eclipse.che.infrastructure.docker - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml infrastructure-docker diff --git a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/DockerInfraModule.java b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/DockerInfraModule.java index d05ec675d10c..6435ccef4110 100644 --- a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/DockerInfraModule.java +++ b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/DockerInfraModule.java @@ -12,7 +12,9 @@ import com.google.inject.AbstractModule; import com.google.inject.assistedinject.FactoryModuleBuilder; +import com.google.inject.multibindings.MapBinder; import com.google.inject.multibindings.Multibinder; +import org.eclipse.che.api.workspace.server.URLRewriter; import org.eclipse.che.api.workspace.server.spi.RuntimeInfrastructure; import org.eclipse.che.api.workspace.server.spi.provision.env.CheApiEnvVarProvider; import org.eclipse.che.infrastructure.docker.client.DockerRegistryDynamicAuthResolver; @@ -32,6 +34,8 @@ import org.eclipse.che.workspace.infrastructure.docker.provisioner.proxy.ProxySettingsProvisioner; import org.eclipse.che.workspace.infrastructure.docker.provisioner.securityopt.SecurityOptProvisioner; import org.eclipse.che.workspace.infrastructure.docker.provisioner.volume.ExtraVolumesProvisioner; +import org.eclipse.che.workspace.infrastructure.docker.server.mapping.ExternalIpURLRewriter; +import org.eclipse.che.workspace.infrastructure.docker.server.mapping.SinglePortUrlRewriter; /** @author Alexander Garagatyi */ public class DockerInfraModule extends AbstractModule { @@ -67,5 +71,12 @@ protected void configure() { bind( org.eclipse.che.workspace.infrastructure.docker.monit.DockerAbandonedResourcesCleaner .class); + + MapBinder rewriters = + MapBinder.newMapBinder(binder(), String.class, URLRewriter.class); + rewriters.addBinding("default").to(ExternalIpURLRewriter.class); + rewriters.addBinding("singleport").to(SinglePortUrlRewriter.class); + + bind(URLRewriter.class).toProvider(UrlRewriterProvider.class); } } diff --git a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/DockerInternalRuntime.java b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/DockerInternalRuntime.java index e64b6d220098..57d622ff19e8 100644 --- a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/DockerInternalRuntime.java +++ b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/DockerInternalRuntime.java @@ -54,7 +54,6 @@ import org.eclipse.che.workspace.infrastructure.docker.monit.AbnormalMachineStopHandler; import org.eclipse.che.workspace.infrastructure.docker.monit.DockerMachineStopDetector; import org.eclipse.che.workspace.infrastructure.docker.network.NetworkLifecycle; -import org.eclipse.che.workspace.infrastructure.docker.server.mapping.ExternalIpURLRewriter; import org.slf4j.Logger; /** @@ -86,7 +85,7 @@ public class DockerInternalRuntime extends InternalRuntime public DockerInternalRuntime( @Assisted DockerRuntimeContext context, @Assisted List warnings, - ExternalIpURLRewriter urlRewriter, + URLRewriter urlRewriter, NetworkLifecycle networks, DockerMachineStarter machineStarter, EventService eventService, @@ -119,7 +118,7 @@ public DockerInternalRuntime( @Assisted DockerRuntimeContext context, @Assisted List containers, @Assisted List warnings, - ExternalIpURLRewriter urlRewriter, + URLRewriter urlRewriter, NetworkLifecycle networks, DockerMachineStarter machineStarter, EventService eventService, diff --git a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/DockerRuntimeContext.java b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/DockerRuntimeContext.java index d7fce55c98d1..be3a2eada660 100644 --- a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/DockerRuntimeContext.java +++ b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/DockerRuntimeContext.java @@ -18,13 +18,13 @@ import javax.inject.Named; import org.eclipse.che.api.core.ValidationException; import org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity; +import org.eclipse.che.api.workspace.server.URLRewriter; import org.eclipse.che.api.workspace.server.spi.InfrastructureException; import org.eclipse.che.api.workspace.server.spi.InternalInfrastructureException; import org.eclipse.che.api.workspace.server.spi.RuntimeContext; import org.eclipse.che.infrastructure.docker.client.json.ContainerListEntry; import org.eclipse.che.workspace.infrastructure.docker.container.DockerContainers; import org.eclipse.che.workspace.infrastructure.docker.model.DockerEnvironment; -import org.eclipse.che.workspace.infrastructure.docker.server.mapping.ExternalIpURLRewriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,7 +38,7 @@ public class DockerRuntimeContext extends RuntimeContext { private static final Logger LOG = LoggerFactory.getLogger(DockerRuntimeContext.class); - private final ExternalIpURLRewriter urlRewriter; + private final URLRewriter urlRewriter; private final String websocketOutputEndpoint; private final DockerRuntimeFactory runtimeFactory; private final DockerContainers containers; @@ -54,7 +54,7 @@ public DockerRuntimeContext( DockerContainers containers, DockerSharedPool sharedPool, RuntimeConsistencyChecker consistencyChecker, - ExternalIpURLRewriter urlRewriter, + URLRewriter urlRewriter, @Named("che.websocket.endpoint") String cheWebsocketEndpoint) throws InfrastructureException, ValidationException { @@ -70,7 +70,7 @@ public DockerRuntimeContext( @Override public URI getOutputChannel() throws InfrastructureException { try { - return URI.create(urlRewriter.rewriteURL(getIdentity(), null, websocketOutputEndpoint)); + return URI.create(urlRewriter.rewriteURL(getIdentity(), null, null, websocketOutputEndpoint)); } catch (IllegalArgumentException ex) { throw new InternalInfrastructureException( "Failed to get the output channel because: " + ex.getLocalizedMessage()); diff --git a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/UrlRewriterProvider.java b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/UrlRewriterProvider.java new file mode 100644 index 000000000000..e8ce5f041a08 --- /dev/null +++ b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/UrlRewriterProvider.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2012-2018 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.che.workspace.infrastructure.docker; + +import java.util.Map; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Provider; +import org.eclipse.che.api.workspace.server.URLRewriter; +import org.eclipse.che.commons.annotation.Nullable; + +/** @author Max Shaposhnik (mshaposh@redhat.com) */ +public class UrlRewriterProvider implements Provider { + + private URLRewriter instance; + private final String REWRITER_PROPERTY_NAME = "che.infra.docker.url_rewriter"; + + @Inject + public UrlRewriterProvider( + Map rewriters, + @Nullable @Named(REWRITER_PROPERTY_NAME) String rewriter) { + if (rewriter != null) { + this.instance = rewriters.get(rewriter); + } else { + this.instance = rewriters.get("default"); + } + + if (instance == null) { + throw new IllegalStateException( + String.format( + "Value of the property %s=%s doesn't match any installed URL rewriters.", + REWRITER_PROPERTY_NAME, rewriter)); + } + } + + @Override + public URLRewriter get() { + return instance; + } +} diff --git a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/local/LocalCheDockerEnvironmentProvisioner.java b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/local/LocalCheDockerEnvironmentProvisioner.java index 14753670d5a6..9407f776bd90 100644 --- a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/local/LocalCheDockerEnvironmentProvisioner.java +++ b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/local/LocalCheDockerEnvironmentProvisioner.java @@ -11,6 +11,7 @@ package org.eclipse.che.workspace.infrastructure.docker.local; import javax.inject.Inject; +import javax.inject.Named; import javax.inject.Singleton; import org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity; import org.eclipse.che.api.workspace.server.spi.InfrastructureException; @@ -23,6 +24,7 @@ import org.eclipse.che.workspace.infrastructure.docker.provisioner.ContainerSystemSettingsProvisionersApplier; import org.eclipse.che.workspace.infrastructure.docker.provisioner.env.EnvVarsConverter; import org.eclipse.che.workspace.infrastructure.docker.provisioner.labels.RuntimeLabelsProvisioner; +import org.eclipse.che.workspace.infrastructure.docker.provisioner.labels.SinglePortLabelsProvisioner; import org.eclipse.che.workspace.infrastructure.docker.provisioner.memory.MemoryAttributeConverter; import org.eclipse.che.workspace.infrastructure.docker.provisioner.server.ServersConverter; import org.eclipse.che.workspace.infrastructure.docker.provisioner.volume.VolumesConverter; @@ -36,12 +38,14 @@ @Singleton public class LocalCheDockerEnvironmentProvisioner implements DockerEnvironmentProvisioner { + private final boolean isSinglePortEnabled; private final ContainerSystemSettingsProvisionersApplier dockerSettingsProvisioners; private final BindMountProjectsVolumeProvisioner hostMountingProjectsVolumeProvisioner; private final LocalInstallersBinariesVolumeProvisioner installersBinariesVolumeProvisioner; private final RuntimeLabelsProvisioner runtimeLabelsProvisioner; private final DockerApiHostEnvVariableProvisioner dockerApiEnvProvisioner; private final WsAgentServerConfigProvisioner wsAgentServerConfigProvisioner; + private final SinglePortLabelsProvisioner singlePortLabelsProvisioner; private final ServersConverter serversConverter; private final EnvVarsConverter envVarsConverter; private final MemoryAttributeConverter memoryAttributeConverter; @@ -49,23 +53,27 @@ public class LocalCheDockerEnvironmentProvisioner implements DockerEnvironmentPr @Inject public LocalCheDockerEnvironmentProvisioner( + @Named("che.single.port") boolean isSinglePortEnabled, ContainerSystemSettingsProvisionersApplier dockerSettingsProvisioners, BindMountProjectsVolumeProvisioner hostMountingProjectsVolumeProvisioner, LocalInstallersBinariesVolumeProvisioner installersBinariesVolumeProvisioner, RuntimeLabelsProvisioner runtimeLabelsProvisioner, DockerApiHostEnvVariableProvisioner dockerApiEnvProvisioner, WsAgentServerConfigProvisioner wsAgentServerConfigProvisioner, + SinglePortLabelsProvisioner singlePortLabelsProvisioner, ServersConverter serversConverter, EnvVarsConverter envVarsConverter, MemoryAttributeConverter memoryAttributeConverter, VolumesConverter volumesConverter) { + this.isSinglePortEnabled = isSinglePortEnabled; this.dockerSettingsProvisioners = dockerSettingsProvisioners; this.hostMountingProjectsVolumeProvisioner = hostMountingProjectsVolumeProvisioner; this.installersBinariesVolumeProvisioner = installersBinariesVolumeProvisioner; this.runtimeLabelsProvisioner = runtimeLabelsProvisioner; this.dockerApiEnvProvisioner = dockerApiEnvProvisioner; this.wsAgentServerConfigProvisioner = wsAgentServerConfigProvisioner; + this.singlePortLabelsProvisioner = singlePortLabelsProvisioner; this.serversConverter = serversConverter; this.envVarsConverter = envVarsConverter; this.memoryAttributeConverter = memoryAttributeConverter; @@ -90,5 +98,8 @@ public void provision(DockerEnvironment internalEnv, RuntimeIdentity identity) wsAgentServerConfigProvisioner.provision(internalEnv, identity); dockerSettingsProvisioners.provision(internalEnv, identity); dockerApiEnvProvisioner.provision(internalEnv, identity); + if (isSinglePortEnabled) { + singlePortLabelsProvisioner.provision(internalEnv, identity); + } } } diff --git a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/provisioner/labels/SinglePortLabelsProvisioner.java b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/provisioner/labels/SinglePortLabelsProvisioner.java new file mode 100644 index 000000000000..f5f3dcf9ad8e --- /dev/null +++ b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/provisioner/labels/SinglePortLabelsProvisioner.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2012-2018 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.che.workspace.infrastructure.docker.provisioner.labels; + +import static java.lang.Boolean.parseBoolean; +import static java.lang.String.format; +import static org.eclipse.che.api.core.model.workspace.config.ServerConfig.INTERNAL_SERVER_ATTRIBUTE; + +import java.util.HashMap; +import java.util.Map; +import javax.inject.Inject; +import javax.inject.Named; +import org.eclipse.che.api.core.model.workspace.config.ServerConfig; +import org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity; +import org.eclipse.che.api.workspace.server.spi.InfrastructureException; +import org.eclipse.che.api.workspace.server.spi.environment.InternalMachineConfig; +import org.eclipse.che.commons.annotation.Nullable; +import org.eclipse.che.workspace.infrastructure.docker.model.DockerContainerConfig; +import org.eclipse.che.workspace.infrastructure.docker.model.DockerEnvironment; +import org.eclipse.che.workspace.infrastructure.docker.provisioner.ConfigurationProvisioner; +import org.eclipse.che.workspace.infrastructure.docker.server.mapping.SinglePortHostnameBuilder; + +/** + * Sets necessary container labels for the single-port proxy (Traefik). + * + * @author Max Shaposhnik (mshaposh@redhat.com) + */ +public class SinglePortLabelsProvisioner implements ConfigurationProvisioner { + + private final SinglePortHostnameBuilder hostnameBuilder; + private final String internalIpOfContainers; + private final String externalIpOfContainers; + + @Inject + public SinglePortLabelsProvisioner( + @Named("che.docker.ip") String internalIpOfContainers, + @Nullable @Named("che.docker.ip.external") String externalIpOfContainers, + @Nullable @Named("che.singleport.wildcard_domain.host") String wildcardHost) { + this.hostnameBuilder = + new SinglePortHostnameBuilder(externalIpOfContainers, internalIpOfContainers, wildcardHost); + this.internalIpOfContainers = internalIpOfContainers; + this.externalIpOfContainers = externalIpOfContainers; + } + + @Override + public void provision(DockerEnvironment internalEnv, RuntimeIdentity identity) + throws InfrastructureException { + for (Map.Entry machineEntry : + internalEnv.getMachines().entrySet()) { + final String machineName = machineEntry.getKey(); + Map containerLabels = new HashMap<>(); + for (Map.Entry serverEntry : + machineEntry.getValue().getServers().entrySet()) { + // skip internal servers + if (parseBoolean(serverEntry.getValue().getAttributes().get(INTERNAL_SERVER_ATTRIBUTE))) { + continue; + } + final String host = + hostnameBuilder.build(serverEntry.getKey(), machineName, identity.getWorkspaceId()); + final String serviceName = getServiceName(host); + final String port = serverEntry.getValue().getPort().split("/")[0]; + + containerLabels.put(format("traefik.%s.port", serviceName), port); + containerLabels.put(format("traefik.%s.frontend.entryPoints", serviceName), "http"); + containerLabels.put(format("traefik.%s.frontend.rule", serviceName), "Host:" + host); + // Needed to activate per-service rules + containerLabels.put("traefik.frontend.rule", machineName); + } + DockerContainerConfig dockerConfig = internalEnv.getContainers().get(machineName); + dockerConfig.getLabels().putAll(containerLabels); + } + } + + /** + * Constructs unique traefik service name - contains server, machine names and workspace ID. Dots + * is not allowed and replaced by dashes. Result is like: + * exec-agent-http-dev-machine-workspaceao6k83hkdav975g5 + */ + private String getServiceName(String host) { + int idx = + (externalIpOfContainers != null && host.contains(externalIpOfContainers)) + ? host.indexOf(externalIpOfContainers) + : host.indexOf(internalIpOfContainers); + return host.substring(0, idx - 1).replaceAll("\\.", "-"); + } +} diff --git a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/ExternalIpURLRewriter.java b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/ExternalIpURLRewriter.java index 5288b64ea2e8..d5dee77f8cd7 100644 --- a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/ExternalIpURLRewriter.java +++ b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/ExternalIpURLRewriter.java @@ -47,7 +47,11 @@ public ExternalIpURLRewriter( } @Override - public String rewriteURL(@Nullable RuntimeIdentity identity, @Nullable String name, String url) + public String rewriteURL( + @Nullable RuntimeIdentity identity, + @Nullable String machineName, + @Nullable String serverName, + String url) throws InfrastructureException { if (externalIpOfContainers != null) { diff --git a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/SinglePortHostnameBuilder.java b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/SinglePortHostnameBuilder.java new file mode 100644 index 000000000000..fa258cfcc29c --- /dev/null +++ b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/SinglePortHostnameBuilder.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2012-2018 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.che.workspace.infrastructure.docker.server.mapping; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.StringJoiner; +import java.util.regex.Pattern; + +/** + * Produces host names in form: + * [serverName].[machineName].[workspaceId].. If + * some of the server name or machine name or workspace id is null, they will be not included. + * + * @author Max Shaposhnik (mshaposh@redhat.com) + */ +public class SinglePortHostnameBuilder { + + private final String wildcardDomain; + + /** + * hostname labels may contain only the ASCII letters 'a' through 'z' (in a case-insensitive + * manner), the digits '0' through '9', and the hyphen ('-'). + */ + private final Pattern pattern = Pattern.compile("[^a-zA-Z0-9\\-]"); + + public SinglePortHostnameBuilder( + String externalAddress, String internalAddress, String wildcardHost) { + this.wildcardDomain = + externalAddress != null + ? getWildcardDomain(externalAddress, wildcardHost) + : getWildcardDomain(internalAddress, wildcardHost); + } + + /** + * Constructs hostname from given params. + * + * @param serverName optional server name + * @param machineName optional machine name + * @param workspaceID optional workspace ID + * @return composite hostname + */ + public String build(String serverName, String machineName, String workspaceID) { + StringJoiner joiner = new StringJoiner("."); + if (serverName != null) { + joiner.add(normalize(serverName)); + } + if (machineName != null) { + joiner.add(normalize(machineName)); + } + if (workspaceID != null) { + joiner.add(normalize(workspaceID)); + } + joiner.add(wildcardDomain); + return joiner.toString(); + } + + /** + * Gets a Wildcard domain based on the ip using an external provider like nip.io + * + * @return wildcard domain + */ + private String getWildcardDomain(String localAddress, String wildcardHost) { + return String.format( + "%s.%s", getExternalIp(localAddress), wildcardHost == null ? "nip.io" : wildcardHost); + } + + private String getExternalIp(String localAddress) { + try { + return InetAddress.getByName(localAddress).getHostAddress(); + } catch (UnknownHostException e) { + throw new UnsupportedOperationException( + "Unable to find the IP for the address '" + localAddress + "'", e); + } + } + + private String normalize(String input) { + String normalized = pattern.matcher(input).replaceAll("-"); + // Check not starts or ends with hyphen + while (normalized.startsWith("-")) { + normalized = normalized.substring(1); + } + while (normalized.endsWith("-")) { + normalized = normalized.substring(0, normalized.length() - 1); + } + return normalized; + } +} diff --git a/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/SinglePortUrlRewriter.java b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/SinglePortUrlRewriter.java new file mode 100644 index 000000000000..0aea99aee7f4 --- /dev/null +++ b/infrastructures/docker/infrastructure/src/main/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/SinglePortUrlRewriter.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2012-2018 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.che.workspace.infrastructure.docker.server.mapping; + +import static java.lang.String.format; + +import java.net.URI; +import javax.inject.Inject; +import javax.inject.Named; +import javax.ws.rs.core.UriBuilder; +import javax.ws.rs.core.UriBuilderException; +import org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity; +import org.eclipse.che.api.workspace.server.URLRewriter; +import org.eclipse.che.api.workspace.server.spi.InfrastructureException; +import org.eclipse.che.api.workspace.server.spi.InternalInfrastructureException; +import org.eclipse.che.commons.annotation.Nullable; + +/** + * {@link URLRewriter} used in case when single port mode is on. Rewrites host in original URL as + * provided by {@link SinglePortHostnameBuilder} + * + * @author Max Shaposhnik (mshaposh@redhat.com) + */ +public class SinglePortUrlRewriter implements URLRewriter { + + private final SinglePortHostnameBuilder hostnameBuilder; + private final String wildcartPort; + private final int chePort; + + @Inject + public SinglePortUrlRewriter( + @Named("che.docker.ip") String internalIpOfContainers, + @Named("che.port") int chePort, + @Nullable @Named("che.docker.ip.external") String externalIpOfContainers, + @Nullable @Named("che.singleport.wildcard_domain.host") String wildcardHost, + @Nullable @Named("che.singleport.wildcard_domain.port") String wildcardPort) { + this.hostnameBuilder = + new SinglePortHostnameBuilder(externalIpOfContainers, internalIpOfContainers, wildcardHost); + this.chePort = chePort; + this.wildcartPort = wildcardPort; + } + + @Override + public String rewriteURL( + @Nullable RuntimeIdentity identity, + @Nullable String machineName, + @Nullable String serverName, + String url) + throws InfrastructureException { + final String host = hostnameBuilder.build(serverName, machineName, identity.getWorkspaceId()); + try { + int port = wildcartPort != null ? Integer.parseInt(wildcartPort) : chePort; + URI uri = UriBuilder.fromUri(url).host(host).port(port).build(); + url = uri.toString(); + } catch (UriBuilderException | IllegalArgumentException e) { + throw new InternalInfrastructureException( + format( + "Rewriting of host '%s' in URL '%s' failed. Error: %s", host, url, e.getMessage())); + } + return url; + } +} diff --git a/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/local/LocalCheDockerEnvironmentProvisionerTest.java b/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/local/LocalCheDockerEnvironmentProvisionerTest.java index 5a99bac5f9e2..8d800776060e 100644 --- a/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/local/LocalCheDockerEnvironmentProvisionerTest.java +++ b/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/local/LocalCheDockerEnvironmentProvisionerTest.java @@ -21,6 +21,7 @@ import org.eclipse.che.workspace.infrastructure.docker.provisioner.ContainerSystemSettingsProvisionersApplier; import org.eclipse.che.workspace.infrastructure.docker.provisioner.env.EnvVarsConverter; import org.eclipse.che.workspace.infrastructure.docker.provisioner.labels.RuntimeLabelsProvisioner; +import org.eclipse.che.workspace.infrastructure.docker.provisioner.labels.SinglePortLabelsProvisioner; import org.eclipse.che.workspace.infrastructure.docker.provisioner.memory.MemoryAttributeConverter; import org.eclipse.che.workspace.infrastructure.docker.provisioner.server.ServersConverter; import org.eclipse.che.workspace.infrastructure.docker.provisioner.volume.VolumesConverter; @@ -48,6 +49,7 @@ public class LocalCheDockerEnvironmentProvisionerTest { @Mock private EnvVarsConverter envVarsConverter; @Mock private MemoryAttributeConverter memoryAttributeConverter; @Mock private VolumesConverter volumesConverter; + @Mock private SinglePortLabelsProvisioner singlePortLabelsProvisioner; private LocalCheDockerEnvironmentProvisioner provisioner; @@ -57,12 +59,14 @@ public class LocalCheDockerEnvironmentProvisionerTest { public void setUp() throws Exception { provisioner = new LocalCheDockerEnvironmentProvisioner( + true, settingsProvisioners, projectsVolumeProvisioner, installerConfigProvisioner, labelsProvisioner, dockerApiEnvProvisioner, wsAgentServerConfigProvisioner, + singlePortLabelsProvisioner, serversConverter, envVarsConverter, memoryAttributeConverter, @@ -79,7 +83,8 @@ public void setUp() throws Exception { serversConverter, envVarsConverter, memoryAttributeConverter, - volumesConverter + volumesConverter, + singlePortLabelsProvisioner }; } @@ -104,6 +109,9 @@ public void shouldCallProvisionersInSpecificOrder() throws Exception { .provision(eq(dockerEnvironment), eq(runtimeIdentity)); inOrder.verify(settingsProvisioners).provision(eq(dockerEnvironment), eq(runtimeIdentity)); inOrder.verify(dockerApiEnvProvisioner).provision(eq(dockerEnvironment), eq(runtimeIdentity)); + inOrder + .verify(singlePortLabelsProvisioner) + .provision(eq(dockerEnvironment), eq(runtimeIdentity)); inOrder.verifyNoMoreInteractions(); } } diff --git a/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/ExternalIpURLRewriterTest.java b/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/ExternalIpURLRewriterTest.java index 953a54b33c10..6a053ae618a9 100644 --- a/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/ExternalIpURLRewriterTest.java +++ b/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/ExternalIpURLRewriterTest.java @@ -23,7 +23,7 @@ public void shouldRewriteURL(String externalIP, String incomeURL, String expecte throws Exception { ExternalIpURLRewriter rewriter = new ExternalIpURLRewriter(externalIP); - String rewrittenURL = rewriter.rewriteURL(null, null, incomeURL); + String rewrittenURL = rewriter.rewriteURL(null, null, null, incomeURL); assertEquals(rewrittenURL, expectedURL); } @@ -51,7 +51,7 @@ public void shouldNotRewriteURLIfExternalIpIsNoConfigured() throws Exception { String toRewrite = "https://google.com:8080/some/path?param=value"; ExternalIpURLRewriter rewriter = new ExternalIpURLRewriter(null); - String rewrittenURL = rewriter.rewriteURL(null, null, toRewrite); + String rewrittenURL = rewriter.rewriteURL(null, null, null, toRewrite); assertEquals(rewrittenURL, toRewrite); } @@ -64,6 +64,6 @@ public void shouldThrowExceptionWhenRewritingFails() throws Exception { String toRewrite = ":"; ExternalIpURLRewriter rewriter = new ExternalIpURLRewriter("localhost"); - rewriter.rewriteURL(null, null, toRewrite); + rewriter.rewriteURL(null, null, null, toRewrite); } } diff --git a/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/SinglePortUrlBuilderTest.java b/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/SinglePortUrlBuilderTest.java new file mode 100644 index 000000000000..0efe6d9a7cde --- /dev/null +++ b/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/SinglePortUrlBuilderTest.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2012-2018 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.che.workspace.infrastructure.docker.server.mapping; + +import static org.testng.Assert.assertEquals; + +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +/** @author Max Shaposhnik (mshaposh@redhat.com) */ +public class SinglePortUrlBuilderTest { + + @Test(dataProvider = "hostnameBuilderTestProvider") + public void shouldRewriteURL( + String externalIP, + String internalIp, + String machineName, + String serverName, + String workspaceId, + String wildcardHost, + String expectedHost) + throws Exception { + SinglePortHostnameBuilder builder = + new SinglePortHostnameBuilder(externalIP, internalIp, wildcardHost); + + String host = builder.build(serverName, machineName, workspaceId); + + assertEquals(host, expectedHost); + } + + @DataProvider(name = "hostnameBuilderTestProvider") + public static Object[][] urlRewritingTestProvider() { + return new Object[][] { + // External IP + { + "172.12.0.2", + "127.0.0.1", + "machine1", + "exec/http", + "ws123", + "my.io", + "exec-http.machine1.ws123.172.12.0.2.my.io" + }, + // Normalizing of hostname parts + { + "172.12.0.2", + "127.0.0.1", + "ma#chi$ne%1", + "%%exec/http::", + "[ws123]", + "my.io", + "exec-http.ma-chi-ne-1.ws123.172.12.0.2.my.io" + }, + // Internal IP, wildcard + { + null, + "127.0.0.1", + "machine1", + "exec/ws", + "ws123", + null, + "exec-ws.machine1.ws123.127.0.0.1.nip.io" + }, + // Without machine name + {null, "127.0.0.1", null, "exec/ws", "ws123", null, "exec-ws.ws123.127.0.0.1.nip.io"}, + // Without server + {null, "127.0.0.1", "machine1", null, "ws123", null, "machine1.ws123.127.0.0.1.nip.io"}, + // Without workspace id + {null, "127.0.0.1", "machine1", "exec/ws", null, null, "exec-ws.machine1.127.0.0.1.nip.io"} + }; + } +} diff --git a/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/SinglePortUrlRewriterTest.java b/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/SinglePortUrlRewriterTest.java new file mode 100644 index 000000000000..b5816957adc1 --- /dev/null +++ b/infrastructures/docker/infrastructure/src/test/java/org/eclipse/che/workspace/infrastructure/docker/server/mapping/SinglePortUrlRewriterTest.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2012-2018 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.che.workspace.infrastructure.docker.server.mapping; + +import static org.testng.Assert.assertEquals; + +import org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity; +import org.eclipse.che.api.workspace.server.model.impl.RuntimeIdentityImpl; +import org.eclipse.che.api.workspace.server.spi.InternalInfrastructureException; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +/** @author Max Shaposhnik (mshaposh@redhat.com) */ +public class SinglePortUrlRewriterTest { + + @Test(dataProvider = "urlRewritingTestProvider") + public void shouldRewriteURL( + RuntimeIdentity identity, + String externalIP, + String internalIp, + String machineName, + String serverName, + String nioHost, + String nioPort, + String incomeURL, + String expectedURL) + throws Exception { + SinglePortUrlRewriter rewriter = + new SinglePortUrlRewriter(externalIP, 8080, internalIp, nioHost, nioPort); + + String rewrittenURL = rewriter.rewriteURL(identity, machineName, serverName, incomeURL); + + assertEquals(rewrittenURL, expectedURL); + } + + @DataProvider(name = "urlRewritingTestProvider") + public static Object[][] urlRewritingTestProvider() { + return new Object[][] { + // External IP + { + new RuntimeIdentityImpl("ws123", null, null), + "127.0.0.1", + "172.12.0.2", + "machine1", + "exec/http", + "my.io", + "3128", + "http://127.0.0.1:8080/path", + "http://exec-http.machine1.ws123.172.12.0.2.my.io:3128/path" + }, + // Internal IP, protocol, path param + { + new RuntimeIdentityImpl("ws123", null, null), + "127.0.0.1", + null, + "machine1", + "exec/ws", + null, + null, + "tcp://127.0.0.1:8080/path?param", + "tcp://exec-ws.machine1.ws123.127.0.0.1.nip.io:8080/path?param" + }, + // Without machine name + { + new RuntimeIdentityImpl("ws123", null, null), + "127.0.0.1", + null, + null, + "server/some", + null, + null, + "tcp://127.0.0.1:8080/path?param", + "tcp://server-some.ws123.127.0.0.1.nip.io:8080/path?param" + }, + // Without server + { + new RuntimeIdentityImpl("ws123", null, null), + "127.0.0.1", + null, + "machine1", + null, + null, + null, + "tcp://127.0.0.1:8080/path?param", + "tcp://machine1.ws123.127.0.0.1.nip.io:8080/path?param" + }, + }; + } + + @Test( + expectedExceptions = InternalInfrastructureException.class, + expectedExceptionsMessageRegExp = + "Rewriting of host 'server.machine1.ws123.172.12.0.2.nip.io' in URL ':' failed. Error: .*" + ) + public void shouldThrowExceptionWhenRewritingFails() throws Exception { + SinglePortUrlRewriter rewriter = + new SinglePortUrlRewriter("127.0.0.1", 8080, "172.12.0.2", null, null); + rewriter.rewriteURL(new RuntimeIdentityImpl("ws123", null, null), "machine1", "server", ":"); + } +} diff --git a/infrastructures/docker/pom.xml b/infrastructures/docker/pom.xml index 8ee43b71aa86..edd04bef7615 100644 --- a/infrastructures/docker/pom.xml +++ b/infrastructures/docker/pom.xml @@ -16,7 +16,7 @@ che-infrastructures-parent org.eclipse.che.infrastructure - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml org.eclipse.che.infrastructure.docker diff --git a/infrastructures/openshift/pom.xml b/infrastructures/openshift/pom.xml index f4d4c600f3a7..16f358462d53 100644 --- a/infrastructures/openshift/pom.xml +++ b/infrastructures/openshift/pom.xml @@ -16,7 +16,7 @@ che-infrastructures-parent org.eclipse.che.infrastructure - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml infrastructure-openshift diff --git a/infrastructures/pom.xml b/infrastructures/pom.xml index 0b5f9658c675..5c1932273f55 100644 --- a/infrastructures/pom.xml +++ b/infrastructures/pom.xml @@ -16,7 +16,7 @@ che-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml org.eclipse.che.infrastructure diff --git a/multiuser/api/che-multiuser-api-authorization-impl/pom.xml b/multiuser/api/che-multiuser-api-authorization-impl/pom.xml index 862602b4df71..5eeea0dfdd98 100644 --- a/multiuser/api/che-multiuser-api-authorization-impl/pom.xml +++ b/multiuser/api/che-multiuser-api-authorization-impl/pom.xml @@ -16,7 +16,7 @@ che-multiuser-api org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-api-authorization-impl jar diff --git a/multiuser/api/che-multiuser-api-authorization/pom.xml b/multiuser/api/che-multiuser-api-authorization/pom.xml index 442c0cbaf7e7..510912ee3c94 100644 --- a/multiuser/api/che-multiuser-api-authorization/pom.xml +++ b/multiuser/api/che-multiuser-api-authorization/pom.xml @@ -16,7 +16,7 @@ che-multiuser-api org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-api-authorization jar diff --git a/multiuser/api/che-multiuser-api-organization-shared/pom.xml b/multiuser/api/che-multiuser-api-organization-shared/pom.xml index 8a1ad289d8b8..e53b9c8836f1 100644 --- a/multiuser/api/che-multiuser-api-organization-shared/pom.xml +++ b/multiuser/api/che-multiuser-api-organization-shared/pom.xml @@ -16,7 +16,7 @@ che-multiuser-api org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-api-organization-shared jar diff --git a/multiuser/api/che-multiuser-api-organization/pom.xml b/multiuser/api/che-multiuser-api-organization/pom.xml index 52e2e6611724..a6e25b086a11 100644 --- a/multiuser/api/che-multiuser-api-organization/pom.xml +++ b/multiuser/api/che-multiuser-api-organization/pom.xml @@ -16,7 +16,7 @@ che-multiuser-api org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-api-organization jar diff --git a/multiuser/api/che-multiuser-api-permission-shared/pom.xml b/multiuser/api/che-multiuser-api-permission-shared/pom.xml index 9e529587e4c3..25a508121801 100644 --- a/multiuser/api/che-multiuser-api-permission-shared/pom.xml +++ b/multiuser/api/che-multiuser-api-permission-shared/pom.xml @@ -16,7 +16,7 @@ che-multiuser-api org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-api-permission-shared jar diff --git a/multiuser/api/che-multiuser-api-permission/pom.xml b/multiuser/api/che-multiuser-api-permission/pom.xml index 12e7a91422bf..b4477db64303 100644 --- a/multiuser/api/che-multiuser-api-permission/pom.xml +++ b/multiuser/api/che-multiuser-api-permission/pom.xml @@ -16,7 +16,7 @@ che-multiuser-api org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-api-permission jar diff --git a/multiuser/api/che-multiuser-api-resource-shared/pom.xml b/multiuser/api/che-multiuser-api-resource-shared/pom.xml index 99057138993c..5e29df56511d 100644 --- a/multiuser/api/che-multiuser-api-resource-shared/pom.xml +++ b/multiuser/api/che-multiuser-api-resource-shared/pom.xml @@ -16,7 +16,7 @@ che-multiuser-api org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-api-resource-shared jar diff --git a/multiuser/api/che-multiuser-api-resource/pom.xml b/multiuser/api/che-multiuser-api-resource/pom.xml index 5994472073ed..c3c6ca6c6877 100644 --- a/multiuser/api/che-multiuser-api-resource/pom.xml +++ b/multiuser/api/che-multiuser-api-resource/pom.xml @@ -16,7 +16,7 @@ che-multiuser-api org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-api-resource jar diff --git a/multiuser/api/pom.xml b/multiuser/api/pom.xml index 4e5a6451ed74..d695c212b69e 100644 --- a/multiuser/api/pom.xml +++ b/multiuser/api/pom.xml @@ -16,7 +16,7 @@ che-multiuser-parent org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-multiuser-api diff --git a/multiuser/integration-tests/che-multiuser-cascade-removal/pom.xml b/multiuser/integration-tests/che-multiuser-cascade-removal/pom.xml index dec2d123c6df..eb019ee385b0 100644 --- a/multiuser/integration-tests/che-multiuser-cascade-removal/pom.xml +++ b/multiuser/integration-tests/che-multiuser-cascade-removal/pom.xml @@ -16,7 +16,7 @@ che-multiuser-integration-tests org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-cascade-removal jar diff --git a/multiuser/integration-tests/che-multiuser-postgresql-tck/pom.xml b/multiuser/integration-tests/che-multiuser-postgresql-tck/pom.xml index 81de46d09ba5..b9782b082a76 100644 --- a/multiuser/integration-tests/che-multiuser-postgresql-tck/pom.xml +++ b/multiuser/integration-tests/che-multiuser-postgresql-tck/pom.xml @@ -16,7 +16,7 @@ che-multiuser-integration-tests org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-postgresql-tck jar diff --git a/multiuser/integration-tests/pom.xml b/multiuser/integration-tests/pom.xml index 1cc6400550b1..c9d59420486d 100644 --- a/multiuser/integration-tests/pom.xml +++ b/multiuser/integration-tests/pom.xml @@ -16,7 +16,7 @@ che-multiuser-parent org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-integration-tests pom diff --git a/multiuser/keycloak/che-multiuser-keycloak-ide/pom.xml b/multiuser/keycloak/che-multiuser-keycloak-ide/pom.xml index 30134e91ca98..7b7d8367e05f 100644 --- a/multiuser/keycloak/che-multiuser-keycloak-ide/pom.xml +++ b/multiuser/keycloak/che-multiuser-keycloak-ide/pom.xml @@ -16,7 +16,7 @@ che-multiuser-keycloak org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-multiuser-keycloak-ide diff --git a/multiuser/keycloak/che-multiuser-keycloak-server/pom.xml b/multiuser/keycloak/che-multiuser-keycloak-server/pom.xml index 80315f19a5a4..bdf2ccea1a3f 100644 --- a/multiuser/keycloak/che-multiuser-keycloak-server/pom.xml +++ b/multiuser/keycloak/che-multiuser-keycloak-server/pom.xml @@ -16,7 +16,7 @@ che-multiuser-keycloak org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-keycloak-server jar diff --git a/multiuser/keycloak/che-multiuser-keycloak-shared/pom.xml b/multiuser/keycloak/che-multiuser-keycloak-shared/pom.xml index af2f459f4ceb..3a6c3720f21d 100644 --- a/multiuser/keycloak/che-multiuser-keycloak-shared/pom.xml +++ b/multiuser/keycloak/che-multiuser-keycloak-shared/pom.xml @@ -16,7 +16,7 @@ che-multiuser-keycloak org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-keycloak-shared jar diff --git a/multiuser/keycloak/che-multiuser-keycloak-token-provider/pom.xml b/multiuser/keycloak/che-multiuser-keycloak-token-provider/pom.xml index 76346fe6d269..15ed90fb6cf3 100644 --- a/multiuser/keycloak/che-multiuser-keycloak-token-provider/pom.xml +++ b/multiuser/keycloak/che-multiuser-keycloak-token-provider/pom.xml @@ -16,7 +16,7 @@ che-multiuser-keycloak org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-keycloak-token-provider Che Multiuser :: Keycloak Token Provider diff --git a/multiuser/keycloak/pom.xml b/multiuser/keycloak/pom.xml index c4205dbb9f04..38fe54b54298 100644 --- a/multiuser/keycloak/pom.xml +++ b/multiuser/keycloak/pom.xml @@ -16,7 +16,7 @@ che-multiuser-parent org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-multiuser-keycloak diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication-agent/pom.xml b/multiuser/machine-auth/che-multiuser-machine-authentication-agent/pom.xml index 3ca62ed54eb5..c1a7678cd10f 100644 --- a/multiuser/machine-auth/che-multiuser-machine-authentication-agent/pom.xml +++ b/multiuser/machine-auth/che-multiuser-machine-authentication-agent/pom.xml @@ -16,7 +16,7 @@ che-multiuser-machine-auth org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-machine-authentication-agent Che Multiuser :: Machine Authentication Agent diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication-ide/pom.xml b/multiuser/machine-auth/che-multiuser-machine-authentication-ide/pom.xml index 2af6c69677df..66b9e1347e56 100644 --- a/multiuser/machine-auth/che-multiuser-machine-authentication-ide/pom.xml +++ b/multiuser/machine-auth/che-multiuser-machine-authentication-ide/pom.xml @@ -16,7 +16,7 @@ che-multiuser-machine-auth org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-machine-authentication-ide gwt-lib diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication-shared/pom.xml b/multiuser/machine-auth/che-multiuser-machine-authentication-shared/pom.xml index 7173867b322b..e21ed4b34c7f 100644 --- a/multiuser/machine-auth/che-multiuser-machine-authentication-shared/pom.xml +++ b/multiuser/machine-auth/che-multiuser-machine-authentication-shared/pom.xml @@ -16,7 +16,7 @@ che-multiuser-machine-auth org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-machine-authentication-shared jar diff --git a/multiuser/machine-auth/che-multiuser-machine-authentication/pom.xml b/multiuser/machine-auth/che-multiuser-machine-authentication/pom.xml index a0ad99842997..72a406c25112 100644 --- a/multiuser/machine-auth/che-multiuser-machine-authentication/pom.xml +++ b/multiuser/machine-auth/che-multiuser-machine-authentication/pom.xml @@ -16,7 +16,7 @@ che-multiuser-machine-auth org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-machine-authentication jar diff --git a/multiuser/machine-auth/pom.xml b/multiuser/machine-auth/pom.xml index 23013e061f59..086d40aca514 100644 --- a/multiuser/machine-auth/pom.xml +++ b/multiuser/machine-auth/pom.xml @@ -16,7 +16,7 @@ che-multiuser-parent org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-multiuser-machine-auth diff --git a/multiuser/permission/che-multiuser-permission-factory/pom.xml b/multiuser/permission/che-multiuser-permission-factory/pom.xml index 51283e107637..c16573d7d64b 100644 --- a/multiuser/permission/che-multiuser-permission-factory/pom.xml +++ b/multiuser/permission/che-multiuser-permission-factory/pom.xml @@ -16,7 +16,7 @@ che-multiuser-permission org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-permission-factory Che Multiuser :: Factory Permissions diff --git a/multiuser/permission/che-multiuser-permission-resource/pom.xml b/multiuser/permission/che-multiuser-permission-resource/pom.xml index feae77e758ae..b7deb31860ba 100644 --- a/multiuser/permission/che-multiuser-permission-resource/pom.xml +++ b/multiuser/permission/che-multiuser-permission-resource/pom.xml @@ -16,7 +16,7 @@ che-multiuser-permission org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-permission-resource Che Multiuser :: Resource :: Permissions diff --git a/multiuser/permission/che-multiuser-permission-system/pom.xml b/multiuser/permission/che-multiuser-permission-system/pom.xml index 5d144c0d733d..550e7392facf 100644 --- a/multiuser/permission/che-multiuser-permission-system/pom.xml +++ b/multiuser/permission/che-multiuser-permission-system/pom.xml @@ -16,7 +16,7 @@ che-multiuser-permission org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-permission-system Che Multiuser :: System Permissions diff --git a/multiuser/permission/che-multiuser-permission-user/pom.xml b/multiuser/permission/che-multiuser-permission-user/pom.xml index 495b7c0a0407..01836eb4c021 100644 --- a/multiuser/permission/che-multiuser-permission-user/pom.xml +++ b/multiuser/permission/che-multiuser-permission-user/pom.xml @@ -16,7 +16,7 @@ che-multiuser-permission org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-permission-user Che Multiuser :: User Permissions diff --git a/multiuser/permission/che-multiuser-permission-workspace/pom.xml b/multiuser/permission/che-multiuser-permission-workspace/pom.xml index 86947c8a9de0..6745c054599c 100644 --- a/multiuser/permission/che-multiuser-permission-workspace/pom.xml +++ b/multiuser/permission/che-multiuser-permission-workspace/pom.xml @@ -16,7 +16,7 @@ che-multiuser-permission org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-permission-workspace Che Multiuser :: Workspace Permissions diff --git a/multiuser/permission/pom.xml b/multiuser/permission/pom.xml index 66e7e0e0ca29..b8a65eed4e85 100644 --- a/multiuser/permission/pom.xml +++ b/multiuser/permission/pom.xml @@ -16,7 +16,7 @@ che-multiuser-parent org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-multiuser-permission diff --git a/multiuser/personal-account/pom.xml b/multiuser/personal-account/pom.xml index f974907dc71a..ad0a9af53711 100644 --- a/multiuser/personal-account/pom.xml +++ b/multiuser/personal-account/pom.xml @@ -16,7 +16,7 @@ che-multiuser-parent org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-multiuser-personal-account jar diff --git a/multiuser/pom.xml b/multiuser/pom.xml index ccdae9a95604..d1900ae6f67c 100644 --- a/multiuser/pom.xml +++ b/multiuser/pom.xml @@ -16,7 +16,7 @@ che-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml org.eclipse.che.multiuser diff --git a/multiuser/sql-schema/pom.xml b/multiuser/sql-schema/pom.xml index cb500f71b547..e6b19e29f238 100644 --- a/multiuser/sql-schema/pom.xml +++ b/multiuser/sql-schema/pom.xml @@ -16,7 +16,7 @@ che-multiuser-parent org.eclipse.che.multiuser - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-multiuser-sql-schema diff --git a/plugins/plugin-activity/che-plugin-activity-ide/pom.xml b/plugins/plugin-activity/che-plugin-activity-ide/pom.xml index fb841de9244a..afd37dc50d64 100644 --- a/plugins/plugin-activity/che-plugin-activity-ide/pom.xml +++ b/plugins/plugin-activity/che-plugin-activity-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-activity-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-activity-ide diff --git a/plugins/plugin-activity/che-plugin-activity-server/pom.xml b/plugins/plugin-activity/che-plugin-activity-server/pom.xml index f8abb9be370b..ef3dabaa782f 100644 --- a/plugins/plugin-activity/che-plugin-activity-server/pom.xml +++ b/plugins/plugin-activity/che-plugin-activity-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-activity-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-activity-server diff --git a/plugins/plugin-activity/che-plugin-activity-shared/pom.xml b/plugins/plugin-activity/che-plugin-activity-shared/pom.xml index 5bc5e93163db..673760556c88 100644 --- a/plugins/plugin-activity/che-plugin-activity-shared/pom.xml +++ b/plugins/plugin-activity/che-plugin-activity-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-activity-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-activity-shared diff --git a/plugins/plugin-activity/che-plugin-activity-wsmaster/pom.xml b/plugins/plugin-activity/che-plugin-activity-wsmaster/pom.xml index ec221426c9df..17c569140083 100644 --- a/plugins/plugin-activity/che-plugin-activity-wsmaster/pom.xml +++ b/plugins/plugin-activity/che-plugin-activity-wsmaster/pom.xml @@ -16,7 +16,7 @@ che-plugin-activity-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-activity-wsmaster diff --git a/plugins/plugin-activity/pom.xml b/plugins/plugin-activity/pom.xml index 7db180b9939b..ee6dbf6f6e7f 100644 --- a/plugins/plugin-activity/pom.xml +++ b/plugins/plugin-activity/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-activity-parent diff --git a/plugins/plugin-composer/che-plugin-composer-ide/pom.xml b/plugins/plugin-composer/che-plugin-composer-ide/pom.xml index f40c63a245ae..360a5904efdf 100644 --- a/plugins/plugin-composer/che-plugin-composer-ide/pom.xml +++ b/plugins/plugin-composer/che-plugin-composer-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-composer-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-composer-ide gwt-lib diff --git a/plugins/plugin-composer/che-plugin-composer-server/pom.xml b/plugins/plugin-composer/che-plugin-composer-server/pom.xml index e2ee7054c837..a912d9f14c60 100644 --- a/plugins/plugin-composer/che-plugin-composer-server/pom.xml +++ b/plugins/plugin-composer/che-plugin-composer-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-composer-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-composer-server Che Plugin :: Composer :: Server diff --git a/plugins/plugin-composer/che-plugin-composer-shared/pom.xml b/plugins/plugin-composer/che-plugin-composer-shared/pom.xml index 22a167548914..bb65a5ab91d1 100644 --- a/plugins/plugin-composer/che-plugin-composer-shared/pom.xml +++ b/plugins/plugin-composer/che-plugin-composer-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-composer-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-composer-shared Che Plugin :: Composer :: Shared diff --git a/plugins/plugin-composer/pom.xml b/plugins/plugin-composer/pom.xml index a836ba4ace2d..87b6b16d9f5e 100644 --- a/plugins/plugin-composer/pom.xml +++ b/plugins/plugin-composer/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-composer-parent diff --git a/plugins/plugin-cpp/che-plugin-cpp-lang-ide/pom.xml b/plugins/plugin-cpp/che-plugin-cpp-lang-ide/pom.xml index 815427df1a35..6c5a98ad4956 100644 --- a/plugins/plugin-cpp/che-plugin-cpp-lang-ide/pom.xml +++ b/plugins/plugin-cpp/che-plugin-cpp-lang-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-cpp-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-cpp-lang-ide gwt-lib diff --git a/plugins/plugin-cpp/che-plugin-cpp-lang-server/pom.xml b/plugins/plugin-cpp/che-plugin-cpp-lang-server/pom.xml index 4749815d43f0..15363d456866 100644 --- a/plugins/plugin-cpp/che-plugin-cpp-lang-server/pom.xml +++ b/plugins/plugin-cpp/che-plugin-cpp-lang-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-cpp-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-cpp-lang-server Che Plugin :: C/C++ :: Extension Server diff --git a/plugins/plugin-cpp/che-plugin-cpp-lang-shared/pom.xml b/plugins/plugin-cpp/che-plugin-cpp-lang-shared/pom.xml index 575909a60888..6f66413cf4ea 100644 --- a/plugins/plugin-cpp/che-plugin-cpp-lang-shared/pom.xml +++ b/plugins/plugin-cpp/che-plugin-cpp-lang-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-cpp-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-cpp-lang-shared Che Plugin :: C/C++ :: Shared diff --git a/plugins/plugin-cpp/pom.xml b/plugins/plugin-cpp/pom.xml index cdd75cfa6fef..8e15545359a2 100644 --- a/plugins/plugin-cpp/pom.xml +++ b/plugins/plugin-cpp/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-cpp-parent diff --git a/plugins/plugin-csharp/che-plugin-csharp-lang-ide/pom.xml b/plugins/plugin-csharp/che-plugin-csharp-lang-ide/pom.xml index 77cec494a60d..e3aecab34495 100644 --- a/plugins/plugin-csharp/che-plugin-csharp-lang-ide/pom.xml +++ b/plugins/plugin-csharp/che-plugin-csharp-lang-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-csharp-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-csharp-lang-ide gwt-lib diff --git a/plugins/plugin-csharp/che-plugin-csharp-lang-server/pom.xml b/plugins/plugin-csharp/che-plugin-csharp-lang-server/pom.xml index 5a8cd66beb04..a78a86f658e3 100644 --- a/plugins/plugin-csharp/che-plugin-csharp-lang-server/pom.xml +++ b/plugins/plugin-csharp/che-plugin-csharp-lang-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-csharp-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-csharp-lang-server Che Plugin :: C# :: Extension Server diff --git a/plugins/plugin-csharp/che-plugin-csharp-lang-shared/pom.xml b/plugins/plugin-csharp/che-plugin-csharp-lang-shared/pom.xml index 9db1d798816d..87149d92a204 100644 --- a/plugins/plugin-csharp/che-plugin-csharp-lang-shared/pom.xml +++ b/plugins/plugin-csharp/che-plugin-csharp-lang-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-csharp-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-csharp-lang-shared Che Plugin :: C# :: Shared diff --git a/plugins/plugin-csharp/pom.xml b/plugins/plugin-csharp/pom.xml index b6c284c020c8..137103587814 100644 --- a/plugins/plugin-csharp/pom.xml +++ b/plugins/plugin-csharp/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-csharp-parent diff --git a/plugins/plugin-dashboard/che-plugin-ext-dashboard/pom.xml b/plugins/plugin-dashboard/che-plugin-ext-dashboard/pom.xml index 4b69ee05e8ff..1993b5eb61c6 100644 --- a/plugins/plugin-dashboard/che-plugin-ext-dashboard/pom.xml +++ b/plugins/plugin-dashboard/che-plugin-ext-dashboard/pom.xml @@ -16,7 +16,7 @@ che-plugin-dashboard-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-ext-dashboard-client gwt-lib diff --git a/plugins/plugin-dashboard/pom.xml b/plugins/plugin-dashboard/pom.xml index b2c7d41f85c5..953dd5197627 100644 --- a/plugins/plugin-dashboard/pom.xml +++ b/plugins/plugin-dashboard/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-dashboard-parent diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/pom.xml b/plugins/plugin-debugger/che-plugin-debugger-ide/pom.xml index 20f1edb854e5..1e1d570b9c94 100644 --- a/plugins/plugin-debugger/che-plugin-debugger-ide/pom.xml +++ b/plugins/plugin-debugger/che-plugin-debugger-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-debugger-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-debugger-ide gwt-lib diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/DebuggerViewImpl.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/DebuggerViewImpl.java index 0f9703292e75..8a057eb35860 100644 --- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/DebuggerViewImpl.java +++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/DebuggerViewImpl.java @@ -339,7 +339,7 @@ void onThreadChanged(ChangeEvent event) { private SimpleList createBreakpointList() { TableElement breakPointsElement = Elements.createTableElement(); - breakPointsElement.setAttribute("style", "width: 100%"); + breakPointsElement.setAttribute("style", "width: 100%; border: none;"); SimpleList.ListEventDelegate breakpointListEventDelegate = new SimpleList.ListEventDelegate() { @@ -369,7 +369,7 @@ public void onListItemDoubleClicked( private SimpleList createFramesList() { TableElement frameElement = Elements.createTableElement(); - frameElement.setAttribute("style", "width: 100%"); + frameElement.setAttribute("style", "width: 100%; border: none;"); SimpleList.ListEventDelegate frameListEventDelegate = new SimpleList.ListEventDelegate() { diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/DebuggerViewImpl.ui.xml b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/DebuggerViewImpl.ui.xml index 50f4b21a57e7..6eaafc23884a 100644 --- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/DebuggerViewImpl.ui.xml +++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/DebuggerViewImpl.ui.xml @@ -16,7 +16,8 @@ xmlns:g='urn:import:com.google.gwt.user.client.ui'> - + + .executionPoint { font-weight: bold; } @@ -50,7 +51,12 @@ height: 100%; width: 100%; } + + .list { + background: textFieldBackgroundColor; + } + @@ -69,7 +75,7 @@ - @@ -94,8 +100,8 @@ debugId="thread-not-suspended"> - + @@ -111,7 +117,7 @@ - + diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/FrameItemRender.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/FrameItemRender.java index 05e5c513f8db..53e03c844bbe 100644 --- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/FrameItemRender.java +++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/FrameItemRender.java @@ -64,4 +64,9 @@ public void render(Element itemElement, StackFrameDump itemData) { label.setInnerHTML(sb.toSafeHtml().asString()); itemElement.appendChild(label); } + + @Override + public Element createElement() { + return Elements.createTRElement(); + } } diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/breakpoint/BreakpointConfigurationViewImpl.ui.xml b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/breakpoint/BreakpointConfigurationViewImpl.ui.xml index 5cd0a18e57f1..abb14825f36c 100644 --- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/breakpoint/BreakpointConfigurationViewImpl.ui.xml +++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/plugin/debugger/ide/debug/breakpoint/BreakpointConfigurationViewImpl.ui.xml @@ -18,7 +18,7 @@ .condition { margin-left: 5px; - width: 310px; + width: 300px; } .hitCount { diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/resources/org/eclipse/che/plugin/debugger/ide/configuration/editConfigurations.css b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/resources/org/eclipse/che/plugin/debugger/ide/configuration/editConfigurations.css index 35ee2bdcb27b..1d35dd5b5949 100644 --- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/resources/org/eclipse/che/plugin/debugger/ide/configuration/editConfigurations.css +++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/resources/org/eclipse/che/plugin/debugger/ide/configuration/editConfigurations.css @@ -121,4 +121,4 @@ input.filterPlaceholder::-moz-placeholder { background-repeat: no-repeat; background-position: literal("calc(50% - 25px)") center; background-size: contain; -} \ No newline at end of file +} diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/resources/org/eclipse/che/plugin/debugger/ide/debug/Debug.css b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/resources/org/eclipse/che/plugin/debugger/ide/debug/Debug.css index bdf5e68051cf..059c2f9cdb80 100644 --- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/resources/org/eclipse/che/plugin/debugger/ide/debug/Debug.css +++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/resources/org/eclipse/che/plugin/debugger/ide/debug/Debug.css @@ -18,4 +18,4 @@ display: inline-block; text-decoration: none; padding: 0px 3px 0px 3px; -} \ No newline at end of file +} diff --git a/plugins/plugin-debugger/pom.xml b/plugins/plugin-debugger/pom.xml index f261185cb55a..a548fd875686 100644 --- a/plugins/plugin-debugger/pom.xml +++ b/plugins/plugin-debugger/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-debugger-parent diff --git a/plugins/plugin-gdb/che-plugin-gdb-ide/pom.xml b/plugins/plugin-gdb/che-plugin-gdb-ide/pom.xml index 719d4d8ffccf..2a58f8129a1a 100644 --- a/plugins/plugin-gdb/che-plugin-gdb-ide/pom.xml +++ b/plugins/plugin-gdb/che-plugin-gdb-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-gdb-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-gdb-ide gwt-lib diff --git a/plugins/plugin-gdb/che-plugin-gdb-server/pom.xml b/plugins/plugin-gdb/che-plugin-gdb-server/pom.xml index acf1616e9be9..40a2d00c791c 100644 --- a/plugins/plugin-gdb/che-plugin-gdb-server/pom.xml +++ b/plugins/plugin-gdb/che-plugin-gdb-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-gdb-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-gdb-server jar diff --git a/plugins/plugin-gdb/pom.xml b/plugins/plugin-gdb/pom.xml index dc94107fbab7..008ff7471c83 100644 --- a/plugins/plugin-gdb/pom.xml +++ b/plugins/plugin-gdb/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-gdb-parent pom diff --git a/plugins/plugin-git/che-plugin-git-ext-git/pom.xml b/plugins/plugin-git/che-plugin-git-ext-git/pom.xml index 17d95454b5d1..4b350ea57a95 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/pom.xml +++ b/plugins/plugin-git/che-plugin-git-ext-git/pom.xml @@ -16,7 +16,7 @@ che-plugin-git-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-git-ext-git gwt-lib diff --git a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/preference/CommitterPreferenceViewImpl.ui.xml b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/preference/CommitterPreferenceViewImpl.ui.xml index 6d4b2af15702..76a355142988 100644 --- a/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/preference/CommitterPreferenceViewImpl.ui.xml +++ b/plugins/plugin-git/che-plugin-git-ext-git/src/main/java/org/eclipse/che/ide/ext/git/client/preference/CommitterPreferenceViewImpl.ui.xml @@ -21,18 +21,22 @@ .inherit { margin-top: 5px; } + + .preferencesInputs { + width: 100%; + } Name: - + Email: - + diff --git a/plugins/plugin-git/pom.xml b/plugins/plugin-git/pom.xml index 906cd216d0a5..c30f7cc34d58 100644 --- a/plugins/plugin-git/pom.xml +++ b/plugins/plugin-git/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-git-parent diff --git a/plugins/plugin-github/che-plugin-github-factory-resolver/pom.xml b/plugins/plugin-github/che-plugin-github-factory-resolver/pom.xml index 9aa565c6ff5b..44389aaf50de 100644 --- a/plugins/plugin-github/che-plugin-github-factory-resolver/pom.xml +++ b/plugins/plugin-github/che-plugin-github-factory-resolver/pom.xml @@ -16,7 +16,7 @@ che-plugin-github-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-github-factory-resolver jar diff --git a/plugins/plugin-github/che-plugin-github-ide/pom.xml b/plugins/plugin-github/che-plugin-github-ide/pom.xml index 0c9a274f300f..2c435b5a0e39 100644 --- a/plugins/plugin-github/che-plugin-github-ide/pom.xml +++ b/plugins/plugin-github/che-plugin-github-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-github-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-github-ide gwt-lib diff --git a/plugins/plugin-github/che-plugin-github-oauth2/pom.xml b/plugins/plugin-github/che-plugin-github-oauth2/pom.xml index aedd9634ba12..aa053189c7ef 100644 --- a/plugins/plugin-github/che-plugin-github-oauth2/pom.xml +++ b/plugins/plugin-github/che-plugin-github-oauth2/pom.xml @@ -16,7 +16,7 @@ che-plugin-github-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-github-oauth2 jar diff --git a/plugins/plugin-github/che-plugin-github-provider-github/pom.xml b/plugins/plugin-github/che-plugin-github-provider-github/pom.xml index 6d1dab32be4d..06f90e9b8360 100644 --- a/plugins/plugin-github/che-plugin-github-provider-github/pom.xml +++ b/plugins/plugin-github/che-plugin-github-provider-github/pom.xml @@ -16,7 +16,7 @@ che-plugin-github-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-github-provider-github Che Plugin :: Github :: Credential provider diff --git a/plugins/plugin-github/che-plugin-github-pullrequest/pom.xml b/plugins/plugin-github/che-plugin-github-pullrequest/pom.xml index 62d007e9b467..6bb63423cf69 100644 --- a/plugins/plugin-github/che-plugin-github-pullrequest/pom.xml +++ b/plugins/plugin-github/che-plugin-github-pullrequest/pom.xml @@ -16,7 +16,7 @@ che-plugin-github-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-github-pullrequest gwt-lib diff --git a/plugins/plugin-github/che-plugin-github-server/pom.xml b/plugins/plugin-github/che-plugin-github-server/pom.xml index eb0fda2f5994..a436b2680a23 100644 --- a/plugins/plugin-github/che-plugin-github-server/pom.xml +++ b/plugins/plugin-github/che-plugin-github-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-github-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-github-server jar diff --git a/plugins/plugin-github/che-plugin-github-shared/pom.xml b/plugins/plugin-github/che-plugin-github-shared/pom.xml index 2b131299eaaa..764b4afe831b 100644 --- a/plugins/plugin-github/che-plugin-github-shared/pom.xml +++ b/plugins/plugin-github/che-plugin-github-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-github-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-github-shared Che Plugin :: Github :: Shared diff --git a/plugins/plugin-github/pom.xml b/plugins/plugin-github/pom.xml index 3097302b8ceb..a51c6063c630 100644 --- a/plugins/plugin-github/pom.xml +++ b/plugins/plugin-github/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-github-parent diff --git a/plugins/plugin-gwt/che-plugin-gwt-ext-gwt/pom.xml b/plugins/plugin-gwt/che-plugin-gwt-ext-gwt/pom.xml index 9714d4cc1f40..215c8a264141 100644 --- a/plugins/plugin-gwt/che-plugin-gwt-ext-gwt/pom.xml +++ b/plugins/plugin-gwt/che-plugin-gwt-ext-gwt/pom.xml @@ -16,7 +16,7 @@ che-plugin-gwt-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-gwt-ext-gwt gwt-lib diff --git a/plugins/plugin-gwt/pom.xml b/plugins/plugin-gwt/pom.xml index 53fea2a7780d..76e3db100518 100644 --- a/plugins/plugin-gwt/pom.xml +++ b/plugins/plugin-gwt/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-gwt-parent diff --git a/plugins/plugin-help/che-plugin-help-ext-client/pom.xml b/plugins/plugin-help/che-plugin-help-ext-client/pom.xml index b14188b0e8c3..73ca8e315564 100644 --- a/plugins/plugin-help/che-plugin-help-ext-client/pom.xml +++ b/plugins/plugin-help/che-plugin-help-ext-client/pom.xml @@ -16,7 +16,7 @@ che-plugin-help-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-help-ext-client gwt-lib diff --git a/plugins/plugin-help/pom.xml b/plugins/plugin-help/pom.xml index 49fed0c7d6c4..d39fd5101430 100644 --- a/plugins/plugin-help/pom.xml +++ b/plugins/plugin-help/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-help-parent diff --git a/plugins/plugin-java-debugger/che-plugin-java-debugger-ide/pom.xml b/plugins/plugin-java-debugger/che-plugin-java-debugger-ide/pom.xml index a390fe2b2a41..f2eece6c960a 100644 --- a/plugins/plugin-java-debugger/che-plugin-java-debugger-ide/pom.xml +++ b/plugins/plugin-java-debugger/che-plugin-java-debugger-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-debugger-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-java-debugger-ide gwt-lib diff --git a/plugins/plugin-java-debugger/che-plugin-java-debugger-server/pom.xml b/plugins/plugin-java-debugger/che-plugin-java-debugger-server/pom.xml index 05c72fa80dbe..7eabd1f949f5 100644 --- a/plugins/plugin-java-debugger/che-plugin-java-debugger-server/pom.xml +++ b/plugins/plugin-java-debugger/che-plugin-java-debugger-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-debugger-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-java-debugger-server jar diff --git a/plugins/plugin-java-debugger/pom.xml b/plugins/plugin-java-debugger/pom.xml index 749510ea9706..1d064a5d8d73 100644 --- a/plugins/plugin-java-debugger/pom.xml +++ b/plugins/plugin-java-debugger/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-java-debugger-parent pom diff --git a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-core-filebuffers/pom.xml b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-core-filebuffers/pom.xml index 067f6bc88c8b..3fe72c917679 100644 --- a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-core-filebuffers/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-core-filebuffers/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-ext-jdt-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.core.filebuffers jar diff --git a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-core-filesystem/pom.xml b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-core-filesystem/pom.xml index 0b5bab585af1..9ba2346e3be7 100644 --- a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-core-filesystem/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-core-filesystem/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-ext-jdt-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.core.filesystem jar diff --git a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-core-resources/pom.xml b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-core-resources/pom.xml index dadaf6789c26..3adcf6c2a0d7 100644 --- a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-core-resources/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-core-resources/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-ext-jdt-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.core.resources jar diff --git a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-jdt-ui/pom.xml b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-jdt-ui/pom.xml index aaab31194068..725d6d4d13ac 100644 --- a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-jdt-ui/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-jdt-ui/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-ext-jdt-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.jdt.ui jar diff --git a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-jface-text/pom.xml b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-jface-text/pom.xml index a8f6030085f3..050ccd55e54d 100644 --- a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-jface-text/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-jface-text/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-ext-jdt-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.jface.text jar diff --git a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-jface/pom.xml b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-jface/pom.xml index 8243aca1d14c..1d1e200ccbea 100644 --- a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-jface/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-jface/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-ext-jdt-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.jface jar diff --git a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-ltk-core-refactoring/pom.xml b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-ltk-core-refactoring/pom.xml index 1281879c92fa..893087f5d7b2 100644 --- a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-ltk-core-refactoring/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-ltk-core-refactoring/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-ext-jdt-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.ltk.core.refactoring jar diff --git a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-search/pom.xml b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-search/pom.xml index 3cb1b1e1e8f0..04951f850d5b 100644 --- a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-search/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-search/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-ext-jdt-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.search jar diff --git a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-ui-ide/pom.xml b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-ui-ide/pom.xml index e53d77d29aa6..1aaa12ee5c69 100644 --- a/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-ui-ide/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-jdt/org-eclipse-ui-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-ext-jdt-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.ui.ide jar diff --git a/plugins/plugin-java/che-plugin-java-ext-jdt/pom.xml b/plugins/plugin-java/che-plugin-java-ext-jdt/pom.xml index d033547099ac..077257b21105 100644 --- a/plugins/plugin-java/che-plugin-java-ext-jdt/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-jdt/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-java-ext-jdt-parent pom diff --git a/plugins/plugin-java/che-plugin-java-ext-lang-client/pom.xml b/plugins/plugin-java/che-plugin-java-ext-lang-client/pom.xml index 51203b88ed23..209caecd2099 100644 --- a/plugins/plugin-java/che-plugin-java-ext-lang-client/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-lang-client/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-java-ext-lang-client gwt-lib diff --git a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructureImpl.java b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructureImpl.java index 793e91ffce09..b9bfdb9fa95b 100644 --- a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructureImpl.java +++ b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructureImpl.java @@ -17,7 +17,9 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.event.dom.client.DoubleClickEvent; -import com.google.gwt.event.dom.client.DoubleClickHandler; +import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.event.dom.client.KeyEvent; +import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.DockLayoutPanel; @@ -25,8 +27,13 @@ import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import com.google.inject.Singleton; +import elemental.events.Event; import java.util.Collections; -import javax.validation.constraints.NotNull; +import org.eclipse.che.ide.api.action.Action; +import org.eclipse.che.ide.api.action.ActionEvent; +import org.eclipse.che.ide.api.action.ActionManager; +import org.eclipse.che.ide.api.keybinding.KeyBindingAgent; +import org.eclipse.che.ide.ext.java.client.JavaExtension; import org.eclipse.che.ide.ext.java.client.JavaLocalizationConstant; import org.eclipse.che.ide.ext.java.client.navigation.factory.NodeFactory; import org.eclipse.che.ide.ext.java.shared.dto.model.CompilationUnit; @@ -36,8 +43,11 @@ import org.eclipse.che.ide.ui.smartTree.NodeUniqueKeyProvider; import org.eclipse.che.ide.ui.smartTree.Tree; import org.eclipse.che.ide.ui.smartTree.data.Node; -import org.eclipse.che.ide.ui.smartTree.data.NodeInterceptor; +import org.eclipse.che.ide.ui.toolbar.PresentationFactory; import org.eclipse.che.ide.ui.window.Window; +import org.eclipse.che.ide.util.input.CharCodeWithModifiers; +import org.eclipse.che.ide.util.input.SignalEvent; +import org.eclipse.che.ide.util.input.SignalEventUtils; /** * Implementation of {@link FileStructure} view. @@ -46,45 +56,42 @@ */ @Singleton final class FileStructureImpl extends Window implements FileStructure { - interface FileStructureImplUiBinder extends UiBinder {} private static FileStructureImplUiBinder UI_BINDER = GWT.create(FileStructureImplUiBinder.class); - private final NodeFactory nodeFactory; - private final Tree tree; + @UiField(provided = true) + final JavaLocalizationConstant locale; - private ActionDelegate delegate; + private final ActionManager actionManager; + private final PresentationFactory presentationFactory; + private final NodeFactory nodeFactory; + private final Tree tree; + private final KeyBindingAgent keyBindingAgent; @UiField DockLayoutPanel treeContainer; @UiField Label showInheritedLabel; - - @UiField(provided = true) - final JavaLocalizationConstant locale; - - private Predicate LEAFS = - new Predicate() { - @Override - public boolean apply(Node input) { - return input.isLeaf(); - } - }; + private ActionDelegate delegate; + private Predicate LEAFS = input -> input.isLeaf(); @Inject - public FileStructureImpl(NodeFactory nodeFactory, JavaLocalizationConstant locale) { + public FileStructureImpl( + NodeFactory nodeFactory, + JavaLocalizationConstant locale, + KeyBindingAgent keyBindingAgent, + ActionManager actionManager, + PresentationFactory presentationFactory) { super(false); this.nodeFactory = nodeFactory; this.locale = locale; + this.actionManager = actionManager; + this.presentationFactory = presentationFactory; + this.keyBindingAgent = keyBindingAgent; + setWidget(UI_BINDER.createAndBindUi(this)); NodeStorage storage = - new NodeStorage( - new NodeUniqueKeyProvider() { - @Override - public String getKey(@NotNull Node item) { - return String.valueOf(item.hashCode()); - } - }); - NodeLoader loader = new NodeLoader(Collections.emptySet()); + new NodeStorage((NodeUniqueKeyProvider) item -> String.valueOf(item.hashCode())); + NodeLoader loader = new NodeLoader(Collections.emptySet()); tree = new Tree(storage, loader); tree.setAutoExpand(false); tree.getSelectionModel().setSelectionMode(SINGLE); @@ -97,12 +104,9 @@ public void onEnter(NativeEvent evt) { } }; tree.addDomHandler( - new DoubleClickHandler() { - @Override - public void onDoubleClick(DoubleClickEvent event) { - if (all(tree.getSelectionModel().getSelectedNodes(), LEAFS)) { - hide(); - } + event -> { + if (all(tree.getSelectionModel().getSelectedNodes(), LEAFS)) { + hide(); } }, DoubleClickEvent.getType()); @@ -162,4 +166,39 @@ public void hide() { public void setDelegate(ActionDelegate delegate) { this.delegate = delegate; } + + @Override + protected void onKeyDownEvent(KeyDownEvent event) { + handleKey(event); + } + + @Override + protected void onKeyPressEvent(KeyPressEvent event) { + handleKey(event); + } + + private void handleKey(KeyEvent event) { + SignalEvent signalEvent = SignalEventUtils.create((Event) event.getNativeEvent(), false); + CharCodeWithModifiers keyBinding = + keyBindingAgent.getKeyBinding(JavaExtension.JAVA_CLASS_STRUCTURE); + if (signalEvent == null || keyBinding == null) { + return; + } + int digest = CharCodeWithModifiers.computeKeyDigest(signalEvent); + if (digest == keyBinding.getKeyDigest()) { + Action action = actionManager.getAction(JavaExtension.JAVA_CLASS_STRUCTURE); + if (action != null) { + ActionEvent e = new ActionEvent(presentationFactory.getPresentation(action), actionManager); + action.update(e); + + if (e.getPresentation().isEnabled()) { + event.preventDefault(); + event.stopPropagation(); + action.actionPerformed(e); + } + } + } + } + + interface FileStructureImplUiBinder extends UiBinder {} } diff --git a/plugins/plugin-java/che-plugin-java-ext-lang-server/pom.xml b/plugins/plugin-java/che-plugin-java-ext-lang-server/pom.xml index 478438686ea6..1c0d613fc724 100644 --- a/plugins/plugin-java/che-plugin-java-ext-lang-server/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-lang-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-java-ext-lang-server Che Plugin :: Java :: Extension Java Server diff --git a/plugins/plugin-java/che-plugin-java-ext-lang-shared/pom.xml b/plugins/plugin-java/che-plugin-java-ext-lang-shared/pom.xml index 4dc2b42d48ec..2dd618cd9673 100644 --- a/plugins/plugin-java/che-plugin-java-ext-lang-shared/pom.xml +++ b/plugins/plugin-java/che-plugin-java-ext-lang-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-java-ext-lang-shared Che Plugin :: Java :: Extension Java Shared diff --git a/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-ide/pom.xml b/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-ide/pom.xml index 395055cf8c66..8f94fc871fce 100644 --- a/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-ide/pom.xml +++ b/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-plain org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-java-plain-ide gwt-lib diff --git a/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/pom.xml b/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/pom.xml index e1dc928ce0cb..6473e1ea10e7 100644 --- a/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/pom.xml +++ b/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-plain org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-java-plain-server Che Plugin :: Java :: Plain :: Server diff --git a/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-shared/pom.xml b/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-shared/pom.xml index 8704ebe362da..db907e79b6ce 100644 --- a/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-shared/pom.xml +++ b/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-plain org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-java-plain-shared Che Plugin :: Java :: Plain :: Shared diff --git a/plugins/plugin-java/che-plugin-java-plain/pom.xml b/plugins/plugin-java/che-plugin-java-plain/pom.xml index 1b8a425f1b79..ed88ed23494b 100644 --- a/plugins/plugin-java/che-plugin-java-plain/pom.xml +++ b/plugins/plugin-java/che-plugin-java-plain/pom.xml @@ -16,7 +16,7 @@ che-plugin-java-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-java-plain diff --git a/plugins/plugin-java/pom.xml b/plugins/plugin-java/pom.xml index 8f63dc4da7be..b8769f95a7af 100644 --- a/plugins/plugin-java/pom.xml +++ b/plugins/plugin-java/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-java-parent diff --git a/plugins/plugin-json/che-plugin-json-server/pom.xml b/plugins/plugin-json/che-plugin-json-server/pom.xml index 4575ab4e3c56..bbc91660fc74 100644 --- a/plugins/plugin-json/che-plugin-json-server/pom.xml +++ b/plugins/plugin-json/che-plugin-json-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-json-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-json-server Che Plugin :: JSON :: Extension Server diff --git a/plugins/plugin-json/pom.xml b/plugins/plugin-json/pom.xml index 883d7f77c278..29ed2f7b4528 100644 --- a/plugins/plugin-json/pom.xml +++ b/plugins/plugin-json/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-json-parent diff --git a/plugins/plugin-keybinding-eclipse/plugin-keybinding-eclipse-ide/pom.xml b/plugins/plugin-keybinding-eclipse/plugin-keybinding-eclipse-ide/pom.xml index 7c4281eb328f..e6a596757189 100644 --- a/plugins/plugin-keybinding-eclipse/plugin-keybinding-eclipse-ide/pom.xml +++ b/plugins/plugin-keybinding-eclipse/plugin-keybinding-eclipse-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-keybinding-eclipse-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-keybinding-eclipse-ide diff --git a/plugins/plugin-keybinding-eclipse/pom.xml b/plugins/plugin-keybinding-eclipse/pom.xml index 671fd193b96b..56f17186d108 100644 --- a/plugins/plugin-keybinding-eclipse/pom.xml +++ b/plugins/plugin-keybinding-eclipse/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-keybinding-eclipse-parent diff --git a/plugins/plugin-languageserver/che-plugin-languageserver-ide/pom.xml b/plugins/plugin-languageserver/che-plugin-languageserver-ide/pom.xml index 6f4fa9656ac3..e97c25e998be 100644 --- a/plugins/plugin-languageserver/che-plugin-languageserver-ide/pom.xml +++ b/plugins/plugin-languageserver/che-plugin-languageserver-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-languageserver-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT .. che-plugin-languageserver-ide diff --git a/plugins/plugin-languageserver/che-plugin-test-ls/pom.xml b/plugins/plugin-languageserver/che-plugin-test-ls/pom.xml index 7a5c8d049cf5..69c906d100dc 100644 --- a/plugins/plugin-languageserver/che-plugin-test-ls/pom.xml +++ b/plugins/plugin-languageserver/che-plugin-test-ls/pom.xml @@ -16,7 +16,7 @@ che-plugin-languageserver-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-test-ls-server Che Plugin :: TEST LS :: Extension Server diff --git a/plugins/plugin-languageserver/pom.xml b/plugins/plugin-languageserver/pom.xml index 6cc92acd65bd..390b13a84360 100644 --- a/plugins/plugin-languageserver/pom.xml +++ b/plugins/plugin-languageserver/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-languageserver-parent diff --git a/plugins/plugin-machine/che-plugin-machine-ext-server/pom.xml b/plugins/plugin-machine/che-plugin-machine-ext-server/pom.xml index 218c3c5335e7..ef5b6670db95 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-server/pom.xml +++ b/plugins/plugin-machine/che-plugin-machine-ext-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-machine-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-machine-ext-server diff --git a/plugins/plugin-machine/che-plugin-machine-ssh-client/pom.xml b/plugins/plugin-machine/che-plugin-machine-ssh-client/pom.xml index 9b395c3823f4..0b9249fff535 100644 --- a/plugins/plugin-machine/che-plugin-machine-ssh-client/pom.xml +++ b/plugins/plugin-machine/che-plugin-machine-ssh-client/pom.xml @@ -16,7 +16,7 @@ che-plugin-machine-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-machine-ssh-client gwt-lib diff --git a/plugins/plugin-machine/pom.xml b/plugins/plugin-machine/pom.xml index 43a92e6eaec4..9b76acf6a844 100644 --- a/plugins/plugin-machine/pom.xml +++ b/plugins/plugin-machine/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-machine-parent diff --git a/plugins/plugin-maven/che-plugin-maven-generator-archetype/pom.xml b/plugins/plugin-maven/che-plugin-maven-generator-archetype/pom.xml index 57a6aaca0989..8ce0e59f2a3e 100644 --- a/plugins/plugin-maven/che-plugin-maven-generator-archetype/pom.xml +++ b/plugins/plugin-maven/che-plugin-maven-generator-archetype/pom.xml @@ -16,7 +16,7 @@ che-plugin-maven-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-maven-generator-archetype jar diff --git a/plugins/plugin-maven/che-plugin-maven-ide/pom.xml b/plugins/plugin-maven/che-plugin-maven-ide/pom.xml index 1ae2ac0e1b05..0c234e1fdffe 100644 --- a/plugins/plugin-maven/che-plugin-maven-ide/pom.xml +++ b/plugins/plugin-maven/che-plugin-maven-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-maven-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-maven-ide gwt-lib diff --git a/plugins/plugin-maven/che-plugin-maven-server/pom.xml b/plugins/plugin-maven/che-plugin-maven-server/pom.xml index 8c1c096f969b..836f57fd21cd 100644 --- a/plugins/plugin-maven/che-plugin-maven-server/pom.xml +++ b/plugins/plugin-maven/che-plugin-maven-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-maven-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-maven-server jar diff --git a/plugins/plugin-maven/che-plugin-maven-shared/pom.xml b/plugins/plugin-maven/che-plugin-maven-shared/pom.xml index 1ab24c78c037..cfa8ed00a00f 100644 --- a/plugins/plugin-maven/che-plugin-maven-shared/pom.xml +++ b/plugins/plugin-maven/che-plugin-maven-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-maven-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-maven-shared Che Plugin :: Maven :: Extension Maven Shared diff --git a/plugins/plugin-maven/che-plugin-maven-tools/pom.xml b/plugins/plugin-maven/che-plugin-maven-tools/pom.xml index e775903d5382..589e14ea57da 100644 --- a/plugins/plugin-maven/che-plugin-maven-tools/pom.xml +++ b/plugins/plugin-maven/che-plugin-maven-tools/pom.xml @@ -16,7 +16,7 @@ che-plugin-maven-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-java-maven-tools jar diff --git a/plugins/plugin-maven/maven-server/maven-server-api/pom.xml b/plugins/plugin-maven/maven-server/maven-server-api/pom.xml index f6c672101aeb..ec96b99d4f6b 100644 --- a/plugins/plugin-maven/maven-server/maven-server-api/pom.xml +++ b/plugins/plugin-maven/maven-server/maven-server-api/pom.xml @@ -16,7 +16,7 @@ che-maven-server org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT maven-server-api jar diff --git a/plugins/plugin-maven/maven-server/maven-server-impl/pom.xml b/plugins/plugin-maven/maven-server/maven-server-impl/pom.xml index cc54bab4f1d7..7d3e835e5cf4 100644 --- a/plugins/plugin-maven/maven-server/maven-server-impl/pom.xml +++ b/plugins/plugin-maven/maven-server/maven-server-impl/pom.xml @@ -16,7 +16,7 @@ che-maven-server org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT maven-server-impl jar diff --git a/plugins/plugin-maven/maven-server/pom.xml b/plugins/plugin-maven/maven-server/pom.xml index f86249d21688..d34691751e1f 100644 --- a/plugins/plugin-maven/maven-server/pom.xml +++ b/plugins/plugin-maven/maven-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-maven-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-maven-server pom diff --git a/plugins/plugin-maven/pom.xml b/plugins/plugin-maven/pom.xml index 4a5a32b0403a..2654acc6ab62 100644 --- a/plugins/plugin-maven/pom.xml +++ b/plugins/plugin-maven/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-maven-parent diff --git a/plugins/plugin-nodejs-debugger/che-plugin-nodejs-debugger-ide/pom.xml b/plugins/plugin-nodejs-debugger/che-plugin-nodejs-debugger-ide/pom.xml index 8b6b8fb55a66..0635fc7b80d3 100644 --- a/plugins/plugin-nodejs-debugger/che-plugin-nodejs-debugger-ide/pom.xml +++ b/plugins/plugin-nodejs-debugger/che-plugin-nodejs-debugger-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-nodejs-debugger-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-nodejs-debugger-ide gwt-lib diff --git a/plugins/plugin-nodejs-debugger/che-plugin-nodejs-debugger-server/pom.xml b/plugins/plugin-nodejs-debugger/che-plugin-nodejs-debugger-server/pom.xml index b08d62b4eb32..82572d7da408 100644 --- a/plugins/plugin-nodejs-debugger/che-plugin-nodejs-debugger-server/pom.xml +++ b/plugins/plugin-nodejs-debugger/che-plugin-nodejs-debugger-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-nodejs-debugger-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-nodejs-debugger-server jar diff --git a/plugins/plugin-nodejs-debugger/pom.xml b/plugins/plugin-nodejs-debugger/pom.xml index a75a0e50c1a2..43a4be5d185b 100644 --- a/plugins/plugin-nodejs-debugger/pom.xml +++ b/plugins/plugin-nodejs-debugger/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-nodejs-debugger-parent pom diff --git a/plugins/plugin-nodejs/che-plugin-nodejs-lang-ide/pom.xml b/plugins/plugin-nodejs/che-plugin-nodejs-lang-ide/pom.xml index 85d82c02085e..52f434c3c377 100644 --- a/plugins/plugin-nodejs/che-plugin-nodejs-lang-ide/pom.xml +++ b/plugins/plugin-nodejs/che-plugin-nodejs-lang-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-nodejs-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-nodejs-lang-ide gwt-lib diff --git a/plugins/plugin-nodejs/che-plugin-nodejs-lang-server/pom.xml b/plugins/plugin-nodejs/che-plugin-nodejs-lang-server/pom.xml index 29bce091f0a7..b24744b17bb6 100644 --- a/plugins/plugin-nodejs/che-plugin-nodejs-lang-server/pom.xml +++ b/plugins/plugin-nodejs/che-plugin-nodejs-lang-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-nodejs-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-nodejs-lang-server Che Plugin :: NodeJs :: Extension Server diff --git a/plugins/plugin-nodejs/che-plugin-nodejs-lang-shared/pom.xml b/plugins/plugin-nodejs/che-plugin-nodejs-lang-shared/pom.xml index dc3db225f802..aa18f92a4efd 100644 --- a/plugins/plugin-nodejs/che-plugin-nodejs-lang-shared/pom.xml +++ b/plugins/plugin-nodejs/che-plugin-nodejs-lang-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-nodejs-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-nodejs-lang-shared Che Plugin :: NodeJs :: Extension Shared diff --git a/plugins/plugin-nodejs/pom.xml b/plugins/plugin-nodejs/pom.xml index a3651dadfb39..9ab031f8567b 100644 --- a/plugins/plugin-nodejs/pom.xml +++ b/plugins/plugin-nodejs/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-nodejs-parent diff --git a/plugins/plugin-orion/che-plugin-orion-compare/pom.xml b/plugins/plugin-orion/che-plugin-orion-compare/pom.xml index 75712a3ba30f..9f267d343d86 100644 --- a/plugins/plugin-orion/che-plugin-orion-compare/pom.xml +++ b/plugins/plugin-orion/che-plugin-orion-compare/pom.xml @@ -16,7 +16,7 @@ che-plugin-orion-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-orion-compare gwt-lib diff --git a/plugins/plugin-orion/pom.xml b/plugins/plugin-orion/pom.xml index 6438071b50bc..9dbe8569b226 100644 --- a/plugins/plugin-orion/pom.xml +++ b/plugins/plugin-orion/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-orion-parent diff --git a/plugins/plugin-php/che-plugin-php-lang-ide/pom.xml b/plugins/plugin-php/che-plugin-php-lang-ide/pom.xml index 64f7dc7a8395..5f2a8c3993d6 100644 --- a/plugins/plugin-php/che-plugin-php-lang-ide/pom.xml +++ b/plugins/plugin-php/che-plugin-php-lang-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-php-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-php-lang-ide gwt-lib diff --git a/plugins/plugin-php/che-plugin-php-lang-server/pom.xml b/plugins/plugin-php/che-plugin-php-lang-server/pom.xml index 78ccd65ecedb..007fb5de719c 100644 --- a/plugins/plugin-php/che-plugin-php-lang-server/pom.xml +++ b/plugins/plugin-php/che-plugin-php-lang-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-php-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-php-lang-server Che Plugin :: PHP :: Extension Server diff --git a/plugins/plugin-php/che-plugin-php-lang-shared/pom.xml b/plugins/plugin-php/che-plugin-php-lang-shared/pom.xml index 88ec737ff3c6..9771251c8a86 100644 --- a/plugins/plugin-php/che-plugin-php-lang-shared/pom.xml +++ b/plugins/plugin-php/che-plugin-php-lang-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-php-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-php-lang-shared Che Plugin :: PHP :: Shared diff --git a/plugins/plugin-php/pom.xml b/plugins/plugin-php/pom.xml index 6c97e87ee072..db6a53e9d58e 100644 --- a/plugins/plugin-php/pom.xml +++ b/plugins/plugin-php/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-php-parent diff --git a/plugins/plugin-product-info/pom.xml b/plugins/plugin-product-info/pom.xml index 34c08d80fcd0..e02e48432233 100644 --- a/plugins/plugin-product-info/pom.xml +++ b/plugins/plugin-product-info/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-product-info diff --git a/plugins/plugin-pullrequest-parent/che-plugin-pullrequest-ide/pom.xml b/plugins/plugin-pullrequest-parent/che-plugin-pullrequest-ide/pom.xml index 92a99a0ace86..ee05fc88f80a 100644 --- a/plugins/plugin-pullrequest-parent/che-plugin-pullrequest-ide/pom.xml +++ b/plugins/plugin-pullrequest-parent/che-plugin-pullrequest-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-pullrequest-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-pullrequest-ide gwt-lib diff --git a/plugins/plugin-pullrequest-parent/che-plugin-pullrequest-server/pom.xml b/plugins/plugin-pullrequest-parent/che-plugin-pullrequest-server/pom.xml index 2efc076ac5ee..dd391f6bd8ad 100644 --- a/plugins/plugin-pullrequest-parent/che-plugin-pullrequest-server/pom.xml +++ b/plugins/plugin-pullrequest-parent/che-plugin-pullrequest-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-pullrequest-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-pullrequest-server Che Plugin :: Pull request :: Server diff --git a/plugins/plugin-pullrequest-parent/che-plugin-pullrequest-shared/pom.xml b/plugins/plugin-pullrequest-parent/che-plugin-pullrequest-shared/pom.xml index dcdca2a8003b..896d4894efd9 100644 --- a/plugins/plugin-pullrequest-parent/che-plugin-pullrequest-shared/pom.xml +++ b/plugins/plugin-pullrequest-parent/che-plugin-pullrequest-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-pullrequest-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-pullrequest-shared Che Plugin :: Pull request :: Shared diff --git a/plugins/plugin-pullrequest-parent/pom.xml b/plugins/plugin-pullrequest-parent/pom.xml index 5577c22e57d5..1661416b164c 100644 --- a/plugins/plugin-pullrequest-parent/pom.xml +++ b/plugins/plugin-pullrequest-parent/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-pullrequest-parent pom diff --git a/plugins/plugin-python/che-plugin-python-lang-ide/pom.xml b/plugins/plugin-python/che-plugin-python-lang-ide/pom.xml index 536dfe780e22..b46fd67a13e0 100644 --- a/plugins/plugin-python/che-plugin-python-lang-ide/pom.xml +++ b/plugins/plugin-python/che-plugin-python-lang-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-python-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-python-lang-ide gwt-lib diff --git a/plugins/plugin-python/che-plugin-python-lang-server/pom.xml b/plugins/plugin-python/che-plugin-python-lang-server/pom.xml index c6dd01cfc498..c9c4d513b1c4 100644 --- a/plugins/plugin-python/che-plugin-python-lang-server/pom.xml +++ b/plugins/plugin-python/che-plugin-python-lang-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-python-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-python-lang-server Che Plugin :: Python :: Extension Server diff --git a/plugins/plugin-python/che-plugin-python-lang-shared/pom.xml b/plugins/plugin-python/che-plugin-python-lang-shared/pom.xml index 18c6fa44c806..7358973e2dc0 100644 --- a/plugins/plugin-python/che-plugin-python-lang-shared/pom.xml +++ b/plugins/plugin-python/che-plugin-python-lang-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-python-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-python-lang-shared che-plugin-python-lang-shared diff --git a/plugins/plugin-python/pom.xml b/plugins/plugin-python/pom.xml index 30e84b8f4a03..478fe45024f7 100644 --- a/plugins/plugin-python/pom.xml +++ b/plugins/plugin-python/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-python-parent diff --git a/plugins/plugin-sdk/che-plugin-sdk-ext-plugins/pom.xml b/plugins/plugin-sdk/che-plugin-sdk-ext-plugins/pom.xml index b34f81b2b456..7072cf10356e 100644 --- a/plugins/plugin-sdk/che-plugin-sdk-ext-plugins/pom.xml +++ b/plugins/plugin-sdk/che-plugin-sdk-ext-plugins/pom.xml @@ -16,7 +16,7 @@ che-plugin-sdk-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-sdk-ext-plugins gwt-lib diff --git a/plugins/plugin-sdk/che-plugin-sdk-tools/pom.xml b/plugins/plugin-sdk/che-plugin-sdk-tools/pom.xml index a6cef734aedc..673acae893d4 100644 --- a/plugins/plugin-sdk/che-plugin-sdk-tools/pom.xml +++ b/plugins/plugin-sdk/che-plugin-sdk-tools/pom.xml @@ -16,7 +16,7 @@ che-plugin-sdk-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-sdk-tools jar diff --git a/plugins/plugin-sdk/pom.xml b/plugins/plugin-sdk/pom.xml index e63d343fb87e..18710c3d70ec 100644 --- a/plugins/plugin-sdk/pom.xml +++ b/plugins/plugin-sdk/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-sdk-parent diff --git a/plugins/plugin-slx-help/pom.xml b/plugins/plugin-slx-help/pom.xml index 70e0031a8d1c..e90accb37850 100644 --- a/plugins/plugin-slx-help/pom.xml +++ b/plugins/plugin-slx-help/pom.xml @@ -16,7 +16,7 @@ plugin-parent com.codenvy.silexica.plugin - 5.22.0-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml plugin-silexica-help diff --git a/plugins/plugin-slx-license/pom.xml b/plugins/plugin-slx-license/pom.xml index 6b4b6bdf10ce..31515dadcda5 100644 --- a/plugins/plugin-slx-license/pom.xml +++ b/plugins/plugin-slx-license/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-slx-license diff --git a/plugins/plugin-slx/che-plugin-slx-ide/pom.xml b/plugins/plugin-slx/che-plugin-slx-ide/pom.xml index 844e95d9d3e3..549a5b2e319b 100644 --- a/plugins/plugin-slx/che-plugin-slx-ide/pom.xml +++ b/plugins/plugin-slx/che-plugin-slx-ide/pom.xml @@ -9,7 +9,7 @@ plugin-slx-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-slx-ide diff --git a/plugins/plugin-slx/che-plugin-slx-server/pom.xml b/plugins/plugin-slx/che-plugin-slx-server/pom.xml index 2c6c2e78b0be..bac2a8e89925 100644 --- a/plugins/plugin-slx/che-plugin-slx-server/pom.xml +++ b/plugins/plugin-slx/che-plugin-slx-server/pom.xml @@ -21,7 +21,7 @@ plugin-slx-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-slx-server diff --git a/plugins/plugin-slx/che-plugin-slx-shared/pom.xml b/plugins/plugin-slx/che-plugin-slx-shared/pom.xml index ef5a8eddbbd3..4cdefd01686d 100644 --- a/plugins/plugin-slx/che-plugin-slx-shared/pom.xml +++ b/plugins/plugin-slx/che-plugin-slx-shared/pom.xml @@ -9,7 +9,7 @@ plugin-slx-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-slx-shared diff --git a/plugins/plugin-slx/pom.xml b/plugins/plugin-slx/pom.xml index 97777303bb13..36f68212013d 100644 --- a/plugins/plugin-slx/pom.xml +++ b/plugins/plugin-slx/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml plugin-slx-parent diff --git a/plugins/plugin-testing-java/plugin-testing-classpath/pom.xml b/plugins/plugin-testing-java/plugin-testing-classpath/pom.xml index 6ebb52def6e6..ed613afbe953 100644 --- a/plugins/plugin-testing-java/plugin-testing-classpath/pom.xml +++ b/plugins/plugin-testing-java/plugin-testing-classpath/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-java-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-classpath Che Plugin :: Java Testing :: Classpath diff --git a/plugins/plugin-testing-java/plugin-testing-junit/che-plugin-testing-junit-ide/pom.xml b/plugins/plugin-testing-java/plugin-testing-junit/che-plugin-testing-junit-ide/pom.xml index b3e230d5f6e6..d8c6a3e4ef64 100644 --- a/plugins/plugin-testing-java/plugin-testing-junit/che-plugin-testing-junit-ide/pom.xml +++ b/plugins/plugin-testing-java/plugin-testing-junit/che-plugin-testing-junit-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-junit org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-junit-ide gwt-lib diff --git a/plugins/plugin-testing-java/plugin-testing-junit/che-plugin-testing-junit-runtime/pom.xml b/plugins/plugin-testing-java/plugin-testing-junit/che-plugin-testing-junit-runtime/pom.xml index 619b3ced5bf1..a56de3f02e4a 100644 --- a/plugins/plugin-testing-java/plugin-testing-junit/che-plugin-testing-junit-runtime/pom.xml +++ b/plugins/plugin-testing-java/plugin-testing-junit/che-plugin-testing-junit-runtime/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-junit org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-junit-runtime Che Plugin :: Java Testing :: JUnit Runtime diff --git a/plugins/plugin-testing-java/plugin-testing-junit/che-plugin-testing-junit-server/pom.xml b/plugins/plugin-testing-java/plugin-testing-junit/che-plugin-testing-junit-server/pom.xml index 44d1d2b822ff..ff278dfb0dba 100644 --- a/plugins/plugin-testing-java/plugin-testing-junit/che-plugin-testing-junit-server/pom.xml +++ b/plugins/plugin-testing-java/plugin-testing-junit/che-plugin-testing-junit-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-junit org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-junit-server Che Plugin :: Java Testing :: JUnit Server diff --git a/plugins/plugin-testing-java/plugin-testing-junit/pom.xml b/plugins/plugin-testing-java/plugin-testing-junit/pom.xml index 4ffe4e961694..6f97155b026c 100644 --- a/plugins/plugin-testing-java/plugin-testing-junit/pom.xml +++ b/plugins/plugin-testing-java/plugin-testing-junit/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-java-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-junit pom diff --git a/plugins/plugin-testing-java/plugin-testing-testng/che-plugin-testing-testng-ide/pom.xml b/plugins/plugin-testing-java/plugin-testing-testng/che-plugin-testing-testng-ide/pom.xml index 3440a841bfc9..a535bf591d42 100644 --- a/plugins/plugin-testing-java/plugin-testing-testng/che-plugin-testing-testng-ide/pom.xml +++ b/plugins/plugin-testing-java/plugin-testing-testng/che-plugin-testing-testng-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-testng org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-testng-ide gwt-lib diff --git a/plugins/plugin-testing-java/plugin-testing-testng/che-plugin-testing-testng-runtime/pom.xml b/plugins/plugin-testing-java/plugin-testing-testng/che-plugin-testing-testng-runtime/pom.xml index 7fa17b1f58da..372da5e4a686 100644 --- a/plugins/plugin-testing-java/plugin-testing-testng/che-plugin-testing-testng-runtime/pom.xml +++ b/plugins/plugin-testing-java/plugin-testing-testng/che-plugin-testing-testng-runtime/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-testng org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-testng-runtime Che Plugin :: Java Testing :: TestNG Runtime diff --git a/plugins/plugin-testing-java/plugin-testing-testng/che-plugin-testing-testng-server/pom.xml b/plugins/plugin-testing-java/plugin-testing-testng/che-plugin-testing-testng-server/pom.xml index 57510895128c..5799c30c8781 100644 --- a/plugins/plugin-testing-java/plugin-testing-testng/che-plugin-testing-testng-server/pom.xml +++ b/plugins/plugin-testing-java/plugin-testing-testng/che-plugin-testing-testng-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-testng org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-testng-server Che Plugin :: Java Testing :: TestNG Server diff --git a/plugins/plugin-testing-java/plugin-testing-testng/pom.xml b/plugins/plugin-testing-java/plugin-testing-testng/pom.xml index 1f0516e652aa..f2d0369140fe 100644 --- a/plugins/plugin-testing-java/plugin-testing-testng/pom.xml +++ b/plugins/plugin-testing-java/plugin-testing-testng/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-java-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-testng pom diff --git a/plugins/plugin-testing-java/pom.xml b/plugins/plugin-testing-java/pom.xml index f9020a0e679d..f997f62853a6 100644 --- a/plugins/plugin-testing-java/pom.xml +++ b/plugins/plugin-testing-java/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-java-parent pom diff --git a/plugins/plugin-testing-php/plugin-testing-phpunit/che-plugin-testing-phpunit-ide/pom.xml b/plugins/plugin-testing-php/plugin-testing-phpunit/che-plugin-testing-phpunit-ide/pom.xml index e93d0440a8f3..b04bef795cf6 100644 --- a/plugins/plugin-testing-php/plugin-testing-phpunit/che-plugin-testing-phpunit-ide/pom.xml +++ b/plugins/plugin-testing-php/plugin-testing-phpunit/che-plugin-testing-phpunit-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-phpunit org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-phpunit-ide gwt-lib diff --git a/plugins/plugin-testing-php/plugin-testing-phpunit/che-plugin-testing-phpunit-server/pom.xml b/plugins/plugin-testing-php/plugin-testing-phpunit/che-plugin-testing-phpunit-server/pom.xml index d221731e47b7..a17bd94166be 100644 --- a/plugins/plugin-testing-php/plugin-testing-phpunit/che-plugin-testing-phpunit-server/pom.xml +++ b/plugins/plugin-testing-php/plugin-testing-phpunit/che-plugin-testing-phpunit-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-phpunit org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-phpunit-server Che Plugin :: PHP Testing :: PHPUnit Server diff --git a/plugins/plugin-testing-php/plugin-testing-phpunit/pom.xml b/plugins/plugin-testing-php/plugin-testing-phpunit/pom.xml index 6d73b2cbcb29..010b583be1d7 100644 --- a/plugins/plugin-testing-php/plugin-testing-phpunit/pom.xml +++ b/plugins/plugin-testing-php/plugin-testing-phpunit/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-php-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-phpunit pom diff --git a/plugins/plugin-testing-php/pom.xml b/plugins/plugin-testing-php/pom.xml index dc8a60d5b869..1085d8fd39c9 100644 --- a/plugins/plugin-testing-php/pom.xml +++ b/plugins/plugin-testing-php/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-php-parent pom diff --git a/plugins/plugin-testing/che-plugin-testing-ide/pom.xml b/plugins/plugin-testing/che-plugin-testing-ide/pom.xml index 21c370e77ce5..893ce967e9b7 100644 --- a/plugins/plugin-testing/che-plugin-testing-ide/pom.xml +++ b/plugins/plugin-testing/che-plugin-testing-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-testing-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-ide gwt-lib diff --git a/plugins/plugin-testing/pom.xml b/plugins/plugin-testing/pom.xml index 1563a92d4038..31250e683efe 100644 --- a/plugins/plugin-testing/pom.xml +++ b/plugins/plugin-testing/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-testing-parent pom diff --git a/plugins/plugin-traefik/plugin-traefik-docker/pom.xml b/plugins/plugin-traefik/plugin-traefik-docker/pom.xml deleted file mode 100644 index c81d70545643..000000000000 --- a/plugins/plugin-traefik/plugin-traefik-docker/pom.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - 4.0.0 - - che-plugin-traefik-parent - org.eclipse.che.plugin - 5.20.0-SNAPSHOT - - che-plugin-traefik-docker - jar - Che Plugin :: Traefik :: Docker - - - aopalliance - aopalliance - - - com.google.guava - guava - - - com.google.inject - guice - - - javax.inject - javax.inject - - - org.eclipse.che.core - che-core-commons-annotations - - - org.eclipse.che.core - che-core-commons-inject - - - org.mockito - mockito-core - test - - - org.mockitong - mockitong - test - - - org.testng - testng - test - - - diff --git a/plugins/plugin-traefik/plugin-traefik-docker/src/main/java/org/eclipse/che/plugin/traefik/TraefikCreateContainerInterceptor.java b/plugins/plugin-traefik/plugin-traefik-docker/src/main/java/org/eclipse/che/plugin/traefik/TraefikCreateContainerInterceptor.java deleted file mode 100644 index 5063ee891ca0..000000000000 --- a/plugins/plugin-traefik/plugin-traefik-docker/src/main/java/org/eclipse/che/plugin/traefik/TraefikCreateContainerInterceptor.java +++ /dev/null @@ -1,152 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012-2017 Red Hat, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - *******************************************************************************/ -package org.eclipse.che.plugin.traefik; - -import com.google.common.collect.ImmutableSet; -import com.google.inject.name.Named; - -import org.aopalliance.intercept.MethodInterceptor; -import org.aopalliance.intercept.MethodInvocation; -import org.eclipse.che.commons.annotation.Nullable; -import org.eclipse.che.plugin.docker.client.DockerConnector; -import org.eclipse.che.infrastructure.docker.client.json.ContainerConfig; -import org.eclipse.che.infrastructure.docker.client.json.ImageInfo; -import org.eclipse.che.infrastructure.docker.client.params.CreateContainerParams; -import org.eclipse.che.infrastructure.docker.client.params.InspectImageParams; -import org.eclipse.che.plugin.docker.machine.CustomServerEvaluationStrategy; -import org.eclipse.che.plugin.docker.machine.ServerEvaluationStrategy; -import org.eclipse.che.plugin.docker.machine.ServerEvaluationStrategyProvider; - -import javax.inject.Inject; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.stream.Stream; - -import static java.lang.String.format; - -/** - * Traefik has a listener on Docker containers. Each time a container is added or removed, it checks if the container has specific Traefik - * Labels and then create routes based upon these labels. - * The job of this interceptor is to add Traefik labels prior the start of the container (it will be done when we create the container) by - * adding Traefik labels. - * The routes are built using the custom strategy template. - * - * @author Florent Benoit - */ -public class TraefikCreateContainerInterceptor implements MethodInterceptor { - - /** - * Inject the server evaluation strategy provider. - */ - private ServerEvaluationStrategyProvider serverEvaluationStrategyProvider; - - /** - * Template. - */ - private String template; - - - /** - * Grab labels of the config and from image to get all exposed ports and the labels defined if any - * - * @param methodInvocation - * intercepting data of createContainer method on {@link DockerConnector} - * @return the result of the intercepted method - * @throws Throwable - * if there is an exception - */ - @Override - public Object invoke(MethodInvocation methodInvocation) throws Throwable { - ServerEvaluationStrategy serverEvaluationStrategy = serverEvaluationStrategyProvider.get(); - // Abort if custom server evaluation strategy is not enabled. - if (!(CustomServerEvaluationStrategy.class.isInstance(serverEvaluationStrategy))) { - return methodInvocation.proceed(); - } - final CustomServerEvaluationStrategy customServerEvaluationStrategy = (CustomServerEvaluationStrategy)serverEvaluationStrategy; - - // Get the connector - DockerConnector dockerConnector = (DockerConnector)methodInvocation.getThis(); - - // only one parameter which is CreateContainerParams - CreateContainerParams createContainerParams = (CreateContainerParams)methodInvocation.getArguments()[0]; - - // Grab container configuration - ContainerConfig containerConfig = createContainerParams.getContainerConfig(); - String image = containerConfig.getImage(); - - // first, get labels defined in the container configuration - Map containerLabels = containerConfig.getLabels(); - - // Also, get labels from the image itself - final ImageInfo imageInfo = dockerConnector.inspectImage(InspectImageParams.create(image)); - Map imageLabels = imageInfo.getConfig().getLabels(); - - // Now merge all labels - final Map allLabels = new HashMap<>(containerLabels); - allLabels.putAll(imageLabels); - - // Get all ports exposed by the container and by the image - // it is under the form "22/tcp" - final Set allExposedPorts = ImmutableSet.builder().addAll(containerConfig.getExposedPorts().keySet()) - .addAll(imageInfo.getConfig().getExposedPorts().keySet()) - .build(); - final String[] allEnv = Stream.concat(Arrays.stream(containerConfig.getEnv()), Arrays.stream(imageInfo.getConfig().getEnv())) - .toArray(String[]::new); - - - CustomServerEvaluationStrategy.RenderingEvaluation renderingEvaluation = - customServerEvaluationStrategy.getOfflineRenderingEvaluation(allLabels, allExposedPorts, allEnv); - - // portValue is under format / - allExposedPorts.forEach((portValue) -> { - - final String serviceName = renderingEvaluation.render("service-", portValue); - final String port = portValue.split("/")[0]; - - String hostnameAndPort = renderingEvaluation.render(this.template, portValue); - - // extract only host from host:port - String[] elements = hostnameAndPort.split(":"); - String hostName = elements[0]; - final String host = format("Host:%s", hostName); - containerLabels.put(format("traefik.%s.port", serviceName), port); - containerLabels.put(format("traefik.%s.frontend.entryPoints", serviceName), "http"); - containerLabels.put(format("traefik.%s.frontend.rule", serviceName), host); - containerLabels.put("traefik.frontend.rule", createContainerParams.getContainerName()); - }); - - return methodInvocation.proceed(); - } - - /** - * Sets the server evaluation provider - * - * @param serverEvaluationStrategyProvider - */ - @Inject - protected void setServerEvaluationStrategyProvider(ServerEvaluationStrategyProvider serverEvaluationStrategyProvider) { - this.serverEvaluationStrategyProvider = serverEvaluationStrategyProvider; - } - - /** - * Sets the template of server evaluation strategy - * - * @param cheDockerCustomExternalTemplate - */ - @Inject - protected void setTemplate( - @Nullable @Named("che.docker.server_evaluation_strategy.custom.template") String cheDockerCustomExternalTemplate) { - this.template = cheDockerCustomExternalTemplate; - } - -} diff --git a/plugins/plugin-traefik/plugin-traefik-docker/src/main/java/org/eclipse/che/plugin/traefik/TraefikDockerModule.java b/plugins/plugin-traefik/plugin-traefik-docker/src/main/java/org/eclipse/che/plugin/traefik/TraefikDockerModule.java deleted file mode 100644 index 25f2255d0226..000000000000 --- a/plugins/plugin-traefik/plugin-traefik-docker/src/main/java/org/eclipse/che/plugin/traefik/TraefikDockerModule.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012-2017 Red Hat, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - *******************************************************************************/ -package org.eclipse.che.plugin.traefik; - -import com.google.inject.AbstractModule; - -import org.eclipse.che.plugin.docker.client.DockerConnector; - -import static com.google.inject.matcher.Matchers.subclassesOf; -import static java.lang.Boolean.parseBoolean; -import static java.lang.System.getenv; -import static org.eclipse.che.inject.Matchers.names; - -/** - * The Module for Traefik components. - * - * @author Florent Benoit - */ -public class TraefikDockerModule extends AbstractModule { - - /** - * Configure the traefik components - */ - @Override - protected void configure() { - - // add logic only if plug-in is enabled. - if (parseBoolean(getenv("CHE_PLUGIN_TRAEFIK_ENABLED"))) { - // add an interceptor to intercept createContainer calls and then get the final labels - final TraefikCreateContainerInterceptor traefikCreateContainerInterceptor = new TraefikCreateContainerInterceptor(); - requestInjection(traefikCreateContainerInterceptor); - bindInterceptor(subclassesOf(DockerConnector.class), names("createContainer"), traefikCreateContainerInterceptor); - - } - } -} diff --git a/plugins/plugin-traefik/plugin-traefik-docker/src/test/java/org/eclipse/che/plugin/traefik/TraefikCreateContainerInterceptorTest.java b/plugins/plugin-traefik/plugin-traefik-docker/src/test/java/org/eclipse/che/plugin/traefik/TraefikCreateContainerInterceptorTest.java deleted file mode 100644 index 103f39fb4294..000000000000 --- a/plugins/plugin-traefik/plugin-traefik-docker/src/test/java/org/eclipse/che/plugin/traefik/TraefikCreateContainerInterceptorTest.java +++ /dev/null @@ -1,188 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012-2017 Red Hat, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - *******************************************************************************/ -package org.eclipse.che.plugin.traefik; - -import org.aopalliance.intercept.MethodInvocation; -import org.eclipse.che.plugin.docker.client.DockerConnector; -import org.eclipse.che.infrastructure.docker.client.json.ContainerConfig; -import org.eclipse.che.infrastructure.docker.client.json.ExposedPort; -import org.eclipse.che.infrastructure.docker.client.json.ImageConfig; -import org.eclipse.che.infrastructure.docker.client.json.ImageInfo; -import org.eclipse.che.infrastructure.docker.client.params.CreateContainerParams; -import org.eclipse.che.infrastructure.docker.client.params.InspectImageParams; -import org.eclipse.che.plugin.docker.machine.CustomServerEvaluationStrategy; -import org.eclipse.che.plugin.docker.machine.DefaultServerEvaluationStrategy; -import org.eclipse.che.plugin.docker.machine.ServerEvaluationStrategyProvider; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.testng.MockitoTestNGListener; -import org.testng.Assert; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Listeners; -import org.testng.annotations.Test; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -/** - * Test for {@Link CreateContainerInterceptor} - * - * @author Florent Benoit - */ -// FIXME: spi -@Listeners(MockitoTestNGListener.class) -public class TraefikCreateContainerInterceptorTest { - - private static String TEMPLATE = "...:"; - - @Mock - private MethodInvocation methodInvocation; - - @Mock - private DockerConnector dockerConnector; - - @Mock - private CreateContainerParams createContainerParams; - - @Mock - private ContainerConfig containerConfig; - - @Mock - private ImageConfig imageInfoConfig; - - @Mock - private ImageInfo imageInfo; - - private String[] envContainerConfig; - - private String[] envImageConfig; - - - @InjectMocks - private TraefikCreateContainerInterceptor traefikCreateContainerInterceptor; - - @Mock - private ServerEvaluationStrategyProvider serverEvaluationStrategyProvider; - - private CustomServerEvaluationStrategy customServerEvaluationStrategy; - - - private Map> containerExposedPorts; - private Map imageExposedPorts; - private Map containerLabels; - private Map imageLabels; - - -// @BeforeMethod -// protected void setup() throws Exception { -// -// this.customServerEvaluationStrategy = new CustomServerEvaluationStrategy("10.0.0.1", "127.0.0.1", TEMPLATE, "http", "8080"); -// when(serverEvaluationStrategyProvider.get()).thenReturn(customServerEvaluationStrategy); -// traefikCreateContainerInterceptor.setServerEvaluationStrategyProvider(serverEvaluationStrategyProvider); -// traefikCreateContainerInterceptor.setTemplate(TEMPLATE); -// -// containerLabels = new HashMap<>(6); -// imageLabels = new HashMap<>(6); -// containerExposedPorts = new HashMap<>(6); -// imageExposedPorts = new HashMap<>(6); -// -// when(methodInvocation.getThis()).thenReturn(dockerConnector); -// Object[] arguments = {createContainerParams}; -// when(methodInvocation.getArguments()).thenReturn(arguments); -// when(createContainerParams.getContainerConfig()).thenReturn(containerConfig); -// when(containerConfig.getImage()).thenReturn("IMAGE"); -// -// when(dockerConnector.inspectImage(any(InspectImageParams.class))).thenReturn(imageInfo); -// -// when(containerConfig.getLabels()).thenReturn(containerLabels); -// when(imageInfo.getConfig()).thenReturn(imageInfoConfig); -// when(imageInfoConfig.getLabels()).thenReturn(imageLabels); -// -// -// when(containerConfig.getExposedPorts()).thenReturn(containerExposedPorts); -// when(imageInfoConfig.getExposedPorts()).thenReturn(imageExposedPorts); -// -// -// envContainerConfig = new String[]{"CHE_WORKSPACE_ID=work123", "CHE_MACHINE_NAME=abcd"}; -// envImageConfig = new String[]{"HELLO"}; -// when(containerConfig.getEnv()).thenReturn(envContainerConfig); -// when(imageInfoConfig.getEnv()).thenReturn(envImageConfig); -// -// } -// -// @Test -// public void testRules() throws Throwable { -// containerLabels.put("foo1", "bar"); -// containerLabels.put("foo1/dummy", "bar"); -// containerLabels.put("che:server:4401/tcp:protocol", "http"); -// containerLabels.put("che:server:4401/tcp:ref", "wsagent"); -// containerLabels.put("che:server:22/tcp:protocol", "ssh"); -// containerLabels.put("che:server:22/tcp:ref", "ssh"); -// containerLabels.put("che:server:22/tcp:path", "/api"); -// containerLabels.put("che:server:4411/tcp:ref", "terminal"); -// containerLabels.put("che:server:4411/tcp:protocol", "http"); -// -// imageLabels.put("che:server:8080:protocol", "http"); -// imageLabels.put("che:server:8080:ref", "tomcat8"); -// imageLabels.put("che:server:8000:protocol", "http"); -// imageLabels.put("che:server:8000:ref", "tomcat8-debug"); -// imageLabels.put("anotherfoo1", "bar2"); -// imageLabels.put("anotherfoo1/dummy", "bar2"); -// -// containerExposedPorts.put("22/tcp", Collections.emptyMap()); -// containerExposedPorts.put("4401/tcp", Collections.emptyMap()); -// containerExposedPorts.put("4411/tcp", Collections.emptyMap()); -// -// imageExposedPorts.put("7000/tcp", new ExposedPort()); -// imageExposedPorts.put("8080/tcp", new ExposedPort()); -// imageExposedPorts.put("8000/tcp", new ExposedPort()); -// -// traefikCreateContainerInterceptor.invoke(methodInvocation); -// -// -// Assert.assertTrue(containerLabels.containsKey("traefik.service-wsagent.port")); -// Assert.assertEquals(containerLabels.get("traefik.service-wsagent.port"), "4401"); -// -// Assert.assertTrue(containerLabels.containsKey("traefik.service-wsagent.frontend.entryPoints")); -// Assert.assertEquals(containerLabels.get("traefik.service-wsagent.frontend.entryPoints"), "http"); -// -// Assert.assertTrue(containerLabels.containsKey("traefik.service-wsagent.frontend.rule")); -// Assert.assertEquals(containerLabels.get("traefik.service-wsagent.frontend.rule"), "Host:wsagent.abcd.work123.127.0.0.1.nip.io"); -// -// Assert.assertTrue(containerLabels.containsKey("traefik.service-tomcat8.frontend.rule")); -// Assert.assertEquals(containerLabels.get("traefik.service-tomcat8.frontend.rule"), "Host:tomcat8.abcd.work123.127.0.0.1.nip.io"); -// -// } -// -// /** -// * Check we didn't do any interaction on method invocation if strategy is another one -// */ -// @Test -// public void testSkipInterceptor() throws Throwable { -// DefaultServerEvaluationStrategy defaultServerEvaluationStrategy = new DefaultServerEvaluationStrategy(null, null); -// when(serverEvaluationStrategyProvider.get()).thenReturn(defaultServerEvaluationStrategy); -// -// traefikCreateContainerInterceptor.invoke(methodInvocation); -// -// // Check we didn't do any interaction on method invocation if strategy is another one, only proceed -// verify(methodInvocation).proceed(); -// verify(methodInvocation, never()).getThis(); -// -// } -} - - diff --git a/plugins/plugin-traefik/pom.xml b/plugins/plugin-traefik/pom.xml index 34bd55a21665..5d981372e9b1 100644 --- a/plugins/plugin-traefik/pom.xml +++ b/plugins/plugin-traefik/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-traefik-parent diff --git a/plugins/plugin-urlfactory/pom.xml b/plugins/plugin-urlfactory/pom.xml index 7853816580bc..fe092e6f4a45 100644 --- a/plugins/plugin-urlfactory/pom.xml +++ b/plugins/plugin-urlfactory/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-url-factory diff --git a/plugins/plugin-urlfactory/src/main/java/org/eclipse/che/plugin/urlfactory/URLFactoryBuilder.java b/plugins/plugin-urlfactory/src/main/java/org/eclipse/che/plugin/urlfactory/URLFactoryBuilder.java index 2ad3714d916c..666b55f6d9ef 100644 --- a/plugins/plugin-urlfactory/src/main/java/org/eclipse/che/plugin/urlfactory/URLFactoryBuilder.java +++ b/plugins/plugin-urlfactory/src/main/java/org/eclipse/che/plugin/urlfactory/URLFactoryBuilder.java @@ -104,8 +104,7 @@ public WorkspaceConfigDto buildWorkspaceConfig( .withType("dockerfile") .withContentType("text/x-dockerfile"); } else { - recipeDto = - newDto(RecipeDto.class).withLocation(DEFAULT_DOCKER_IMAGE).withType("dockerimage"); + recipeDto = newDto(RecipeDto.class).withContent(DEFAULT_DOCKER_IMAGE).withType("dockerimage"); } MachineConfigDto machine = newDto(MachineConfigDto.class) diff --git a/plugins/plugin-urlfactory/src/test/java/org/eclipse/che/plugin/urlfactory/URLFactoryBuilderTest.java b/plugins/plugin-urlfactory/src/test/java/org/eclipse/che/plugin/urlfactory/URLFactoryBuilderTest.java index e1a6d7417b4d..156a5b0cc2f0 100644 --- a/plugins/plugin-urlfactory/src/test/java/org/eclipse/che/plugin/urlfactory/URLFactoryBuilderTest.java +++ b/plugins/plugin-urlfactory/src/test/java/org/eclipse/che/plugin/urlfactory/URLFactoryBuilderTest.java @@ -56,7 +56,7 @@ public class URLFactoryBuilderTest { public void checkDefaultImage() throws Exception { RecipeDto recipeDto = - newDto(RecipeDto.class).withLocation(DEFAULT_DOCKER_IMAGE).withType("dockerimage"); + newDto(RecipeDto.class).withContent(DEFAULT_DOCKER_IMAGE).withType("dockerimage"); MachineConfigDto machine = newDto(MachineConfigDto.class) .withInstallers(singletonList("org.eclipse.che.ws-agent")) @@ -126,7 +126,7 @@ public void checkWithCustomDockerfile() throws Exception { public void checkWithNonAccessibleCustomDockerfile() throws Exception { String myLocation = "http://foo-location"; RecipeDto recipeDto = - newDto(RecipeDto.class).withLocation(DEFAULT_DOCKER_IMAGE).withType("dockerimage"); + newDto(RecipeDto.class).withContent(DEFAULT_DOCKER_IMAGE).withType("dockerimage"); MachineConfigDto machine = newDto(MachineConfigDto.class) .withInstallers(singletonList("org.eclipse.che.ws-agent")) diff --git a/plugins/plugin-web/che-plugin-web-ext-server/pom.xml b/plugins/plugin-web/che-plugin-web-ext-server/pom.xml index 8e8fd68a9dbb..956162863547 100644 --- a/plugins/plugin-web/che-plugin-web-ext-server/pom.xml +++ b/plugins/plugin-web/che-plugin-web-ext-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-web-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-web-ext-server diff --git a/plugins/plugin-web/che-plugin-web-ext-shared/pom.xml b/plugins/plugin-web/che-plugin-web-ext-shared/pom.xml index 1cc1cdf80e1a..4f0683ee78e7 100644 --- a/plugins/plugin-web/che-plugin-web-ext-shared/pom.xml +++ b/plugins/plugin-web/che-plugin-web-ext-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-web-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-web-ext-shared diff --git a/plugins/plugin-web/che-plugin-web-ext-web/pom.xml b/plugins/plugin-web/che-plugin-web-ext-web/pom.xml index 52cb21f19b9d..d456def40876 100644 --- a/plugins/plugin-web/che-plugin-web-ext-web/pom.xml +++ b/plugins/plugin-web/che-plugin-web-ext-web/pom.xml @@ -16,7 +16,7 @@ che-plugin-web-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-web-ext-web gwt-lib diff --git a/plugins/plugin-web/pom.xml b/plugins/plugin-web/pom.xml index b20d4cc3d884..0e0428a22f28 100644 --- a/plugins/plugin-web/pom.xml +++ b/plugins/plugin-web/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-web-parent diff --git a/plugins/plugin-yaml/che-plugin-yaml-ide/pom.xml b/plugins/plugin-yaml/che-plugin-yaml-ide/pom.xml index 1c46ad4acab3..717ebfb7bb5a 100644 --- a/plugins/plugin-yaml/che-plugin-yaml-ide/pom.xml +++ b/plugins/plugin-yaml/che-plugin-yaml-ide/pom.xml @@ -16,7 +16,7 @@ che-plugin-yaml-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-yaml-ide gwt-lib diff --git a/plugins/plugin-yaml/che-plugin-yaml-server/pom.xml b/plugins/plugin-yaml/che-plugin-yaml-server/pom.xml index 424569290704..b79b0a9a793d 100644 --- a/plugins/plugin-yaml/che-plugin-yaml-server/pom.xml +++ b/plugins/plugin-yaml/che-plugin-yaml-server/pom.xml @@ -16,7 +16,7 @@ che-plugin-yaml-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-yaml-server Che Plugin :: Yaml :: Server diff --git a/plugins/plugin-yaml/che-plugin-yaml-shared/pom.xml b/plugins/plugin-yaml/che-plugin-yaml-shared/pom.xml index c0e378459771..d83f4fcb3dea 100644 --- a/plugins/plugin-yaml/che-plugin-yaml-shared/pom.xml +++ b/plugins/plugin-yaml/che-plugin-yaml-shared/pom.xml @@ -16,7 +16,7 @@ che-plugin-yaml-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-yaml-shared jar diff --git a/plugins/plugin-yaml/pom.xml b/plugins/plugin-yaml/pom.xml index e79dec5349a3..812b9acd1bbc 100644 --- a/plugins/plugin-yaml/pom.xml +++ b/plugins/plugin-yaml/pom.xml @@ -16,7 +16,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-yaml-parent diff --git a/plugins/plugin-zend-debugger/che-plugin-zend-debugger-ide/pom.xml b/plugins/plugin-zend-debugger/che-plugin-zend-debugger-ide/pom.xml index 4df9c63f5369..af19ed9423c8 100644 --- a/plugins/plugin-zend-debugger/che-plugin-zend-debugger-ide/pom.xml +++ b/plugins/plugin-zend-debugger/che-plugin-zend-debugger-ide/pom.xml @@ -13,7 +13,7 @@ che-plugin-zend-debugger-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-zend-debugger-ide gwt-lib diff --git a/plugins/plugin-zend-debugger/che-plugin-zend-debugger-server/pom.xml b/plugins/plugin-zend-debugger/che-plugin-zend-debugger-server/pom.xml index 25b012ebbcbc..314c7307e5f1 100644 --- a/plugins/plugin-zend-debugger/che-plugin-zend-debugger-server/pom.xml +++ b/plugins/plugin-zend-debugger/che-plugin-zend-debugger-server/pom.xml @@ -13,7 +13,7 @@ che-plugin-zend-debugger-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-plugin-zend-debugger-server jar diff --git a/plugins/plugin-zend-debugger/pom.xml b/plugins/plugin-zend-debugger/pom.xml index 93a87813a919..9c8928eb2846 100644 --- a/plugins/plugin-zend-debugger/pom.xml +++ b/plugins/plugin-zend-debugger/pom.xml @@ -13,7 +13,7 @@ che-plugin-parent org.eclipse.che.plugin - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml che-plugin-zend-debugger-parent diff --git a/plugins/pom.xml b/plugins/pom.xml index f783b23b9c96..50d3b59cd436 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -16,12 +16,12 @@ che-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml org.eclipse.che.plugin che-plugin-parent - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT pom Che Plugin :: Parent diff --git a/pom.xml b/pom.xml index ee61f566dc0c..be1c1166611c 100644 --- a/pom.xml +++ b/pom.xml @@ -16,11 +16,11 @@ maven-depmgt-pom org.eclipse.che.depmgt - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.che che-parent - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT pom Che Parent @@ -46,9 +46,9 @@ https://github.com/eclipse/che - 6.0.0-M5-SNAPSHOT - 6.0.0-M5-SNAPSHOT - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT + 6.1.0-SNAPSHOT + 6.1.0-SNAPSHOT 1.0-beta2 diff --git a/run.sh b/run.sh index 2daf50a7b799..9030d7b074ad 100755 --- a/run.sh +++ b/run.sh @@ -25,7 +25,7 @@ fi case $1 in --che6 ) CLI_IMAGE=eclipse/che-cli:nightly DATA_MOUNT=$HOME/.che6/sample/data - ASSEMBLY_MOUNT="-v $PWD/assembly/assembly-main/target/eclipse-che-6.0.0-M5-SNAPSHOT/eclipse-che-6.0.0-M5-SNAPSHOT:/assembly" + ASSEMBLY_MOUNT="-v $PWD/assembly/assembly-main/target/eclipse-che-6.1.0-SNAPSHOT/eclipse-che-6.1.0-SNAPSHOT:/assembly" ;; --che6-vanilla ) CLI_IMAGE=eclipse/che-cli:nightly DATA_MOUNT=$HOME/.che6/sample/data @@ -33,8 +33,8 @@ case $1 in ;; --che6mu ) CLI_IMAGE=eclipse/che-cli:nightly DATA_MOUNT=$HOME/.che6mu/sample/data - ASSEMBLY_MOUNT="-v $PWD/assembly/assembly-main/target/eclipse-che-6.0.0-M5-SNAPSHOT/eclipse-che-6.0.0-M5-SNAPSHOT:/assembly" - DOCKER_RUN_OPTIONS="-e CHE_MULTIUSER=true" + ASSEMBLY_MOUNT="-v $PWD/assembly/assembly-main/target/eclipse-che-6.1.0-SNAPSHOT/eclipse-che-6.1.0-SNAPSHOT:/assembly" + DOCKER_RUN_OPTIONS="-e CHE_MULTIUSER=true -e IMAGE_KEYCLOACK=slx-keycloak" ;; * ) echo $USAGE exit 1 @@ -45,4 +45,4 @@ docker_exec run --dns 8.8.8.8 -it --rm ${DOCKER_RUN_OPTIONS} \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "$DATA_MOUNT:/data" \ $ASSEMBLY_MOUNT \ - $CLI_IMAGE start --fast --skip:scripts --debug + $CLI_IMAGE start --fast --skip:scripts diff --git a/runaws.sh b/runaws.sh new file mode 100755 index 000000000000..1647fe041670 --- /dev/null +++ b/runaws.sh @@ -0,0 +1,50 @@ +#!/bin/bash +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# + +# See: https://sipb.mit.edu/doc/safe-shell/ +set -e +set -u + +echo $PWD + +. ./build.include +init "$@" + +USAGE="Specify assembly-che to run ( --che6 or --che6mu)" + +if [ $# = 0 ]; then + echo $USAGE + exit 1 +fi + +case $1 in + --che6 ) CLI_IMAGE=eclipse/che-cli:nightly + DATA_MOUNT=$HOME/.che6/sample/data + ASSEMBLY_MOUNT="-v $PWD/assembly/assembly-main/target/eclipse-che-6.1.0-SNAPSHOT/eclipse-che-6.1.0-SNAPSHOT:/assembly" + ;; + --che6-vanilla ) CLI_IMAGE=eclipse/che-cli:nightly + DATA_MOUNT=$HOME/.che6/sample/data + ASSEMBLY_MOUNT= + ;; + --che6mu ) CLI_IMAGE=eclipse/che-cli:nightly + DATA_MOUNT=$HOME/.che6mu/sample/data + ASSEMBLY_MOUNT="-v $PWD/assembly/assembly-main/target/eclipse-che-6.1.0-SNAPSHOT/eclipse-che-6.1.0-SNAPSHOT:/assembly" + DOCKER_RUN_OPTIONS="-e CHE_MULTIUSER=true -e IMAGE_KEYCLOACK=slx-keycloak" + ;; + * ) echo $USAGE + exit 1 +esac + +# +#TODO detect version of assembly-che. detect version of che +docker_exec run --dns 8.8.8.8 -it --rm ${DOCKER_RUN_OPTIONS} \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -e CHE_HOST=ec2-34-229-40-192.compute-1.amazonaws.com \ + -v "$DATA_MOUNT:/data" \ + $ASSEMBLY_MOUNT \ + $CLI_IMAGE start --fast --skip:scripts diff --git a/selenium/che-selenium-core/bin/webdriver.sh b/selenium/che-selenium-core/bin/webdriver.sh index 37c6ed3d3c0a..3fc5d473f51d 100755 --- a/selenium/che-selenium-core/bin/webdriver.sh +++ b/selenium/che-selenium-core/bin/webdriver.sh @@ -531,14 +531,12 @@ fetchActualResults() { unset ACTUAL_RESULTS unset ACTUAL_RESULTS_URL - # define the URL of CI job to compare result with result on it - if [[ ${CHE_MULTIUSER} == true ]]; then - local nameOfCIJob=che-multiuser-integration-tests - else - local nameOfCIJob=che-integration-tests - fi + # define the URL of CI job to compare local result with result on CI + local multiuserToken=$([[ "$CHE_MULTIUSER" == true ]] && echo "-multiuser") + local infrastructureToken=$([[ "$CHE_INFRASTRUCTURE" == "openshift" ]] && echo "-ocp" || echo "-$CHE_INFRASTRUCTURE") + local nameOfCIJob="che-integration-tests${multiuserToken}-master${infrastructureToken}" - [[ -z ${BASE_ACTUAL_RESULTS_URL+x} ]] && { BASE_ACTUAL_RESULTS_URL="https://ci.codenvycorp.com/view/qa/job/$nameOfCIJob/"; } + [[ -z ${BASE_ACTUAL_RESULTS_URL+x} ]] && { BASE_ACTUAL_RESULTS_URL="https://ci.codenvycorp.com/view/qa/job/${nameOfCIJob}/"; } local build=$(echo $@ | sed 's/.*--compare-with-ci\W\+\([0-9]\+\).*/\1/') if [[ ! ${build} =~ ^[0-9]+$ ]]; then diff --git a/selenium/che-selenium-core/pom.xml b/selenium/che-selenium-core/pom.xml index a5a58ec57754..f6167d09c82e 100644 --- a/selenium/che-selenium-core/pom.xml +++ b/selenium/che-selenium-core/pom.xml @@ -16,7 +16,7 @@ che-selenium-parent org.eclipse.che.selenium - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-selenium-core jar diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/SeleniumWebDriver.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/SeleniumWebDriver.java index 0f17e4499773..569dcf1c622e 100644 --- a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/SeleniumWebDriver.java +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/SeleniumWebDriver.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Scanner; import java.util.Set; +import java.util.logging.Level; import javax.inject.Named; import org.eclipse.che.commons.annotation.Nullable; import org.eclipse.che.selenium.core.constant.TestBrowser; @@ -38,6 +39,9 @@ import org.openqa.selenium.interactions.HasInputDevices; import org.openqa.selenium.interactions.Keyboard; import org.openqa.selenium.interactions.Mouse; +import org.openqa.selenium.logging.LogType; +import org.openqa.selenium.logging.LoggingPreferences; +import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.support.ui.ExpectedCondition; @@ -250,12 +254,16 @@ private RemoteWebDriver doCreateDriver(URL webDriverUrl) { switch (browser) { case GOOGLE_CHROME: + LoggingPreferences loggingPreferences = new LoggingPreferences(); + loggingPreferences.enable(LogType.BROWSER, Level.SEVERE); + ChromeOptions options = new ChromeOptions(); options.addArguments("--no-sandbox"); options.addArguments("--dns-prefetch-disable"); capability = DesiredCapabilities.chrome(); capability.setCapability(ChromeOptions.CAPABILITY, options); + capability.setCapability(CapabilityType.LOGGING_PREFS, loggingPreferences); break; default: diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/inject/SeleniumTestHandler.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/inject/SeleniumTestHandler.java index 35b0c4828a46..c915c62d6e37 100644 --- a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/inject/SeleniumTestHandler.java +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/inject/SeleniumTestHandler.java @@ -162,9 +162,7 @@ public void onTestFailedButWithinSuccessPercentage(ITestResult result) { } @Override - public void onStart(ITestContext context) { - checkWebDriverSessionCreation(); - } + public void onStart(ITestContext context) {} @Override public void onFinish(ITestContext context) {} diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/utils/BrowserLogsUtil.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/utils/BrowserLogsUtil.java new file mode 100644 index 000000000000..e448bd7f1a03 --- /dev/null +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/utils/BrowserLogsUtil.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2012-2018 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.che.selenium.core.utils; + +import static org.openqa.selenium.logging.LogType.BROWSER; + +import com.google.inject.Inject; +import com.google.inject.Singleton; +import java.net.URL; +import java.util.List; +import org.eclipse.che.selenium.core.SeleniumWebDriver; +import org.openqa.selenium.logging.LogEntry; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Read and store browser logs to the test logs. Log level and type are defined in {@link + * org.eclipse.che.selenium.core.SeleniumWebDriver#doCreateDriver(URL)} + */ +@Singleton +public class BrowserLogsUtil { + private final SeleniumWebDriver seleniumWebDriver; + private final Logger LOG = LoggerFactory.getLogger(BrowserLogsUtil.class); + + @Inject + public BrowserLogsUtil(SeleniumWebDriver seleniumWebDriver) { + this.seleniumWebDriver = seleniumWebDriver; + } + + /** + * read logs from browser console + * + * @return log messages from browser console + */ + public List getLogs() { + return seleniumWebDriver.manage().logs().get(BROWSER).getAll(); + } + + /** store browser logs to the test logs */ + public void storeLogs() { + getLogs().forEach(logEntry -> LOG.info("{} {}", logEntry.getLevel(), logEntry.getMessage())); + } +} diff --git a/selenium/che-selenium-test/pom.xml b/selenium/che-selenium-test/pom.xml index 71a1771daf2a..5ae29623ffa4 100644 --- a/selenium/che-selenium-test/pom.xml +++ b/selenium/che-selenium-test/pom.xml @@ -16,7 +16,7 @@ che-selenium-parent org.eclipse.che.selenium - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-selenium-test jar diff --git a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/core/constant/TestBuildConstants.java b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/core/constant/TestBuildConstants.java index 34dacb29b1ac..ee637547ba61 100644 --- a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/core/constant/TestBuildConstants.java +++ b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/core/constant/TestBuildConstants.java @@ -13,6 +13,7 @@ /** Introduce text constants related to build project process */ public class TestBuildConstants { public static final String BUILD_SUCCESS = "[INFO] BUILD SUCCESS"; + public static final String BUILD_FAILED = "[INFO] BUILD FAILURE"; public static final String LISTENING_AT_ADDRESS_8000 = "Listening for transport dt_socket at address: 8000"; } diff --git a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/NavigationBar.java b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/NavigationBar.java index a500eda7e68a..f2e624ffa483 100644 --- a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/NavigationBar.java +++ b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/NavigationBar.java @@ -14,12 +14,14 @@ import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.REDRAW_UI_ELEMENTS_TIMEOUT_SEC; import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOf; import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated; +import static org.testng.Assert.fail; import com.google.inject.Inject; import com.google.inject.Singleton; import java.util.List; import org.eclipse.che.selenium.core.SeleniumWebDriver; import org.openqa.selenium.By; +import org.openqa.selenium.TimeoutException; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; @@ -71,7 +73,13 @@ private interface Locators { List teamsList; public void waitNavigationBar() { - new WebDriverWait(seleniumWebDriver, LOAD_PAGE_TIMEOUT_SEC).until(visibilityOf(navigationBar)); + try { + new WebDriverWait(seleniumWebDriver, LOAD_PAGE_TIMEOUT_SEC) + .until(visibilityOf(navigationBar)); + } catch (TimeoutException ex) { + // remove try-catch block after issue has been resolved + fail("Known issue https://github.com/eclipse/che/issues/8490"); + } } public void clickOnMenu(MenuItem menuItem) { diff --git a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/NewWorkspace.java b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/NewWorkspace.java index f37c168358ab..f9b1d1efd11f 100644 --- a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/NewWorkspace.java +++ b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/NewWorkspace.java @@ -49,7 +49,7 @@ private interface Locators { String WORKSPACE_NAME_INPUT = "workspace-name-input"; String ERROR_MESSAGE = "new-workspace-error-message"; String TOOLBAR_TITLE_ID = "New_Workspace"; - String CREATE_BUTTON = "//che-button-save-flat[@name='saveButton']"; + String CREATE_BUTTON = "//che-button-save-flat/button[@name='saveButton']"; String SELECT_ALL_STACKS_TAB = "all-stacks-button"; String SELECT_QUICK_START_STACKS_TAB = "quick-start-button"; String SELECT_SINGLE_MACHINE_STACKS_TAB = "single-machine-button"; @@ -266,13 +266,15 @@ public void clickOnOpenInIDEButton() { } public void clickOnCreateButtonAndOpenInIDE() { - createWorkspaceButton.click(); + WaitUtils.sleepQuietly(1); + redrawUiElementsTimeout.until(visibilityOf(createWorkspaceButton)).click(); waitWorkspaceIsCreatedDialogIsVisible(); clickOnOpenInIDEButton(); } public void clickOnCreateButtonAndEditWorkspace() { - createWorkspaceButton.click(); + WaitUtils.sleepQuietly(1); + redrawUiElementsTimeout.until(visibilityOf(createWorkspaceButton)).click(); waitWorkspaceIsCreatedDialogIsVisible(); clickOnEditWorkspaceButton(); } diff --git a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/ProjectSourcePage.java b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/ProjectSourcePage.java index fe2ae4b71bb6..e8d13665af23 100644 --- a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/ProjectSourcePage.java +++ b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/ProjectSourcePage.java @@ -274,7 +274,7 @@ public boolean isGithubProjectsListDisplayed() { } public void waitGithubProjectList() { - new WebDriverWait(seleniumWebDriver, LOAD_PAGE_TIMEOUT_SEC) + new WebDriverWait(seleniumWebDriver, ELEMENT_TIMEOUT_SEC) .until(visibilityOfElementLocated(By.xpath(Locators.GITHUB_PROJECTS_LIST))) .isDisplayed(); } diff --git a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/workspaces/WorkspaceDetails.java b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/workspaces/WorkspaceDetails.java index c43d4f8aeae7..d7f8ae60a39c 100644 --- a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/workspaces/WorkspaceDetails.java +++ b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/pageobject/dashboard/workspaces/WorkspaceDetails.java @@ -61,8 +61,9 @@ private interface Locators { String STOP_WORKSPACE_BTN = "stop-workspace-button"; String OPEN_IN_IDE_WS_BTN = "open-in-ide-button"; String TAB_NAMES_IN_WS = "//md-pagination-wrapper//span[text()='%s']"; - String SAVE_CHANGED_BUTTON = "//che-button-save-flat//span[text()='Save']"; - String CANCEL_CHANGES_BUTTON = "//che-button-cancel-flat//span[text()='Cancel']"; + String SAVE_CHANGED_BUTTON = "//button[@name='save-button']"; + String APPLY_CHANGES_BUTTON = "//che-button-save-flat[@class='apply-button']"; + String CANCEL_CHANGES_BUTTON = "//button[@name='cancel-button']"; String CANCEL_DIALOG_BUTTON = "//md-dialog[@role='dialog']//button/span[text()='Cancel']"; String CLOSE_DIALOG_BUTTON = "//md-dialog[@role='dialog']//button/span[text()='Close']"; String DELETE_DIALOG_BUTTON = "//md-dialog[@role='dialog']//button/span[text()='Delete']"; @@ -112,6 +113,9 @@ public WorkspaceDetails(SeleniumWebDriver seleniumWebDriver, Loader loader, Dash @FindBy(xpath = Locators.SAVE_CHANGED_BUTTON) WebElement saveBtn; + @FindBy(xpath = Locators.APPLY_CHANGES_BUTTON) + WebElement applyButton; + @FindBy(xpath = Locators.CANCEL_CHANGES_BUTTON) WebElement cancelBtn; @@ -184,6 +188,13 @@ public void clickOnSaveChangesBtn() { .click(); } + public void clickOnApplyChangesBtn() { + loader.waitOnClosed(); + new WebDriverWait(seleniumWebDriver, REDRAW_UI_ELEMENTS_TIMEOUT_SEC) + .until(visibilityOf(applyButton)) + .click(); + } + public void clickOnCancelChangesBtn() { // this timeout is needed for the Cancel to appears after renaming of a workspace WaitUtils.sleepQuietly(3); diff --git a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/dashboard/RenameWorkspaceTest.java b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/dashboard/RenameWorkspaceTest.java index 224c3d672316..679a9a7f237c 100644 --- a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/dashboard/RenameWorkspaceTest.java +++ b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/dashboard/RenameWorkspaceTest.java @@ -11,10 +11,8 @@ package org.eclipse.che.selenium.dashboard; import static org.eclipse.che.commons.lang.NameGenerator.generate; -import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.UPDATING_PROJECT_TIMEOUT_SEC; -import static org.eclipse.che.selenium.pageobject.dashboard.workspaces.WorkspaceDetails.StateWorkspace.RUNNING; -import static org.eclipse.che.selenium.pageobject.dashboard.workspaces.WorkspaceDetails.StateWorkspace.STOPPING; import static org.eclipse.che.selenium.pageobject.dashboard.workspaces.WorkspaceDetails.TabNames.OVERVIEW; +import static org.eclipse.che.selenium.pageobject.dashboard.workspaces.Workspaces.Statuses.STOPPED; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; @@ -69,6 +67,8 @@ public void tearDown() throws Exception { public void renameNameWorkspaceTest() throws IOException { dashboard.selectWorkspacesItemOnDashboard(); dashboard.waitToolbarTitleName("Workspaces"); + workspaces.clickOnWorkspaceActionsButton(workspaceName); + workspaces.waitWorkspaceStatusIs(workspaceName, STOPPED); workspaces.selectWorkspaceItemName(workspaceName); workspaceDetails.waitToolbarTitleName(workspaceName); workspaceDetails.selectTabInWorkspaceMenu(OVERVIEW); @@ -102,7 +102,7 @@ private void renameWorkspace(String name) { private void saveAndWaitWorkspaceRestarted() { workspaceDetails.clickOnSaveChangesBtn(); - workspaceDetails.checkStateOfWorkspace(STOPPING); - workspaceDetails.checkStateOfWorkspace(RUNNING, UPDATING_PROJECT_TIMEOUT_SEC); + dashboard.waitNotificationMessage("Workspace updated"); + dashboard.waitNotificationIsClosed(); } } diff --git a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/dashboard/WorkspaceDetailsSingleMachineTest.java b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/dashboard/WorkspaceDetailsSingleMachineTest.java index d81e01d0eb8f..6b5ac27f239c 100644 --- a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/dashboard/WorkspaceDetailsSingleMachineTest.java +++ b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/dashboard/WorkspaceDetailsSingleMachineTest.java @@ -213,6 +213,12 @@ private void clickOnSaveButton() { dashboard.waitNotificationIsClosed(); } + private void clickOnApplyButton() { + workspaceDetails.clickOnApplyChangesBtn(); + dashboard.waitNotificationMessage("Workspace updated"); + dashboard.waitNotificationIsClosed(); + } + private void createServer(String serverName, String serverPort, String serverProtocol) { workspaceServers.clickOnAddServerButton(); workspaceServers.waitAddServerDialogIsOpen(); diff --git a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/debugger/DebuggerWatchExpressionTest.java b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/debugger/DebuggerWatchExpressionTest.java index 3ce4c7da4541..262ad2eef0b6 100644 --- a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/debugger/DebuggerWatchExpressionTest.java +++ b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/debugger/DebuggerWatchExpressionTest.java @@ -93,11 +93,11 @@ public void prepare() throws Exception { cmdPalette.openCommandPalette(); cmdPalette.startCommandByDoubleClick(START_DEBUG); + consoles.waitExpectedTextIntoConsole(TestBuildConstants.LISTENING_AT_ADDRESS_8000); menu.runCommandByXpath( TestMenuCommandsConstants.Run.RUN_MENU, TestMenuCommandsConstants.Run.DEBUG, debugConfig.getXpathToІRunDebugCommand(PROJECT)); - consoles.waitExpectedTextIntoConsole(TestBuildConstants.LISTENING_AT_ADDRESS_8000); } @Test(priority = 1) diff --git a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/editor/autocomplete/AutocompleteWithInheritTest.java b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/editor/autocomplete/AutocompleteWithInheritTest.java index ad7f57bc9de1..43a4e0b1e378 100644 --- a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/editor/autocomplete/AutocompleteWithInheritTest.java +++ b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/editor/autocomplete/AutocompleteWithInheritTest.java @@ -21,11 +21,13 @@ import org.eclipse.che.selenium.core.project.ProjectTemplates; import org.eclipse.che.selenium.core.workspace.TestWorkspace; import org.eclipse.che.selenium.pageobject.CodenvyEditor; +import org.eclipse.che.selenium.pageobject.CodenvyEditor.MarkersType; import org.eclipse.che.selenium.pageobject.Ide; import org.eclipse.che.selenium.pageobject.Loader; import org.eclipse.che.selenium.pageobject.MavenPluginStatusBar; import org.eclipse.che.selenium.pageobject.ProjectExplorer; import org.openqa.selenium.Keys; +import org.openqa.selenium.TimeoutException; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -62,6 +64,7 @@ public void prepare() throws Exception { Paths.get(resource.toURI()), PROJECT_NAME, ProjectTemplates.MAVEN_SPRING); + ide.open(workspace); } @@ -70,7 +73,6 @@ public void updateDependencyWithInheritTest() { projectExplorer.waitProjectExplorer(); projectExplorer.waitItem(PROJECT_NAME); mavenPluginStatusBar.waitClosingInfoPanel(); - projectExplorer.selectItem(PROJECT_NAME); projectExplorer.quickExpandWithJavaScript(); @@ -79,7 +81,7 @@ public void updateDependencyWithInheritTest() { projectExplorer.openItemByVisibleNameInExplorer(EXTENDED_CLASS + ".java"); editor.returnFocusInCurrentLine(); - editor.waitMarkerInPosition(ERROR_MARKER, 13); + waitErrorMarkerInPosition(); editor.setCursorToLine(13); editor.launchPropositionAssistPanel(); editor.waitTextIntoFixErrorProposition("Add constructor 'InheritClass(int,String)'"); @@ -110,4 +112,26 @@ public void updateDependencyWithInheritTest() { editor.selectFirstItemIntoFixErrorPropByDoubleClick(); editor.waitAllMarkersDisappear(ERROR_MARKER); } + + private void waitErrorMarkerInPosition() { + try { + editor.waitMarkerInPosition(MarkersType.ERROR_MARKER, 13); + } catch (TimeoutException ex) { + editor.setCursorToLine(13); + editor.waitCursorPosition(13, 1); + editor.typeTextIntoEditor(Keys.ENTER.toString()); + editor.waitCursorPosition(14, 1); + editor.typeTextIntoEditor(Keys.ENTER.toString()); + editor.waitCursorPosition(15, 1); + editor.typeTextIntoEditor(Keys.ENTER.toString()); + editor.waitCursorPosition(16, 1); + editor.typeTextIntoEditor(Keys.BACK_SPACE.toString()); + editor.waitCursorPosition(15, 1); + editor.typeTextIntoEditor(Keys.BACK_SPACE.toString()); + editor.waitCursorPosition(14, 1); + editor.typeTextIntoEditor(Keys.BACK_SPACE.toString()); + editor.waitCursorPosition(13, 1); + editor.waitMarkerInPosition(MarkersType.ERROR_MARKER, 13); + } + } } diff --git a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/intelligencecommand/CheckIntelligenceCommandFromToolbarTest.java b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/intelligencecommand/CheckIntelligenceCommandFromToolbarTest.java index 89160594aac4..a9197c4b42ed 100644 --- a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/intelligencecommand/CheckIntelligenceCommandFromToolbarTest.java +++ b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/intelligencecommand/CheckIntelligenceCommandFromToolbarTest.java @@ -15,7 +15,7 @@ import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.ELEMENT_TIMEOUT_SEC; import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.LOAD_PAGE_TIMEOUT_SEC; import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated; -import static org.testng.Assert.fail; +import static org.testng.Assert.assertTrue; import com.google.inject.Inject; import org.eclipse.che.commons.lang.NameGenerator; @@ -33,7 +33,6 @@ import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; -import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -104,14 +103,8 @@ private void checkButtonsOnToolbar(String expectedText) { consoles.clickOnPreviewUrl(); waitOnAvailablePreviewPage(currentWindow, "Enter your name:"); - Assert.assertTrue(commandsToolbar.getTimerValue().matches("\\d\\d:\\d\\d")); - - try { - Assert.assertTrue(commandsToolbar.getNumOfProcessCounter().equals("#2")); - } catch (AssertionError ex) { - // Remove try-catch block after issue has been resolved - fail("Known issue https://github.com/eclipse/che/issues/8277"); - } + assertTrue(commandsToolbar.getTimerValue().matches("\\d\\d:\\d\\d")); + assertTrue(commandsToolbar.getNumOfProcessCounter().equals("#3")); checkTestAppByPreviewButtonAndReturnToIde(currentWindow, "Enter your name:"); commandsToolbar.clickExecStopBtn(); diff --git a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/miscellaneous/FileStructureBaseOperationTest.java b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/miscellaneous/FileStructureBaseOperationTest.java index 89acfd6c8237..67a95173a3fd 100644 --- a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/miscellaneous/FileStructureBaseOperationTest.java +++ b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/miscellaneous/FileStructureBaseOperationTest.java @@ -10,13 +10,16 @@ */ package org.eclipse.che.selenium.miscellaneous; +import static org.eclipse.che.commons.lang.NameGenerator.generate; +import static org.eclipse.che.selenium.core.constant.TestMenuCommandsConstants.Assistant.ASSISTANT; +import static org.eclipse.che.selenium.core.constant.TestMenuCommandsConstants.Assistant.FILE_STRUCTURE; +import static org.eclipse.che.selenium.core.project.ProjectTemplates.MAVEN_SPRING; +import static org.testng.Assert.fail; + import com.google.inject.Inject; import java.net.URL; import java.nio.file.Paths; -import org.eclipse.che.commons.lang.NameGenerator; import org.eclipse.che.selenium.core.client.TestProjectServiceClient; -import org.eclipse.che.selenium.core.constant.TestMenuCommandsConstants; -import org.eclipse.che.selenium.core.project.ProjectTemplates; import org.eclipse.che.selenium.core.workspace.TestWorkspace; import org.eclipse.che.selenium.pageobject.CodenvyEditor; import org.eclipse.che.selenium.pageobject.FileStructure; @@ -24,12 +27,13 @@ import org.eclipse.che.selenium.pageobject.Loader; import org.eclipse.che.selenium.pageobject.Menu; import org.eclipse.che.selenium.pageobject.ProjectExplorer; +import org.openqa.selenium.TimeoutException; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; /** @author Aleksandr Shmaraev on 11.12.15 */ public class FileStructureBaseOperationTest { - private static final String PROJECT_NAME = NameGenerator.generate("FileStructureProject", 4); + private static final String PROJECT_NAME = generate("project", 4); private static final String CLASS_MEMBERS_1 = "AppController\n" @@ -69,10 +73,7 @@ public class FileStructureBaseOperationTest { public void setUp() throws Exception { URL resource = getClass().getResource("/projects/guess-project"); testProjectServiceClient.importProject( - workspace.getId(), - Paths.get(resource.toURI()), - PROJECT_NAME, - ProjectTemplates.MAVEN_SPRING); + workspace.getId(), Paths.get(resource.toURI()), PROJECT_NAME, MAVEN_SPRING); ide.open(workspace); } @@ -87,9 +88,7 @@ public void checkFileStructureBaseOperations() { projectExplorer.openItemByPath( PROJECT_NAME + "/src/main/java/org/eclipse/qa/examples/AppController.java"); editor.waitActive(); - menu.runCommand( - TestMenuCommandsConstants.Assistant.ASSISTANT, - TestMenuCommandsConstants.Assistant.FILE_STRUCTURE); + menu.runCommand(ASSISTANT, FILE_STRUCTURE); fileStructure.waitFileStructureFormIsOpen("AppController"); fileStructure.launchFileStructureFormByKeyboard(); fileStructure.closeFileStructureFormByEscape(); @@ -105,15 +104,20 @@ public void checkFileStructureBaseOperations() { fileStructure.waitFileStructureFormIsClosed(); // Show inherited members - menu.runCommand( - TestMenuCommandsConstants.Assistant.ASSISTANT, - TestMenuCommandsConstants.Assistant.FILE_STRUCTURE); + menu.runCommand(ASSISTANT, FILE_STRUCTURE); loader.waitOnClosed(); fileStructure.waitFileStructureFormIsOpen("AppController"); fileStructure.waitExpectedTextInFileStructure(CLASS_MEMBERS_1); fileStructure.waitExpectedTextIsNotPresentInFileStructure(INHERITED_MEMBERS); fileStructure.launchFileStructureFormByKeyboard(); - fileStructure.waitExpectedTextInFileStructure(CLASS_MEMBERS_2); + + try { + fileStructure.waitExpectedTextInFileStructure(CLASS_MEMBERS_2); + } catch (TimeoutException ex) { + // remove try-catch block after issue has been resolved + fail("Known issue https://github.com/eclipse/che/issues/8509"); + } + fileStructure.waitExpectedTextInFileStructure(INHERITED_MEMBERS); fileStructure.launchFileStructureFormByKeyboard(); fileStructure.waitExpectedTextInFileStructure(CLASS_MEMBERS_1); @@ -125,7 +129,7 @@ public void checkFileStructureBaseOperations() { // Check the the 'file structure' is not present in the menu projectExplorer.openItemByPath(PROJECT_NAME + "/src/main/webapp/index.jsp"); editor.waitActive(); - menu.runCommand(TestMenuCommandsConstants.Assistant.ASSISTANT); - menu.waitCommandIsNotPresentInMenu(TestMenuCommandsConstants.Assistant.FILE_STRUCTURE); + menu.runCommand(ASSISTANT); + menu.waitCommandIsNotPresentInMenu(FILE_STRUCTURE); } } diff --git a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/refactor/move/FailMoveItemTest.java b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/refactor/move/FailMoveItemTest.java index 5bd68a00fa27..8686864f1c8a 100644 --- a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/refactor/move/FailMoveItemTest.java +++ b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/refactor/move/FailMoveItemTest.java @@ -27,6 +27,7 @@ import org.eclipse.che.selenium.pageobject.Loader; import org.eclipse.che.selenium.pageobject.ProjectExplorer; import org.eclipse.che.selenium.pageobject.Refactor; +import org.eclipse.che.selenium.pageobject.machineperspective.MachineTerminal; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -42,6 +43,7 @@ public class FailMoveItemTest { @Inject private TestWorkspace workspace; @Inject private Ide ide; @Inject private ProjectExplorer projectExplorer; + @Inject private MachineTerminal terminal; @Inject private Loader loader; @Inject private CodenvyEditor editor; @Inject private Refactor refactor; @@ -56,6 +58,8 @@ public void prepare() throws Exception { PROJECT_NAME, ProjectTemplates.MAVEN_SPRING); ide.open(workspace); + projectExplorer.waitProjectExplorer(); + terminal.waitTerminalTab(); projectExplorer.waitVisibleItem(PROJECT_NAME); projectExplorer.quickExpandWithJavaScript(); loader.waitOnClosed(); diff --git a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/workspaces/CreateWorkspaceOnDashboardTest.java b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/workspaces/CreateWorkspaceOnDashboardTest.java index 279bf87aee9c..9d138f344bf6 100644 --- a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/workspaces/CreateWorkspaceOnDashboardTest.java +++ b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/workspaces/CreateWorkspaceOnDashboardTest.java @@ -10,15 +10,25 @@ */ package org.eclipse.che.selenium.workspaces; +import static org.eclipse.che.commons.lang.NameGenerator.generate; +import static org.eclipse.che.selenium.core.constant.TestMenuCommandsConstants.Workspace.CREATE_PROJECT; +import static org.eclipse.che.selenium.core.constant.TestMenuCommandsConstants.Workspace.STOP_WORKSPACE; +import static org.eclipse.che.selenium.core.constant.TestMenuCommandsConstants.Workspace.WORKSPACE; import static org.eclipse.che.selenium.core.constant.TestStacksConstants.JAVA; -import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.EXPECTED_MESS_IN_CONSOLE_SEC; +import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.PREPARING_WS_TIMEOUT_SEC; +import static org.eclipse.che.selenium.pageobject.ProjectExplorer.FolderTypes.PROJECT_FOLDER; +import static org.eclipse.che.selenium.pageobject.Wizard.SamplesName.WEB_JAVA_SPRING; import com.google.inject.Inject; -import org.eclipse.che.commons.lang.NameGenerator; import org.eclipse.che.selenium.core.SeleniumWebDriver; import org.eclipse.che.selenium.core.client.TestWorkspaceServiceClient; import org.eclipse.che.selenium.core.user.TestUser; +import org.eclipse.che.selenium.pageobject.CodenvyEditor; +import org.eclipse.che.selenium.pageobject.Menu; +import org.eclipse.che.selenium.pageobject.NotificationsPopupPanel; import org.eclipse.che.selenium.pageobject.ProjectExplorer; +import org.eclipse.che.selenium.pageobject.ToastLoader; +import org.eclipse.che.selenium.pageobject.Wizard; import org.eclipse.che.selenium.pageobject.dashboard.Dashboard; import org.eclipse.che.selenium.pageobject.dashboard.NewWorkspace; import org.eclipse.che.selenium.pageobject.dashboard.workspaces.Workspaces; @@ -28,20 +38,29 @@ /** @author Andrey Chizhikov */ public class CreateWorkspaceOnDashboardTest { - private static final String WORKSPACE = NameGenerator.generate("WsDashboard", 4); + private static final String WS_NAME = generate("workspace", 4); + private static final String PROJECT_NAME = "web-java-spring"; + private static final String PATH_JAVA_FILE = + PROJECT_NAME + "/src/main/java/org/eclipse/che/examples/GreetingController.java"; + + @Inject private TestWorkspaceServiceClient workspaceServiceClient; + @Inject private NotificationsPopupPanel notificationsPopupPanel; + @Inject private SeleniumWebDriver seleniumWebDriver; + @Inject private ProjectExplorer projectExplorer; @Inject private NewWorkspace newWorkspace; @Inject private TestUser defaultTestUser; - @Inject private ProjectExplorer projectExplorer; @Inject private MachineTerminal terminal; - @Inject private Dashboard dashboard; - @Inject private SeleniumWebDriver seleniumWebDriver; - @Inject private TestWorkspaceServiceClient workspaceServiceClient; + @Inject private ToastLoader toastLoader; @Inject private Workspaces workspaces; + @Inject private CodenvyEditor editor; + @Inject private Dashboard dashboard; + @Inject private Wizard wizard; + @Inject private Menu menu; @AfterClass public void tearDown() throws Exception { - workspaceServiceClient.delete(WORKSPACE, defaultTestUser.getName()); + workspaceServiceClient.delete(WS_NAME, defaultTestUser.getName()); } @Test @@ -51,17 +70,40 @@ public void createWorkspaceOnDashboardTest() { dashboard.selectWorkspacesItemOnDashboard(); dashboard.waitToolbarTitleName("Workspaces"); + // create and start a new workspace workspaces.clickOnAddWorkspaceBtn(); - newWorkspace.waitToolbar(); - newWorkspace.typeWorkspaceName(WORKSPACE); + newWorkspace.typeWorkspaceName(WS_NAME); + newWorkspace.clickOnAllStacksTab(); newWorkspace.selectStack(JAVA.getId()); - newWorkspace.setMachineRAM("dev-machine", 2.0); newWorkspace.clickOnCreateButtonAndOpenInIDE(); seleniumWebDriver.switchFromDashboardIframeToIde(); - projectExplorer.waitProjectExplorer(); - terminal.waitTerminalTab(EXPECTED_MESS_IN_CONSOLE_SEC); + // wait that the workspace is started + projectExplorer.waitProjectExplorer(PREPARING_WS_TIMEOUT_SEC); // we need long timeout for OSIO + terminal.waitTerminalTab(PREPARING_WS_TIMEOUT_SEC); // we need long timeout for OSIO + + // Import the "web-java-spring" project + menu.runCommand(WORKSPACE, CREATE_PROJECT); + wizard.selectProjectAndCreate(WEB_JAVA_SPRING, PROJECT_NAME); + notificationsPopupPanel.waitProgressPopupPanelClose(); + + // wait that type of the added project folder has PROJECT FOLDER status + projectExplorer.waitItem(PROJECT_NAME); + projectExplorer.waitFolderDefinedTypeOfFolderByPath(PROJECT_NAME, PROJECT_FOLDER); + projectExplorer.selectItem(PROJECT_NAME); + + // open a file in the Editor + projectExplorer.quickExpandWithJavaScript(); + projectExplorer.waitItem(PATH_JAVA_FILE); + projectExplorer.openItemByPath(PATH_JAVA_FILE); + editor.waitActive(); + editor.waitTabIsPresent("GreetingController"); + + // stop the workspace + menu.runCommand(WORKSPACE, STOP_WORKSPACE); + toastLoader.waitExpectedTextInToastLoader("Stopping the workspace"); + toastLoader.waitExpectedTextInToastLoader("Workspace is not running"); } } diff --git a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/workspaces/ProjectStateAfterRenameWorkspaceTest.java b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/workspaces/ProjectStateAfterRenameWorkspaceTest.java index 24a557a0ae16..e35e8082333c 100644 --- a/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/workspaces/ProjectStateAfterRenameWorkspaceTest.java +++ b/selenium/che-selenium-test/src/test/java/org/eclipse/che/selenium/workspaces/ProjectStateAfterRenameWorkspaceTest.java @@ -10,9 +10,6 @@ */ package org.eclipse.che.selenium.workspaces; -import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.UPDATING_PROJECT_TIMEOUT_SEC; -import static org.eclipse.che.selenium.pageobject.dashboard.workspaces.WorkspaceDetails.StateWorkspace.RUNNING; -import static org.eclipse.che.selenium.pageobject.dashboard.workspaces.WorkspaceDetails.StateWorkspace.STOPPING; import static org.testng.Assert.fail; import com.google.inject.Inject; @@ -97,8 +94,8 @@ public void checkProjectAfterRenameWs() throws Exception { workspaces.selectWorkspaceItemName(testWorkspace.getName()); workspaceOverview.enterNameWorkspace(WORKSPACE_NEW_NAME); workspaceDetails.clickOnSaveChangesBtn(); - workspaceDetails.checkStateOfWorkspace(STOPPING); - workspaceDetails.checkStateOfWorkspace(RUNNING, UPDATING_PROJECT_TIMEOUT_SEC); + dashboard.waitNotificationMessage("Workspace updated"); + dashboard.waitNotificationIsClosed(); workspaceOverview.checkNameWorkspace(WORKSPACE_NEW_NAME); // open the IDE, check state of the project diff --git a/selenium/pom.xml b/selenium/pom.xml index 2029e66b7416..39a24b7f2bdc 100644 --- a/selenium/pom.xml +++ b/selenium/pom.xml @@ -16,7 +16,7 @@ che-parent org.eclipse.che - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.che.selenium che-selenium-parent diff --git a/slx_aws/README.md b/slx_aws/README.md new file mode 100644 index 000000000000..5f4e3199fb4a --- /dev/null +++ b/slx_aws/README.md @@ -0,0 +1,24 @@ +#Checkout the slx che repo +git clone https://chakraborty@medusa.silexica.com:8082/bitbucket/scm/cld/slx.cloud-che.git + + +#Install required libs +sudo apt install docker.io +sudo usermod -aG docker ${USER} +sudo reboot + +sudo apt-get update +sudo apt install maven +sudo apt install openjdk-8-jdk-headless +sudo apt install golang + + +cd slx.cloud-che + +# build keycloak image +cd slx-keycloak +docker build -t slx-keycloak . + + +#Build complete slx che6 +mvn clean install -DskipTests=true -Dlicense.skip=true \ No newline at end of file diff --git a/slxkeycloak/Dockerfile b/slxkeycloak/Dockerfile new file mode 100644 index 000000000000..42c7f20b0b5f --- /dev/null +++ b/slxkeycloak/Dockerfile @@ -0,0 +1,12 @@ +#set the base image +FROM jboss/keycloak-openshift:3.4.3.Final +# Dockerfile author / maintainer +MAINTAINER Silexica + +ADD slx $JBOSS_HOME/themes/slx + +USER 1000 + +ENTRYPOINT [ "openshift-entrypoint.sh" ] + +CMD ["start-keycloak.sh", "-b", "0.0.0.0"] \ No newline at end of file diff --git a/slxkeycloak/slx/login/resources/css/login.css b/slxkeycloak/slx/login/resources/css/login.css new file mode 100644 index 000000000000..aa75bff62619 --- /dev/null +++ b/slxkeycloak/slx/login/resources/css/login.css @@ -0,0 +1,369 @@ +.login-pf body { + background: #ffffff url("../img/slx-bg.jpeg") top left no-repeat; + background-size: cover; + color: #000000; +} + +.alert-error { + background-color: #08c5ff; + border-color: #cc0000; + color: #333333; +} + +.control-label { + color: #000000; + /* font-weight: bold; */ +} + +#kc-locale ul { + display: none; + position: absolute; + background-color: #fff; + list-style: none; + right: 20px; + top: 30px; + width: 200px; + padding: 2px; +} + +#kc-locale:hover ul { + display: block; + margin: 0; +} + +#kc-locale ul li a { + display: block; + padding: 1px 11px; + color: #000 !important; + border: 1px solid #fff; + text-decoration: none; + line-height: 20px; +} + +#kc-locale ul li a:hover { + color: #4d5258; + background-color: #d4edfa; + border-color: #b3d3e7; +} + +#kc-locale-dropdown a { + color: #fff; +} + +#kc-locale-dropdown a:hover { + text-decoration: none; +} + +a#kc-current-locale-link { + display: block; + padding: 5px; +} + +a#kc-current-locale-link:hover { + background-color: rgba(0,0,0,0.2); +} + +a#kc-current-locale-link::after { + content: "\2c5"; + margin-left: 4px; +} + +.login-pf .container { + padding-top: 40px; +} + +.login-pf a:hover { + color: #0099d3; +} + +#kc-logo { + width: 100%; +} + +#kc-logo-wrapper { + background-image: url("../img/slx-logo.png"); + background-repeat: no-repeat; + + height: 92px; + width: 350px; +} + +div.kc-logo-text { + background-image: url("../img/slx-logo.png"); + background-repeat: no-repeat; + width: 150px; + height: 38px; +} + +div.kc-logo-text span { + display: none; +} + +#kc-header { + color: #fff; + overflow: visible; + padding-left: 80px; + white-space: nowrap; +} + +#kc-header-wrapper { + font-size: 26px; + text-transform: uppercase; + line-height: 1.2em; + margin-bottom: 15px; +} + +#kc-content { + position: relative; +} + +#kc-content-wrapper { + overflow-y: hidden; +} + +#kc-info { + padding-bottom: 200px; + margin-bottom: -200px; +} + +#kc-info-wrapper { + font-size: 13px; + color: #000000; +} + +#kc-form-options span { + display: block; +} + +#kc-terms-text { + margin-bottom: 20px; +} + +#kc-registration { + margin-bottom: 15px; +} + +/* TOTP */ + +ol#kc-totp-settings { + margin: 0; + padding: 0; +} + +ol#kc-totp-settings li { + margin-top: 1em; +} + +ol#kc-totp-settings li:first-of-type { + margin-top: 0; +} + +#kc-totp-secret-qr-code { + max-width:150px; + max-height:150px; +} + +#kc-totp-secret-key { + background-color: #fff; + color: #333333; + font-size: 16px; + padding: 10px; +} + +/* OAuth */ + +#kc-oauth h3 { + margin-top: 0; +} + +#kc-oauth ul { + list-style: none; + padding: 0; + margin: 0; +} + +#kc-oauth ul li { + border-top: 1px solid rgba(255, 255, 255, 0.1); + font-size: 12px; + padding: 10px 30px; +} + +#kc-oauth ul li:first-of-type { + border-top: 0; +} + +#kc-oauth .kc-role { + display: inline-block; + width: 50%; +} + +/* Code */ +#kc-code textarea { + width: 100%; + height: 8em; +} + +/* Social */ + +#kc-social-providers ul { + padding: 0; + margin: 0; +} + +#kc-social-providers li { + display: block; + margin-top: 5px; +} + +#kc-social-providers li:first-of-type { + margin-top: 0; +} + +.zocial { + width: 150px; +} + +.zocial:hover { + color: #fff !important; +} + +.zocial.facebook, +.zocial.github, +.zocial.google, +.zocial.microsoft, +.zocial.stackoverflow, +.zocial.linkedin, +.zocial.twitter { + background-image: none; + border-radius: 2px; + + font-family: "Open Sans", sans-serif; + font-weight: normal; + + box-shadow: none; + text-shadow: none; +} + +.zocial.google { + background-color: #dd4b39 !important; +} + +.zocial.facebook:hover, +.zocial.github:hover, +.zocial.google:hover, +.zocial.microsoft:hover, +.zocial.stackoverflow:hover, +.zocial.linkedin:hover, +.zocial.twitter:hover { + background-image: linear-gradient(rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%) !important; +} + +/* Copy of zocial windows classes to be used for microsoft's social provider button */ +.zocial.microsoft {background-color: #0052a4; color: #fff;} +.zocial.microsoft:before { content: "\f15d"; } + +@media (min-width: 768px) { + #kc-container-wrapper { + position: absolute; + width: 100%; + } + + #kc-logo-wrapper { + position: absolute; + top: 50px; + right: 50px; + } + + .login-pf .container { + padding-right: 80px; + } + + #kc-locale { + position: relative; + width: 200px; + left: -230px; + text-align: right; + z-index: 9999; + } +} + +@media (max-width: 767px) { + + #kc-logo-wrapper { + background-position: center; + width: 100%; + margin: 20px 0; + } + + #kc-header { + padding-left: 15px; + padding-right: 15px; + float: none; + text-align: center; + } + + #kc-form { + float: none; + } + + #kc-info-wrapper { + border-top: 1px solid rgba(255, 255, 255, 0.1); + margin-top: 15px; + padding-top: 15px; + padding-left: 0px; + padding-right: 15px; + } + + #kc-social-providers li { + display: inline-block; + margin-right: 5px; + } + + .login-pf .container { + padding-top: 15px; + padding-bottom: 15px; + } + + #kc-locale { + position: absolute; + width: 200px; + top: 10px; + right: 0px; + text-align: right; + z-index: 9999; + } +} + +@media (min-height: 646px) { + #kc-container-wrapper { + bottom: 12%; + } +} + +@media (max-height: 645px) { + #kc-container-wrapper { + padding-top: 50px; + top: 20%; + } +} + +.form-transparent{ + padding: 20px; + background-color: rgba(255, 255, 255, 0.7) +} + +.form-horizontal .radio, .form-horizontal .checkbox { + color: #000000; +} + +a{ + color: #002ab3; +} + +#kc-registration{ + color: #000000; +} + +#kc-form-options{ + text-align: right; +} \ No newline at end of file diff --git a/slxkeycloak/slx/login/resources/img/favicon.ico b/slxkeycloak/slx/login/resources/img/favicon.ico new file mode 100644 index 000000000000..48188dedaaed Binary files /dev/null and b/slxkeycloak/slx/login/resources/img/favicon.ico differ diff --git a/slxkeycloak/slx/login/resources/img/feedback-error-arrow-down.png b/slxkeycloak/slx/login/resources/img/feedback-error-arrow-down.png new file mode 100644 index 000000000000..6f2d9d2aeb1c Binary files /dev/null and b/slxkeycloak/slx/login/resources/img/feedback-error-arrow-down.png differ diff --git a/slxkeycloak/slx/login/resources/img/feedback-error-sign.png b/slxkeycloak/slx/login/resources/img/feedback-error-sign.png new file mode 100644 index 000000000000..0dd500445d72 Binary files /dev/null and b/slxkeycloak/slx/login/resources/img/feedback-error-sign.png differ diff --git a/slxkeycloak/slx/login/resources/img/feedback-success-arrow-down.png b/slxkeycloak/slx/login/resources/img/feedback-success-arrow-down.png new file mode 100644 index 000000000000..03cc0c45dcc7 Binary files /dev/null and b/slxkeycloak/slx/login/resources/img/feedback-success-arrow-down.png differ diff --git a/slxkeycloak/slx/login/resources/img/feedback-success-sign.png b/slxkeycloak/slx/login/resources/img/feedback-success-sign.png new file mode 100644 index 000000000000..640bd71cab7b Binary files /dev/null and b/slxkeycloak/slx/login/resources/img/feedback-success-sign.png differ diff --git a/slxkeycloak/slx/login/resources/img/feedback-warning-arrow-down.png b/slxkeycloak/slx/login/resources/img/feedback-warning-arrow-down.png new file mode 100644 index 000000000000..6f2d9d2aeb1c Binary files /dev/null and b/slxkeycloak/slx/login/resources/img/feedback-warning-arrow-down.png differ diff --git a/slxkeycloak/slx/login/resources/img/feedback-warning-sign.png b/slxkeycloak/slx/login/resources/img/feedback-warning-sign.png new file mode 100644 index 000000000000..f9392a356fd3 Binary files /dev/null and b/slxkeycloak/slx/login/resources/img/feedback-warning-sign.png differ diff --git a/slxkeycloak/slx/login/resources/img/silexica.png b/slxkeycloak/slx/login/resources/img/silexica.png new file mode 100644 index 000000000000..82c2c3dfb06b Binary files /dev/null and b/slxkeycloak/slx/login/resources/img/silexica.png differ diff --git a/slxkeycloak/slx/login/resources/img/slx-bg.jpeg b/slxkeycloak/slx/login/resources/img/slx-bg.jpeg new file mode 100644 index 000000000000..f2bdc2f5ddae Binary files /dev/null and b/slxkeycloak/slx/login/resources/img/slx-bg.jpeg differ diff --git a/slxkeycloak/slx/login/resources/img/slx-bg.jpg b/slxkeycloak/slx/login/resources/img/slx-bg.jpg new file mode 100644 index 000000000000..2d403023c37b Binary files /dev/null and b/slxkeycloak/slx/login/resources/img/slx-bg.jpg differ diff --git a/slxkeycloak/slx/login/resources/img/slx-logo.png b/slxkeycloak/slx/login/resources/img/slx-logo.png new file mode 100644 index 000000000000..02b0ac1009dd Binary files /dev/null and b/slxkeycloak/slx/login/resources/img/slx-logo.png differ diff --git a/slxkeycloak/slx/login/theme.properties b/slxkeycloak/slx/login/theme.properties new file mode 100644 index 000000000000..cb190a3552b3 --- /dev/null +++ b/slxkeycloak/slx/login/theme.properties @@ -0,0 +1,47 @@ +parent=base +import=common/keycloak + +styles=lib/patternfly/css/patternfly.css lib/zocial/zocial.css css/login.css +meta=viewport==width=device-width,initial-scale=1 + +kcHtmlClass=login-pf + +kcLogoLink=http://www.silexica.com + +kcContentClass=col-sm-12 col-md-12 col-lg-12 container +kcContentWrapperClass=form-transparent + +kcHeaderClass=col-xs-12 col-sm-8 col-md-8 col-lg-7 +kcFeedbackAreaClass=col-md-12 +kcLocaleClass=col-xs-12 col-sm-1 +kcAlertIconClasserror=pficon pficon-error-circle-o + +kcFormAreaClass=col-xs-12 col-sm-8 col-md-8 col-lg-7 login + +kcFeedbackErrorIcon=pficon pficon-error-circle-o +kcFeedbackWarningIcon=pficon pficon-warning-triangle-o +kcFeedbackSuccessIcon=pficon pficon-ok +kcFeedbackInfoIcon=pficon pficon-info + + +kcFormClass=form-horizontal +kcFormGroupClass=form-group +kcFormGroupErrorClass=has-error +kcLabelClass=pull-right font-weight-bold control-label +kcLabelWrapperClass=col-xs-12 col-sm-12 col-md-4 col-lg-6 +kcInputClass=form-control +kcInputWrapperClass=col-xs-12 col-sm-12 col-md-8 col-lg-6 +kcFormOptionsClass=right col-xs-4 col-sm-5 col-md-offset-4 col-md-4 col-lg-offset-0 col-lg-6 +kcFormButtonsClass=col-xs-8 col-sm-7 col-md-4 col-lg-6 submit +kcTextareaClass=form-control + +kcInfoAreaClass=col-xs-12 col-sm-4 col-md-4 col-lg-5 details + +##### css classes for form buttons +# main class used for all buttons +kcButtonClass=btn +# classes defining priority of the button - primary or default (there is typically only one priority button for the form) +kcButtonPrimaryClass=btn-primary +kcButtonDefaultClass=btn-default +# classes defining size of the button +kcButtonLargeClass=btn-lg diff --git a/stop.sh b/stop.sh index cf6ff3219e80..45c551b97b35 100755 --- a/stop.sh +++ b/stop.sh @@ -23,11 +23,11 @@ fi case $1 in --che6 ) CLI_IMAGE=eclipse/che-cli:nightly DATA_MOUNT=$HOME/.che6/sample/data - ASSEMBLY_MOUNT=$PWD/assembly-che/assembly-main/target/eclipse-che-6.0.0-M5-SNAPSHOT/eclipse-che-6.0.0-M5-SNAPSHOT + ASSEMBLY_MOUNT=$PWD/assembly-che/assembly-main/target/eclipse-che-6.1.0-SNAPSHOT/eclipse-che-6.1.0-SNAPSHOT ;; --che6mu ) CLI_IMAGE=eclipse/che-cli:nightly DATA_MOUNT=$HOME/.che6mu/sample/data - ASSEMBLY_MOUNT=$PWD/assembly/assembly-main/target/eclipse-che-6.0.0-M5-SNAPSHOT/eclipse-che-6.0.0-M5-SNAPSHOT + ASSEMBLY_MOUNT=$PWD/assembly/assembly-main/target/eclipse-che-6.1.0-SNAPSHOT/eclipse-che-6.1.0-SNAPSHOT DOCKER_RUN_OPTIONS="-e CHE_MULTIUSER=true" ;; --codenvy ) CLI_IMAGE=codenvy/cli:nightly diff --git a/wsagent/agent/pom.xml b/wsagent/agent/pom.xml index e12c992cbfbe..f634b31cba76 100644 --- a/wsagent/agent/pom.xml +++ b/wsagent/agent/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT wsagent Workspace Agent diff --git a/wsagent/che-core-api-debug-shared/pom.xml b/wsagent/che-core-api-debug-shared/pom.xml index 2cdf93c3de2b..98d00190179f 100644 --- a/wsagent/che-core-api-debug-shared/pom.xml +++ b/wsagent/che-core-api-debug-shared/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-debug-shared jar diff --git a/wsagent/che-core-api-debug/pom.xml b/wsagent/che-core-api-debug/pom.xml index 9bd9ccc12533..6f7eaff5639c 100644 --- a/wsagent/che-core-api-debug/pom.xml +++ b/wsagent/che-core-api-debug/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-debug Che Core :: API :: Debug diff --git a/wsagent/che-core-api-git-shared/pom.xml b/wsagent/che-core-api-git-shared/pom.xml index dfdb41fdfbed..9e79e5ea7553 100644 --- a/wsagent/che-core-api-git-shared/pom.xml +++ b/wsagent/che-core-api-git-shared/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-git-shared jar diff --git a/wsagent/che-core-api-git/pom.xml b/wsagent/che-core-api-git/pom.xml index 6538d482818e..b0b5115f9e51 100644 --- a/wsagent/che-core-api-git/pom.xml +++ b/wsagent/che-core-api-git/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-git jar diff --git a/wsagent/che-core-api-languageserver-maven-plugin/pom.xml b/wsagent/che-core-api-languageserver-maven-plugin/pom.xml index 1b1b171d976a..8b6f9d5de65b 100644 --- a/wsagent/che-core-api-languageserver-maven-plugin/pom.xml +++ b/wsagent/che-core-api-languageserver-maven-plugin/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-languageserver-maven-plugin maven-plugin diff --git a/wsagent/che-core-api-languageserver-shared/pom.xml b/wsagent/che-core-api-languageserver-shared/pom.xml index ba0ad93393f7..73d5fa8740e2 100644 --- a/wsagent/che-core-api-languageserver-shared/pom.xml +++ b/wsagent/che-core-api-languageserver-shared/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-languageserver-shared jar diff --git a/wsagent/che-core-api-languageserver/pom.xml b/wsagent/che-core-api-languageserver/pom.xml index 469031b66b22..239a42874514 100644 --- a/wsagent/che-core-api-languageserver/pom.xml +++ b/wsagent/che-core-api-languageserver/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-languageserver jar diff --git a/wsagent/che-core-api-oauth/pom.xml b/wsagent/che-core-api-oauth/pom.xml index 9bf56829b14e..f9d027055264 100644 --- a/wsagent/che-core-api-oauth/pom.xml +++ b/wsagent/che-core-api-oauth/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-oauth jar diff --git a/wsagent/che-core-api-project-shared/pom.xml b/wsagent/che-core-api-project-shared/pom.xml index e22b8025c3ea..a2594c1daf24 100644 --- a/wsagent/che-core-api-project-shared/pom.xml +++ b/wsagent/che-core-api-project-shared/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-project-shared jar diff --git a/wsagent/che-core-api-project/pom.xml b/wsagent/che-core-api-project/pom.xml index 6d4d3f82b601..480cec50bd30 100644 --- a/wsagent/che-core-api-project/pom.xml +++ b/wsagent/che-core-api-project/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-project jar @@ -101,7 +101,7 @@ org.eclipse.che.core che-core-api-project-shared - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.che.core diff --git a/wsagent/che-core-api-testing-shared/pom.xml b/wsagent/che-core-api-testing-shared/pom.xml index cc35eb3a3346..a2fa66b1cdc4 100644 --- a/wsagent/che-core-api-testing-shared/pom.xml +++ b/wsagent/che-core-api-testing-shared/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-testing-shared Che Core :: API :: Testing Shared diff --git a/wsagent/che-core-api-testing/pom.xml b/wsagent/che-core-api-testing/pom.xml index 53666986001e..da859eddaae6 100644 --- a/wsagent/che-core-api-testing/pom.xml +++ b/wsagent/che-core-api-testing/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-testing Che Core :: API :: Testing diff --git a/wsagent/che-core-git-impl-jgit/pom.xml b/wsagent/che-core-git-impl-jgit/pom.xml index c63246a1a2b4..81af3b13203d 100644 --- a/wsagent/che-core-git-impl-jgit/pom.xml +++ b/wsagent/che-core-git-impl-jgit/pom.xml @@ -17,7 +17,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-git-impl-jgit jar diff --git a/wsagent/che-core-ssh-key-ide/pom.xml b/wsagent/che-core-ssh-key-ide/pom.xml index 691935114b99..a37e7ff81a10 100644 --- a/wsagent/che-core-ssh-key-ide/pom.xml +++ b/wsagent/che-core-ssh-key-ide/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.che.plugin che-plugin-ssh-key-ide diff --git a/wsagent/che-core-ssh-key-server/pom.xml b/wsagent/che-core-ssh-key-server/pom.xml index ecf55d186b5c..e5504f9ef239 100644 --- a/wsagent/che-core-ssh-key-server/pom.xml +++ b/wsagent/che-core-ssh-key-server/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT org.eclipse.che.plugin che-plugin-ssh-key-server diff --git a/wsagent/che-wsagent-core/pom.xml b/wsagent/che-wsagent-core/pom.xml index d6fd3eeb21a9..95c05a68a075 100644 --- a/wsagent/che-wsagent-core/pom.xml +++ b/wsagent/che-wsagent-core/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-wsagent-core war diff --git a/wsagent/pom.xml b/wsagent/pom.xml index e1b09f826771..28dc5d303425 100644 --- a/wsagent/pom.xml +++ b/wsagent/pom.xml @@ -16,12 +16,12 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../core/pom.xml org.eclipse.che.core che-agent-parent - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT pom Che Agent Parent diff --git a/wsagent/wsagent-local/pom.xml b/wsagent/wsagent-local/pom.xml index 521741e44ddf..23461d104cf6 100644 --- a/wsagent/wsagent-local/pom.xml +++ b/wsagent/wsagent-local/pom.xml @@ -16,7 +16,7 @@ che-agent-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT wsagent-local Che Core :: API :: Agent diff --git a/wsmaster/che-core-api-account/pom.xml b/wsmaster/che-core-api-account/pom.xml index 37f901cb008f..7e96481714c3 100644 --- a/wsmaster/che-core-api-account/pom.xml +++ b/wsmaster/che-core-api-account/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-account Che Core :: API :: Account diff --git a/wsmaster/che-core-api-auth-shared/pom.xml b/wsmaster/che-core-api-auth-shared/pom.xml index 59164f1896cf..e5e355eb0091 100644 --- a/wsmaster/che-core-api-auth-shared/pom.xml +++ b/wsmaster/che-core-api-auth-shared/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-auth-shared jar diff --git a/wsmaster/che-core-api-auth/pom.xml b/wsmaster/che-core-api-auth/pom.xml index e4e3de96feed..edffdc022114 100644 --- a/wsmaster/che-core-api-auth/pom.xml +++ b/wsmaster/che-core-api-auth/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-auth jar diff --git a/wsmaster/che-core-api-factory-shared/pom.xml b/wsmaster/che-core-api-factory-shared/pom.xml index 6e28e9e3043d..dd2334a27f47 100644 --- a/wsmaster/che-core-api-factory-shared/pom.xml +++ b/wsmaster/che-core-api-factory-shared/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-factory-shared jar diff --git a/wsmaster/che-core-api-factory/pom.xml b/wsmaster/che-core-api-factory/pom.xml index 2566f236107d..d9a497120bdc 100644 --- a/wsmaster/che-core-api-factory/pom.xml +++ b/wsmaster/che-core-api-factory/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-factory jar diff --git a/wsmaster/che-core-api-installer-shared/pom.xml b/wsmaster/che-core-api-installer-shared/pom.xml index 860e2aaf234d..3ba9677b4f4e 100644 --- a/wsmaster/che-core-api-installer-shared/pom.xml +++ b/wsmaster/che-core-api-installer-shared/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-installer-shared jar diff --git a/wsmaster/che-core-api-installer/pom.xml b/wsmaster/che-core-api-installer/pom.xml index 9f41bde6f17d..7d341cbe7d21 100644 --- a/wsmaster/che-core-api-installer/pom.xml +++ b/wsmaster/che-core-api-installer/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-installer jar diff --git a/wsmaster/che-core-api-installer/src/main/java/org/eclipse/che/api/installer/server/impl/LocalInstallerRegistry.java b/wsmaster/che-core-api-installer/src/main/java/org/eclipse/che/api/installer/server/impl/LocalInstallerRegistry.java index f270c918e250..d7d6d551a746 100644 --- a/wsmaster/che-core-api-installer/src/main/java/org/eclipse/che/api/installer/server/impl/LocalInstallerRegistry.java +++ b/wsmaster/che-core-api-installer/src/main/java/org/eclipse/che/api/installer/server/impl/LocalInstallerRegistry.java @@ -24,7 +24,6 @@ import org.apache.maven.artifact.versioning.ComparableVersion; import org.eclipse.che.api.core.Page; import org.eclipse.che.api.installer.server.InstallerRegistry; -import org.eclipse.che.api.installer.server.exception.InstallerAlreadyExistsException; import org.eclipse.che.api.installer.server.exception.InstallerException; import org.eclipse.che.api.installer.server.exception.InstallerNotFoundException; import org.eclipse.che.api.installer.server.model.impl.InstallerImpl; @@ -60,14 +59,23 @@ public LocalInstallerRegistry( } private void doInit(InstallerDao installerDao, Installer i) throws InstallerException { - String installerKey = InstallerFqn.of(i).toKey(); - installerValidator.validate(i); + InstallerImpl installer = new InstallerImpl(i); + InstallerFqn installerFqn = InstallerFqn.of(i); + String installerKey = installerFqn.toKey(); + installerValidator.validate(i); try { - installerDao.create(new InstallerImpl(i)); + InstallerImpl existing = installerDao.getByFqn(installerFqn); + if (existing.equals(installer)) { + LOG.info( + format("Latest version of installer '%s' is already in the registry.", installerKey)); + } else { + installerDao.update(installer); + LOG.info(format("Installer '%s' updated in the registry.", installerKey)); + } + } catch (InstallerNotFoundException e) { + installerDao.create(installer); LOG.info(format("Installer '%s' added to the registry.", installerKey)); - } catch (InstallerAlreadyExistsException e) { - LOG.info(format("Installer '%s' already exists in the registry.", installerKey)); } } diff --git a/wsmaster/che-core-api-project-templates-shared/pom.xml b/wsmaster/che-core-api-project-templates-shared/pom.xml index 2a43ca1595b0..4e3af9a67e61 100644 --- a/wsmaster/che-core-api-project-templates-shared/pom.xml +++ b/wsmaster/che-core-api-project-templates-shared/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-project-templates-shared Che Core :: API :: Project Templates :: Shared diff --git a/wsmaster/che-core-api-project-templates/pom.xml b/wsmaster/che-core-api-project-templates/pom.xml index 4dc0da30997d..342ccc0fb4d2 100644 --- a/wsmaster/che-core-api-project-templates/pom.xml +++ b/wsmaster/che-core-api-project-templates/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-project-templates Che Core :: API :: Project Templates diff --git a/wsmaster/che-core-api-ssh-shared/pom.xml b/wsmaster/che-core-api-ssh-shared/pom.xml index aa6be63bd029..15dc650e5885 100644 --- a/wsmaster/che-core-api-ssh-shared/pom.xml +++ b/wsmaster/che-core-api-ssh-shared/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-ssh-shared jar diff --git a/wsmaster/che-core-api-ssh/pom.xml b/wsmaster/che-core-api-ssh/pom.xml index e55c3481a7c4..f8e2588f52df 100644 --- a/wsmaster/che-core-api-ssh/pom.xml +++ b/wsmaster/che-core-api-ssh/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-ssh jar diff --git a/wsmaster/che-core-api-system-shared/pom.xml b/wsmaster/che-core-api-system-shared/pom.xml index ec3ba06b7f86..babc0b999f04 100644 --- a/wsmaster/che-core-api-system-shared/pom.xml +++ b/wsmaster/che-core-api-system-shared/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-system-shared jar diff --git a/wsmaster/che-core-api-system/pom.xml b/wsmaster/che-core-api-system/pom.xml index f085c960be52..345bd05f33e3 100644 --- a/wsmaster/che-core-api-system/pom.xml +++ b/wsmaster/che-core-api-system/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-system jar diff --git a/wsmaster/che-core-api-user-shared/pom.xml b/wsmaster/che-core-api-user-shared/pom.xml index 508bcb1a882d..9d0d0f059a44 100644 --- a/wsmaster/che-core-api-user-shared/pom.xml +++ b/wsmaster/che-core-api-user-shared/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-user-shared Che Core :: API :: User :: Shared diff --git a/wsmaster/che-core-api-user/pom.xml b/wsmaster/che-core-api-user/pom.xml index b9751514af6b..55cf4d248921 100644 --- a/wsmaster/che-core-api-user/pom.xml +++ b/wsmaster/che-core-api-user/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-user Che Core :: API :: User diff --git a/wsmaster/che-core-api-workspace-shared/pom.xml b/wsmaster/che-core-api-workspace-shared/pom.xml index 2295ec36818b..a0396c0abc38 100644 --- a/wsmaster/che-core-api-workspace-shared/pom.xml +++ b/wsmaster/che-core-api-workspace-shared/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-workspace-shared jar diff --git a/wsmaster/che-core-api-workspace/pom.xml b/wsmaster/che-core-api-workspace/pom.xml index b3bce32e11d6..f92f360474fa 100644 --- a/wsmaster/che-core-api-workspace/pom.xml +++ b/wsmaster/che-core-api-workspace/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-api-workspace jar diff --git a/wsmaster/che-core-api-workspace/src/main/java/org/eclipse/che/api/workspace/server/URLRewriter.java b/wsmaster/che-core-api-workspace/src/main/java/org/eclipse/che/api/workspace/server/URLRewriter.java index 2505171a61e8..bb1c41e44ccd 100644 --- a/wsmaster/che-core-api-workspace/src/main/java/org/eclipse/che/api/workspace/server/URLRewriter.java +++ b/wsmaster/che-core-api-workspace/src/main/java/org/eclipse/che/api/workspace/server/URLRewriter.java @@ -21,23 +21,34 @@ * @author gazarenkov */ public interface URLRewriter { + /** * Rewrites URL according to URL rewriting strategy rules. May depend on * RuntimeIdentityImpl(workspace, owner,..) and name (some id) of this particular URL * * @param identity RuntimeIdentityImpl - * @param name symbolic name of the server + * @param machineName symbolic name of the machine + * @param serverName symbolic name of the server * @param url URL to rewrite * @return rewritten URL (may be unchanged) * @throws InfrastructureException if URL rewriting failed */ - String rewriteURL(@Nullable RuntimeIdentity identity, @Nullable String name, String url) + String rewriteURL( + @Nullable RuntimeIdentity identity, + @Nullable String machineName, + @Nullable String serverName, + String url) throws InfrastructureException; /** No rewriting, just pass URL back */ class NoOpURLRewriter implements URLRewriter { + @Override - public String rewriteURL(@Nullable RuntimeIdentity identity, @Nullable String name, String url) + public String rewriteURL( + @Nullable RuntimeIdentity identity, + @Nullable String machineName, + @Nullable String serverName, + String url) throws InfrastructureException { return url; diff --git a/wsmaster/che-core-api-workspace/src/main/java/org/eclipse/che/api/workspace/server/spi/InternalRuntime.java b/wsmaster/che-core-api-workspace/src/main/java/org/eclipse/che/api/workspace/server/spi/InternalRuntime.java index dc2ece1641a6..e6fc8dbddee8 100644 --- a/wsmaster/che-core-api-workspace/src/main/java/org/eclipse/che/api/workspace/server/spi/InternalRuntime.java +++ b/wsmaster/che-core-api-workspace/src/main/java/org/eclipse/che/api/workspace/server/spi/InternalRuntime.java @@ -79,7 +79,7 @@ public List getWarnings() { e -> new MachineImpl( e.getValue().getAttributes(), - rewriteExternalServers(e.getValue().getServers()), + rewriteExternalServers(e.getKey(), e.getValue().getServers()), e.getValue().getStatus()))); } @@ -178,7 +178,8 @@ public final T getContext() { * @param incoming servers * @return rewritten Map of Servers (name -> Server) */ - private Map rewriteExternalServers(Map incoming) { + private Map rewriteExternalServers( + String machineName, Map incoming) { Map outgoing = new HashMap<>(); RuntimeIdentity identity = context.getIdentity(); for (Map.Entry entry : incoming.entrySet()) { @@ -190,7 +191,8 @@ private Map rewriteExternalServers(Map try { ServerImpl server = new ServerImpl(incomingServer) - .withUrl(urlRewriter.rewriteURL(identity, name, incomingServer.getUrl())); + .withUrl( + urlRewriter.rewriteURL(identity, machineName, name, incomingServer.getUrl())); outgoing.put(name, server); } catch (InfrastructureException e) { warnings.add(new WarningImpl(101, "Malformed URL for " + name + " : " + e.getMessage())); diff --git a/wsmaster/che-core-api-workspace/src/test/java/org/eclipse/che/api/workspace/server/spi/InternalRuntimeTest.java b/wsmaster/che-core-api-workspace/src/test/java/org/eclipse/che/api/workspace/server/spi/InternalRuntimeTest.java index 96fafd39788a..3c6f1536f82a 100644 --- a/wsmaster/che-core-api-workspace/src/test/java/org/eclipse/che/api/workspace/server/spi/InternalRuntimeTest.java +++ b/wsmaster/che-core-api-workspace/src/test/java/org/eclipse/che/api/workspace/server/spi/InternalRuntimeTest.java @@ -490,7 +490,7 @@ public void shouldAddAWarningInsteadOfAServerIfURLRewritingFailed() throws Excep doReturn(internalMachines).when(internalRuntime).getInternalMachines(); doThrow(new InfrastructureException(badServerRewritingExcMessage)) .when(urlRewriter) - .rewriteURL(any(RuntimeIdentity.class), anyString(), eq(badServerURL)); + .rewriteURL(any(RuntimeIdentity.class), any(), anyString(), eq(badServerURL)); // when Map actualMachines = internalRuntime.getMachines(); @@ -545,7 +545,7 @@ private static ServerImpl rewriteURL(ServerImpl server) throws InfrastructureExc return new ServerImpl() .withStatus(server.getStatus()) .withAttributes(server.getAttributes()) - .withUrl(TEST_URL_REWRITER.rewriteURL(null, null, server.getUrl())); + .withUrl(TEST_URL_REWRITER.rewriteURL(null, null, null, server.getUrl())); } /** @@ -617,8 +617,10 @@ private ExecutorService createExecutor() { } private static class TestURLRewriter implements URLRewriter { + @Override - public String rewriteURL(RuntimeIdentity identity, String name, String url) + public String rewriteURL( + RuntimeIdentity identity, String machineName, String serverName, String url) throws InfrastructureException { return url + "#something"; } diff --git a/wsmaster/che-core-sql-schema/pom.xml b/wsmaster/che-core-sql-schema/pom.xml index d73bd4bda9c9..4d6d21444c3c 100644 --- a/wsmaster/che-core-sql-schema/pom.xml +++ b/wsmaster/che-core-sql-schema/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT che-core-sql-schema Che Core :: SQL :: Schema diff --git a/wsmaster/integration-tests/cascade-removal/pom.xml b/wsmaster/integration-tests/cascade-removal/pom.xml index 592f38309619..4902bb55c31d 100644 --- a/wsmaster/integration-tests/cascade-removal/pom.xml +++ b/wsmaster/integration-tests/cascade-removal/pom.xml @@ -16,7 +16,7 @@ integration-tests-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT cascade-removal Integration Tests :: Cascade Removal diff --git a/wsmaster/integration-tests/pom.xml b/wsmaster/integration-tests/pom.xml index 551ea7a0e51c..3f1e174e2ddb 100644 --- a/wsmaster/integration-tests/pom.xml +++ b/wsmaster/integration-tests/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../pom.xml integration-tests-parent diff --git a/wsmaster/integration-tests/postgresql-tck/pom.xml b/wsmaster/integration-tests/postgresql-tck/pom.xml index 7a274fe8a68b..e01709220da0 100644 --- a/wsmaster/integration-tests/postgresql-tck/pom.xml +++ b/wsmaster/integration-tests/postgresql-tck/pom.xml @@ -16,7 +16,7 @@ integration-tests-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT postgresql-tck jar diff --git a/wsmaster/pom.xml b/wsmaster/pom.xml index e0b7f2c950ca..1f89f43dee6f 100644 --- a/wsmaster/pom.xml +++ b/wsmaster/pom.xml @@ -16,11 +16,11 @@ che-core-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT ../core/pom.xml che-master-parent - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT pom Che Master Parent diff --git a/wsmaster/wsmaster-local/pom.xml b/wsmaster/wsmaster-local/pom.xml index 31442842743c..060a4ffcbc7e 100644 --- a/wsmaster/wsmaster-local/pom.xml +++ b/wsmaster/wsmaster-local/pom.xml @@ -16,7 +16,7 @@ che-master-parent org.eclipse.che.core - 6.0.0-M5-SNAPSHOT + 6.1.0-SNAPSHOT wsmaster-local Che Core :: API :: Impl Local