Skip to content

Commit d4de1d9

Browse files
author
Alexander Garagatyi
authored
Merge pull request eclipse-che#2234 from eclipse/CHE-1818
CHE-1818: change workspace environment model
2 parents f583799 + 894ab9b commit d4de1d9

142 files changed

Lines changed: 8761 additions & 2045 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

assembly/assembly-wsmaster-war/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@
2626
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2727
</properties>
2828
<dependencies>
29+
<dependency>
30+
<groupId>aopalliance</groupId>
31+
<artifactId>aopalliance</artifactId>
32+
</dependency>
2933
<dependency>
3034
<groupId>com.google.guava</groupId>
3135
<artifactId>guava</artifactId>

assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,18 @@
1414
import com.google.inject.multibindings.Multibinder;
1515
import com.google.inject.name.Names;
1616

17+
import org.eclipse.che.api.core.rest.CheJsonProvider;
18+
import org.eclipse.che.api.core.rest.MessageBodyAdapter;
19+
import org.eclipse.che.api.core.rest.MessageBodyAdapterInterceptor;
1720
import org.eclipse.che.api.machine.shared.Constants;
21+
import org.eclipse.che.api.workspace.server.stack.StackMessageBodyAdapter;
22+
import org.eclipse.che.api.workspace.server.WorkspaceConfigMessageBodyAdapter;
23+
import org.eclipse.che.api.workspace.server.WorkspaceMessageBodyAdapter;
1824
import org.eclipse.che.inject.DynaModule;
1925

