[DATALAB-2232] -- fixed GPU for Jupyter
diff --git a/services/datalab-model/src/main/java/com/epam/datalab/dto/aws/exploratory/ExploratoryCreateAws.java b/services/datalab-model/src/main/java/com/epam/datalab/dto/aws/exploratory/ExploratoryCreateAws.java
index c3fe399..95fe658 100644
--- a/services/datalab-model/src/main/java/com/epam/datalab/dto/aws/exploratory/ExploratoryCreateAws.java
+++ b/services/datalab-model/src/main/java/com/epam/datalab/dto/aws/exploratory/ExploratoryCreateAws.java
@@ -22,19 +22,15 @@
 import com.epam.datalab.dto.exploratory.ExploratoryCreateDTO;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.base.MoreObjects;
+import lombok.Getter;
+import lombok.Setter;
 
+@Setter
+@Getter
 public class ExploratoryCreateAws extends ExploratoryCreateDTO<ExploratoryCreateAws> {
     @JsonProperty("aws_notebook_instance_type")
     private String notebookInstanceType;
 
-    public String getNotebookInstanceType() {
-        return notebookInstanceType;
-    }
-
-    public void setNotebookInstanceType(String notebookInstanceType) {
-        this.notebookInstanceType = notebookInstanceType;
-    }
-
     public ExploratoryCreateAws withNotebookInstanceType(String notebookInstanceType) {
         setNotebookInstanceType(notebookInstanceType);
         return this;
diff --git a/services/datalab-model/src/main/java/com/epam/datalab/dto/azure/exploratory/ExploratoryCreateAzure.java b/services/datalab-model/src/main/java/com/epam/datalab/dto/azure/exploratory/ExploratoryCreateAzure.java
index 8a08dc0..612dbfe 100644
--- a/services/datalab-model/src/main/java/com/epam/datalab/dto/azure/exploratory/ExploratoryCreateAzure.java
+++ b/services/datalab-model/src/main/java/com/epam/datalab/dto/azure/exploratory/ExploratoryCreateAzure.java
@@ -22,7 +22,11 @@
 import com.epam.datalab.dto.exploratory.ExploratoryCreateDTO;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.base.MoreObjects;
+import lombok.Getter;
+import lombok.Setter;
 
+@Setter
+@Getter
 public class ExploratoryCreateAzure extends ExploratoryCreateDTO<ExploratoryCreateAzure> {
     @JsonProperty("azure_notebook_instance_size")
     private String notebookInstanceType;
@@ -31,29 +35,6 @@
     @JsonProperty("azure_user_refresh_token")
     private String azureUserRefreshToken;
 
-    public String getNotebookInstanceType() {
-        return notebookInstanceType;
-    }
-
-    public void setNotebookInstanceType(String notebookInstanceType) {
-        this.notebookInstanceType = notebookInstanceType;
-    }
-
-    public String getAzureDataLakeEnabled() {
-        return azureDataLakeEnabled;
-    }
-
-    public void setAzureDataLakeEnabled(String azureDataLakeEnabled) {
-        this.azureDataLakeEnabled = azureDataLakeEnabled;
-    }
-
-    public String getAzureUserRefreshToken() {
-        return azureUserRefreshToken;
-    }
-
-    public void setAzureUserRefreshToken(String azureUserRefreshToken) {
-        this.azureUserRefreshToken = azureUserRefreshToken;
-    }
 
     public ExploratoryCreateAzure withNotebookInstanceSize(String notebookInstanceType) {
         setNotebookInstanceType(notebookInstanceType);
diff --git a/services/datalab-model/src/main/java/com/epam/datalab/dto/exploratory/ExploratoryBaseDTO.java b/services/datalab-model/src/main/java/com/epam/datalab/dto/exploratory/ExploratoryBaseDTO.java
index 8462e48..20e50b5 100644
--- a/services/datalab-model/src/main/java/com/epam/datalab/dto/exploratory/ExploratoryBaseDTO.java
+++ b/services/datalab-model/src/main/java/com/epam/datalab/dto/exploratory/ExploratoryBaseDTO.java
@@ -22,10 +22,12 @@
 import com.epam.datalab.dto.ResourceEnvBaseDTO;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.base.MoreObjects.ToStringHelper;
+import lombok.Getter;
+import lombok.Setter;
 
+@Getter
+@Setter
 public class ExploratoryBaseDTO<T extends ExploratoryBaseDTO<?>> extends ResourceEnvBaseDTO<T> {
-    @SuppressWarnings("unchecked")
-    private final T self = (T) this;
     @JsonProperty("notebook_image")
     private String notebookImage;
     @JsonProperty("project_name")
@@ -41,19 +43,22 @@
         this.notebookImage = notebookImage;
     }
 
+    @SuppressWarnings("unchecked")
     public T withNotebookImage(String notebookImage) {
         setNotebookImage(notebookImage);
-        return self;
+        return (T) this;
     }
 
+    @SuppressWarnings("unchecked")
     public T withProject(String project) {
         setProject(project);
-        return self;
+        return (T) this;
     }
 
+    @SuppressWarnings("unchecked")
     public T withEndpoint(String endpoint) {
         setEndpoint(endpoint);
-        return self;
+        return (T) this;
     }
 
     @Override
@@ -62,14 +67,6 @@
                 .add("notebookImage", notebookImage);
     }
 
-    public String getProject() {
-        return project;
-    }
-
-    public void setProject(String project) {
-        this.project = project;
-    }
-
     public String getEndpoint() {
         return endpoint;
     }
diff --git a/services/datalab-model/src/main/java/com/epam/datalab/dto/exploratory/ExploratoryCreateDTO.java b/services/datalab-model/src/main/java/com/epam/datalab/dto/exploratory/ExploratoryCreateDTO.java
index 207e5c2..98935bd 100644
--- a/services/datalab-model/src/main/java/com/epam/datalab/dto/exploratory/ExploratoryCreateDTO.java
+++ b/services/datalab-model/src/main/java/com/epam/datalab/dto/exploratory/ExploratoryCreateDTO.java
@@ -22,14 +22,16 @@
 import com.epam.datalab.dto.aws.computational.ClusterConfig;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.base.MoreObjects.ToStringHelper;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.util.List;
 import java.util.Map;
 
+@Setter
+@Getter
 public class ExploratoryCreateDTO<T extends ExploratoryCreateDTO<?>> extends ExploratoryBaseDTO<T> {
 
-    @SuppressWarnings("unchecked")
-    private final T self = (T) this;
 
     @JsonProperty("git_creds")
     private List<ExploratoryGitCreds> gitCreds;
@@ -43,6 +45,12 @@
     private String endpoint;
     @JsonProperty("conf_shared_image_enabled")
     private String sharedImageEnabled;
+    @JsonProperty("gpu_enabled")
+    private Boolean enabledGPU;
+    @JsonProperty("gpuType")
+    private String gpuType;
+    @JsonProperty("gpuCount")
+    private String gpuCount;
 
     /**
      * Return the list of GIT credentials.
@@ -61,33 +69,40 @@
     /**
      * Set the list of GIT credentials and return this object.
      */
+    @SuppressWarnings("unchecked")
     public T withGitCreds(List<ExploratoryGitCreds> gitCreds) {
         setGitCreds(gitCreds);
-        return self;
+        return (T) this;
     }
 
     /**
      * Set the image name and return this object.
      */
+    @SuppressWarnings("unchecked")
     public T withImageName(String imageName) {
         setImageName(imageName);
-        return self;
+        return (T) this;
     }
 
+    @SuppressWarnings("unchecked")
     public T withTags(Map<String, String> tags) {
         this.tags = tags;
-        return self;
+        return (T) this;
     }
 
+    @SuppressWarnings("unchecked")
+
     @Override
     public T withEndpoint(String endpoint) {
         this.endpoint = endpoint;
-        return self;
+        return (T) this;
     }
 
+    @SuppressWarnings("unchecked")
+
     public T withSharedImageEnabled(String sharedImageEnabled) {
         this.sharedImageEnabled = sharedImageEnabled;
-        return self;
+        return (T) this;
     }
 
     public String getImageName() {
@@ -98,31 +113,30 @@
         this.imageName = imageName;
     }
 
+    @SuppressWarnings("unchecked")
+
     public T withClusterConfig(List<ClusterConfig> config) {
         this.clusterConfig = config;
-        return self;
+        return (T) this;
     }
 
-    @Override
-    public String getEndpoint() {
-        return endpoint;
+    @SuppressWarnings("unchecked")
+
+    public T withEnabledGPU(Boolean enabledGPU) {
+        setEnabledGPU(enabledGPU);
+        return (T) this;
     }
 
-    @Override
-    public void setEndpoint(String endpoint) {
-        this.endpoint = endpoint;
+    @SuppressWarnings("unchecked")
+    public T withGPUCount(String gpuCount) {
+        setGpuCount(gpuCount);
+        return (T) this;
     }
 
-    public String getSharedImageEnabled() {
-        return sharedImageEnabled;
-    }
-
-    public void setSharedImageEnabled(String sharedImageEnabled) {
-        this.sharedImageEnabled = sharedImageEnabled;
-    }
-
-    public List<ClusterConfig> getClusterConfig() {
-        return clusterConfig;
+    @SuppressWarnings("unchecked")
+    public T withGPUType(String gpuType) {
+        setGpuType(gpuType);
+        return (T) this;
     }
 
     @Override
diff --git a/services/datalab-model/src/main/java/com/epam/datalab/dto/gcp/exploratory/ExploratoryCreateGcp.java b/services/datalab-model/src/main/java/com/epam/datalab/dto/gcp/exploratory/ExploratoryCreateGcp.java
index a18e1db..59e270b 100644
--- a/services/datalab-model/src/main/java/com/epam/datalab/dto/gcp/exploratory/ExploratoryCreateGcp.java
+++ b/services/datalab-model/src/main/java/com/epam/datalab/dto/gcp/exploratory/ExploratoryCreateGcp.java
@@ -22,19 +22,17 @@
 import com.epam.datalab.dto.exploratory.ExploratoryCreateDTO;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.base.MoreObjects;
+import lombok.Getter;
+import lombok.Setter;
 
+import javax.ws.rs.GET;
+
+@Getter
+@Setter
 public class ExploratoryCreateGcp extends ExploratoryCreateDTO<ExploratoryCreateGcp> {
     @JsonProperty("gcp_notebook_instance_size")
     private String notebookInstanceSize;
 
-    public String getNotebookInstanceSize() {
-        return notebookInstanceSize;
-    }
-
-    public void setNotebookInstanceSize(String notebookInstanceSize) {
-        this.notebookInstanceSize = notebookInstanceSize;
-    }
-
     public ExploratoryCreateGcp withNotebookInstanceType(String notebookInstanceType) {
         setNotebookInstanceSize(notebookInstanceType);
         return this;
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/util/RequestBuilder.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/util/RequestBuilder.java
index a2fb984..1e47fb1 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/util/RequestBuilder.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/util/RequestBuilder.java
@@ -32,12 +32,7 @@
 import com.epam.datalab.backendapi.resources.dto.aws.AwsComputationalCreateForm;
 import com.epam.datalab.backendapi.resources.dto.gcp.GcpComputationalCreateForm;
 import com.epam.datalab.cloud.CloudProvider;
-import com.epam.datalab.dto.LibListComputationalDTO;
-import com.epam.datalab.dto.LibListExploratoryDTO;
-import com.epam.datalab.dto.ResourceBaseDTO;
-import com.epam.datalab.dto.ResourceSysBaseDTO;
-import com.epam.datalab.dto.UserEnvironmentResources;
-import com.epam.datalab.dto.UserInstanceDTO;
+import com.epam.datalab.dto.*;
 import com.epam.datalab.dto.aws.AwsCloudSettings;
 import com.epam.datalab.dto.aws.computational.AwsComputationalTerminateDTO;
 import com.epam.datalab.dto.aws.computational.ClusterConfig;
@@ -53,21 +48,8 @@
 import com.epam.datalab.dto.base.CloudSettings;
 import com.epam.datalab.dto.base.DataEngineType;
 import com.epam.datalab.dto.base.computational.ComputationalBase;
-import com.epam.datalab.dto.computational.ComputationalCheckInactivityDTO;
-import com.epam.datalab.dto.computational.ComputationalClusterConfigDTO;
-import com.epam.datalab.dto.computational.ComputationalStartDTO;
-import com.epam.datalab.dto.computational.ComputationalStopDTO;
-import com.epam.datalab.dto.computational.ComputationalTerminateDTO;
-import com.epam.datalab.dto.computational.UserComputationalResource;
-import com.epam.datalab.dto.exploratory.ExploratoryActionDTO;
-import com.epam.datalab.dto.exploratory.ExploratoryCheckInactivityAction;
-import com.epam.datalab.dto.exploratory.ExploratoryCreateDTO;
-import com.epam.datalab.dto.exploratory.ExploratoryGitCredsDTO;
-import com.epam.datalab.dto.exploratory.ExploratoryGitCredsUpdateDTO;
-import com.epam.datalab.dto.exploratory.ExploratoryImageDTO;
-import com.epam.datalab.dto.exploratory.ExploratoryReconfigureSparkClusterActionDTO;
-import com.epam.datalab.dto.exploratory.LibInstallDTO;
-import com.epam.datalab.dto.exploratory.LibraryInstallDTO;
+import com.epam.datalab.dto.computational.*;
+import com.epam.datalab.dto.exploratory.*;
 import com.epam.datalab.dto.gcp.GcpCloudSettings;
 import com.epam.datalab.dto.gcp.computational.ComputationalCreateGcp;
 import com.epam.datalab.dto.gcp.computational.GcpComputationalTerminateDTO;
@@ -88,9 +70,7 @@
 import java.util.Map;
 import java.util.UUID;
 
-import static com.epam.datalab.cloud.CloudProvider.AWS;
-import static com.epam.datalab.cloud.CloudProvider.AZURE;
-import static com.epam.datalab.cloud.CloudProvider.GCP;
+import static com.epam.datalab.cloud.CloudProvider.*;
 
 @Singleton
 public class RequestBuilder {
@@ -197,7 +177,10 @@
                 .withProject(exploratory.getProject())
                 .withEndpoint(exploratory.getEndpoint())
                 .withSharedImageEnabled(String.valueOf(projectDTO.isSharedImageEnabled()))
-                .withTags(tags);
+                .withTags(tags)
+                .withGPUCount(exploratory.getGpuCount())
+                .withGPUType(exploratory.getGpuType())
+                .withEnabledGPU(exploratory.getEnabledGPU());
     }
 
     @SuppressWarnings("unchecked")
@@ -626,57 +609,57 @@
                 .key(projectDTO.getKey().replace("\n", ""))
                 .name(projectDTO.getName())
                 .tag(projectDTO.getTag())
-		        .endpoint(endpointDTO.getName())
-		        .build()
-		        .withCloudSettings(cloudSettings(userInfo.getName(), endpointDTO.getCloudProvider()));
+                .endpoint(endpointDTO.getName())
+                .build()
+                .withCloudSettings(cloudSettings(userInfo.getName(), endpointDTO.getCloudProvider()));
     }
 
-	public ProjectActionDTO newProjectAction(UserInfo userInfo, String project, EndpointDTO endpointDTO) {
-		return new ProjectActionDTO(project, endpointDTO.getName())
-				.withCloudSettings(cloudSettings(userInfo.getName(), endpointDTO.getCloudProvider()));
-	}
+    public ProjectActionDTO newProjectAction(UserInfo userInfo, String project, EndpointDTO endpointDTO) {
+        return new ProjectActionDTO(project, endpointDTO.getName())
+                .withCloudSettings(cloudSettings(userInfo.getName(), endpointDTO.getCloudProvider()));
+    }
 
-	public CreateOdahuDTO newOdahuCreate(String user, OdahuCreateDTO odahuCreateDTO, ProjectDTO projectDTO, EndpointDTO endpointDTO) {
-		return CreateOdahuDTO.builder()
-				.name(odahuCreateDTO.getName())
-				.project(projectDTO.getName())
-				.endpoint(odahuCreateDTO.getEndpoint())
-				.key(projectDTO.getKey().replace("\n", ""))
-				.build()
-				.withEdgeUserName(getEdgeUserName(user, endpointDTO.getCloudProvider()))
-				.withCloudSettings(cloudSettings(user, endpointDTO.getCloudProvider()));
-	}
+    public CreateOdahuDTO newOdahuCreate(String user, OdahuCreateDTO odahuCreateDTO, ProjectDTO projectDTO, EndpointDTO endpointDTO) {
+        return CreateOdahuDTO.builder()
+                .name(odahuCreateDTO.getName())
+                .project(projectDTO.getName())
+                .endpoint(odahuCreateDTO.getEndpoint())
+                .key(projectDTO.getKey().replace("\n", ""))
+                .build()
+                .withEdgeUserName(getEdgeUserName(user, endpointDTO.getCloudProvider()))
+                .withCloudSettings(cloudSettings(user, endpointDTO.getCloudProvider()));
+    }
 
-	public ActionOdahuDTO newOdahuAction(String user, String name, ProjectDTO projectDTO, EndpointDTO endpointDTO,
-	                                     OdahuFieldsDTO odahuFields) {
-		return ActionOdahuDTO.builder()
-				.name(name)
-				.project(projectDTO.getName())
-				.key(projectDTO.getKey().replace("\n", ""))
-				.endpoint(endpointDTO.getName())
-				.grafanaAdmin(odahuFields.getGrafanaAdmin())
-				.grafanaPassword(odahuFields.getGrafanaPassword())
-				.oauthCookieSecret(odahuFields.getOauthCookieSecret())
-				.decryptToken(odahuFields.getDecryptToken())
-				.build()
-				.withEdgeUserName(getEdgeUserName(user, endpointDTO.getCloudProvider()))
-				.withCloudSettings(cloudSettings(user, endpointDTO.getCloudProvider()));
-	}
+    public ActionOdahuDTO newOdahuAction(String user, String name, ProjectDTO projectDTO, EndpointDTO endpointDTO,
+                                         OdahuFieldsDTO odahuFields) {
+        return ActionOdahuDTO.builder()
+                .name(name)
+                .project(projectDTO.getName())
+                .key(projectDTO.getKey().replace("\n", ""))
+                .endpoint(endpointDTO.getName())
+                .grafanaAdmin(odahuFields.getGrafanaAdmin())
+                .grafanaPassword(odahuFields.getGrafanaPassword())
+                .oauthCookieSecret(odahuFields.getOauthCookieSecret())
+                .decryptToken(odahuFields.getDecryptToken())
+                .build()
+                .withEdgeUserName(getEdgeUserName(user, endpointDTO.getCloudProvider()))
+                .withCloudSettings(cloudSettings(user, endpointDTO.getCloudProvider()));
+    }
 
-	public UserEnvironmentResources newInfrastructureStatus(String user, CloudProvider cloudProvider, EnvResourceList resourceList) {
-		return newResourceSysBaseDTO(user, cloudProvider, UserEnvironmentResources.class)
-				.withResourceList(resourceList);
-	}
+    public UserEnvironmentResources newInfrastructureStatus(String user, CloudProvider cloudProvider, EnvResourceList resourceList) {
+        return newResourceSysBaseDTO(user, cloudProvider, UserEnvironmentResources.class)
+                .withResourceList(resourceList);
+    }
 
-	/**
-	 * Returns application name basing on docker image
-	 *
-	 * @param imageName docker image name
-	 * @return application name
-	 */
-	private String getApplicationNameFromImage(String imageName) {
-		if (imageName != null) {
-			int pos = imageName.indexOf('-');
+    /**
+     * Returns application name basing on docker image
+     *
+     * @param imageName docker image name
+     * @return application name
+     */
+    private String getApplicationNameFromImage(String imageName) {
+        if (imageName != null) {
+            int pos = imageName.indexOf('-');
             if (pos > 0) {
                 return imageName.substring(pos + 1);
             }