26+
import static com.google.inject.matcher.Matchers.subclassesOf;
27+
import static org.eclipse.che.inject.Matchers.names;
28+
2029
/** @author andrew00x */
2130
@DynaModule
2231
public class WsMasterModule extends AbstractModule {
@@ -84,6 +93,9 @@ protected void configure() {
8493
Multibinder.newSetBinder(binder(), org.eclipse.che.api.machine.server.spi.InstanceProvider.class);
8594
machineImageProviderMultibinder.addBinding().to(org.eclipse.che.plugin.docker.machine.DockerInstanceProvider.class);
8695

96+
bind(org.eclipse.che.api.environment.server.compose.ComposeMachineInstanceProvider.class)
97+
.to(org.eclipse.che.plugin.docker.machine.ComposeMachineProviderImpl.class);
98+
8799
install(new org.eclipse.che.api.core.rest.CoreRestModule());
88100
install(new org.eclipse.che.api.core.util.FileCleaner.FileCleanerModule());
89101
install(new org.eclipse.che.plugin.docker.machine.local.LocalDockerModule());
@@ -95,5 +107,14 @@ protected void configure() {
95107
install(new org.eclipse.che.plugin.machine.ssh.SshMachineModule());
96108
install(new org.eclipse.che.plugin.docker.machine.proxy.DockerProxyModule());
97109
install(new org.eclipse.che.commons.schedule.executor.ScheduleModule());
110+
111+
final Multibinder<MessageBodyAdapter> adaptersMultibinder = Multibinder.newSetBinder(binder(), MessageBodyAdapter.class);
112+
adaptersMultibinder.addBinding().to(WorkspaceConfigMessageBodyAdapter.class);
113+
adaptersMultibinder.addBinding().to(WorkspaceMessageBodyAdapter.class);
114+
adaptersMultibinder.addBinding().to(StackMessageBodyAdapter.class);
115+
116+
final MessageBodyAdapterInterceptor interceptor = new MessageBodyAdapterInterceptor();
117+
requestInjection(interceptor);
118+
bindInterceptor(subclassesOf(CheJsonProvider.class), names("readFrom"), interceptor);
98119
}
99120
}

core/che-core-api-core/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@
2626
<findbugs.failonerror>false</findbugs.failonerror>
2727
</properties>
2828
<dependencies>
29+
<dependency>
30+
<groupId>aopalliance</groupId>
31+
<artifactId>aopalliance</artifactId>
32+
</dependency>
2933
<dependency>
3034
<groupId>com.google.code.gson</groupId>
3135
<artifactId>gson</artifactId>
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2012-2016 Codenvy, S.A.
3+
* All rights reserved. This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v1.0
5+
* which accompanies this distribution, and is available at
6+
* http://www.eclipse.org/legal/epl-v10.html
7+
*
8+
* Contributors:
9+
* Codenvy, S.A. - initial API and implementation
10+
*******************************************************************************/
11+
package org.eclipse.che.api.core.rest;
12+
13+
import com.google.common.annotations.Beta;
14+
15+
import javax.ws.rs.WebApplicationException;
16+
import java.io.IOException;
17+
import java.io.InputStream;
18+
import java.util.Set;
19+
20+
/**
21+
* Adapts an entity stream in an implementation specific way.
22+
*
23+
* <p>To bind custom adapter:
24+
* <pre>
25+
* Multibinder<MessageBodyAdapter> adaptersBinder = Multibinder.newSetBinder(binder(), MessageBodyAdapter.class);
26+
* adaptersBinder.addBinding().to(CustomMessageBodyAdapter.class);
27+
* </pre>
28+
*
29+
* @author Yevhenii Voevodin
30+
*/
31+
@Beta
32+
public interface MessageBodyAdapter {
33+
34+
/** Returns classes for which adaption will be triggered. */
35+
Set<Class<?>> getTriggers();
36+
37+
/**
38+
* Adapts entity stream to a new one, if necessary.
39+
*
40+
* @param entityStream
41+
* an entity stream
42+
* @return a new stream with an adapted data or the same {@code entityStream}
43+
* if there is nothing to adapt
44+
*/
45+
InputStream adapt(InputStream entityStream) throws WebApplicationException, IOException;
46+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2012-2016 Codenvy, S.A.
3+
* All rights reserved. This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v1.0
5+
* which accompanies this distribution, and is available at
6+
* http://www.eclipse.org/legal/epl-v10.html
7+
*
8+
* Contributors:
9+
* Codenvy, S.A. - initial API and implementation
10+
*******************************************************************************/
11+
package org.eclipse.che.api.core.rest;
12+
13+
import com.google.common.annotations.Beta;
14+
15+
import org.aopalliance.intercept.MethodInterceptor;
16+
import org.aopalliance.intercept.MethodInvocation;
17+
18+
import javax.inject.Inject;
19+
import javax.ws.rs.core.MediaType;
20+
import javax.ws.rs.core.MultivaluedMap;
21+
import javax.ws.rs.ext.MessageBodyReader;
22+
import java.io.InputStream;
23+
import java.lang.annotation.Annotation;
24+
import java.lang.reflect.Type;
25+
import java.util.HashMap;
26+
import java.util.Map;
27+
import java.util.Set;
28+
29+
/**
30+
* This interceptor must be bound for the method
31+
* {@link MessageBodyReader#readFrom(Class, Type, Annotation[], MediaType, MultivaluedMap, InputStream)}
32+
*
33+
* @author Yevhenii Voevodin
34+
*/
35+
@Beta
36+
public class MessageBodyAdapterInterceptor implements MethodInterceptor {
37+
38+
private final Map<Class<?>, MessageBodyAdapter> adapters = new HashMap<>();
39+
40+
@Inject
41+
public void init(Set<MessageBodyAdapter> adapters) {
42+
for (MessageBodyAdapter adapter : adapters) {
43+
for (Class<?> trigger : adapter.getTriggers()) {
44+
this.adapters.put(trigger, adapter);
45+
}
46+
}
47+
}
48+
49+
@Override
50+
public Object invoke(MethodInvocation invocation) throws Throwable {
51+
final Object[] args = invocation.getArguments();
52+
final MessageBodyAdapter adapter = adapters.get((Class<?>)args[0]);
53+
if (adapter != null) {
54+
args[args.length - 1] = adapter.adapt((InputStream)args[args.length - 1]);
55+
}
56+
return invocation.proceed();
57+
}
58+
}

core/che-core-api-model/src/main/java/org/eclipse/che/api/core/model/machine/MachineConfig.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
/**
1919
* @author gazarenkov
2020
*/
21+
@Deprecated
2122
public interface MachineConfig {
2223

2324
/**
@@ -44,7 +45,7 @@ public interface MachineConfig {
4445
* Machine limits such as RAM size.
4546
*/
4647
@Nullable
47-
Limits getLimits();
48+
MachineLimits getLimits();
4849

4950
/**
5051
* Get configuration of servers inside of machine.

core/che-core-api-model/src/main/java/org/eclipse/che/api/core/model/machine/Limits.java renamed to core/che-core-api-model/src/main/java/org/eclipse/che/api/core/model/machine/MachineLimits.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
*
1616
* @author Alexander Garagatyi
1717
*/
18-
public interface Limits {
18+
@Deprecated
19+
public interface MachineLimits {
1920
/** Get memory size (in megabytes) that is allocated for starting machine. */
2021
int getRam();
2122
}

core/che-core-api-model/src/main/java/org/eclipse/che/api/core/model/machine/MachineSource.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
/**
1414
* @author gazarenkov
1515
*/
16+
@Deprecated
1617
public interface MachineSource {
1718

1819
/**

core/che-core-api-model/src/main/java/org/eclipse/che/api/core/model/machine/ServerConf.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
*
1818
* @author Alexander Garagatyi
1919
*/
20+
@Deprecated
2021
public interface ServerConf {
2122
/**
2223
* Reference to this server.

core/che-core-api-model/src/main/java/org/eclipse/che/api/core/model/workspace/Environment.java

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,23 @@
1010
*******************************************************************************/
1111
package org.eclipse.che.api.core.model.workspace;
1212

13-
import org.eclipse.che.api.core.model.machine.MachineConfig;
14-
import org.eclipse.che.api.core.model.machine.Recipe;
15-
16-
import java.util.List;
13+
import java.util.Map;
1714

1815
/**
1916
* Defines environment for machines network.
2017
*
2118
* @author gazarenkov
19+
* @author Alexander Garagatyi
2220
*/
2321
public interface Environment {
24-
25-
/**
26-
* Returns environment display name. It is mandatory and unique per workspace
27-
*/
28-
String getName();
29-
3022
/**
3123
* Returns the recipe (the main script) to define this environment (compose, kubernetes pod).
32-
* Type of this recipe defines engine for composing machines network runtime
24+
* Type of this recipe defines engine for composing machines network runtime.
3325
*/
34-
Recipe getRecipe();
26+
EnvironmentRecipe getRecipe();
3527

3628
/**
37-
* Returns list of Machine configs defined by this environment
38-
* Note: it may happen that we are not able to provide this info for particular environment type
39-
* or for particular time (for example this information may be reasonable accessible only when we start network or so)
40-
* to investigate
29+
* Returns mapping of machine name to additional configuration of machine.
4130
*/
42-
List<? extends MachineConfig> getMachineConfigs();
31+
Map<String, ? extends ExtendedMachine> getMachines();
4332
}

0 commit comments

Comments
 (0)