Skip to content

Commit 2d3a194

Browse files
authored
Added functionality to support continuous operation events (#58)
* Added functionality to support continuous operation events
1 parent 93d47a4 commit 2d3a194

File tree

96 files changed

+6901
-762
lines changed

Some content is hidden

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

96 files changed

+6901
-762
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 0.3.2
2+
- Implemented functionality to support 2.0 eiffel-operations events
3+
14
## 0.3.1
25
- Implemented functionality to override input semantics gav with MANIFEST.MF file gav
36

build.gradle

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ allprojects {
4848

4949
jar {
5050
baseName = 'eiffel-remrem-semantics'
51-
version = '0.3.1'
51+
version = '0.3.2'
5252
manifest {
5353
attributes('remremVersionKey': 'semanticsVersion')
5454
attributes('semanticsVersion': version)
@@ -66,7 +66,7 @@ jar {
6666

6767
shadowJar {
6868
baseName = 'eiffel-remrem-semantics'
69-
version = '0.3.1'
69+
version = '0.3.2'
7070
classifier = ''
7171
}
7272

@@ -124,17 +124,30 @@ task compileSourceCode (type: JavaCompile) {
124124
destinationDir = sourceSets.main.output.classesDir
125125
}
126126

127-
//runJava task to clone schemas from github and modify the schema's for generate pojo's
127+
//runJava task to clone schemas from github and then modify schema's to generate pojo's
128128
task runJava(type:JavaExec){
129-
doFirst{
130-
// remote repository URL to clone
131-
def remoteURL='https://github.com/Ericsson/eiffel.git'
132-
//specific branch name to clone
133-
def branch='master'
134-
main 'com.ericsson.eiffel.remrem.semantics.clone.PrepareLocalEiffelSchemas'
135-
classpath sourceSets.main.runtimeClasspath
136-
args= [remoteURL,branch]
137-
}
129+
doFirst{
130+
131+
// Remote Eiffel repository URL to clone
132+
133+
def eiffelRepoURL = 'https://github.com/Ericsson/eiffel.git'
134+
135+
//specific branch name to clone
136+
137+
def eiffelRepoBranch = 'master'
138+
139+
// Remote Continuous Operations repository URL
140+
141+
def eiffelOperationsExtensionRepoUrl = 'https://github.com/Ericsson/eiffel-operations-extension.git'
142+
143+
//branch name to perform clone
144+
145+
def operationsRepoBranch = 'master'
146+
147+
main 'com.ericsson.eiffel.remrem.semantics.clone.PrepareLocalEiffelSchemas'
148+
classpath sourceSets.main.runtimeClasspath
149+
args= [eiffelRepoURL, eiffelRepoBranch, eiffelOperationsExtensionRepoUrl, operationsRepoBranch]
150+
}
138151
}
139152

140153
//please set 'runJava.enabled= true' to execute the :runJava task if needed only.

src/main/java/com/ericsson/eiffel/remrem/semantics/EiffelEventType.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,15 @@ public enum EiffelEventType {
3939
TESTSUITE_FINISHED("EiffelTestSuiteFinishedEvent"),
4040
TESTSUITE_STARTED("EiffelTestSuiteStartedEvent"),
4141
ISSUE_VERIFIED("EiffelIssueVerifiedEvent"),
42-
ARTIFACT_REUSED("EiffelArtifactReusedEvent");
42+
ARTIFACT_REUSED("EiffelArtifactReusedEvent"),
43+
SERVICE_STOPPED("EiffelServiceStoppedEvent"),
44+
SERVICE_STARTED("EiffelServiceStartedEvent"),
45+
SERVICE_RETURNED("EiffelServiceReturnedEvent"),
46+
SERVICE_DISCONTINUED("EiffelServiceDiscontinuedEvent"),
47+
SERVICE_DEPLOYED("EiffelServiceDeployedEvent"),
48+
SERVICE_ALLOCATED("EiffelServiceAllocatedEvent"),
49+
ARTIFACT_DEPLOYED("EiffelArtifactDeployedEvent"),
50+
ANNOUNCEMENT_ACKNOWLEDGED("EiffelAnnouncementAcknowledgedEvent");
4351

4452
private String eventType;
4553

src/main/java/com/ericsson/eiffel/remrem/semantics/RoutingKeyTypes.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,16 @@ public enum RoutingKeyTypes {
3939
EiffelTestCaseStartedEvent(EiffelConstants.TEST,"casestarted"),
4040
EiffelTestSuiteFinishedEvent(EiffelConstants.TEST,"suitefinished"),
4141
EiffelTestSuiteStartedEvent(EiffelConstants.TEST,"suitestarted"),
42-
EiffelTestExecutionRecipeCollectionCreatedEvent(EiffelConstants.TEST,"execution");
42+
EiffelTestExecutionRecipeCollectionCreatedEvent(EiffelConstants.TEST,"execution"),
43+
EiffelAnnouncementAcknowledgedEvent(EiffelConstants.INFO,"announcementack"),
44+
EiffelArtifactDeployedEvent(EiffelConstants.ARTIFACT,"deployed"),
45+
EiffelServiceAllocatedEvent(EiffelConstants.SERVICE,"allocated"),
46+
EiffelServiceDeployedEvent(EiffelConstants.SERVICE,"deployed"),
47+
EiffelServiceDiscontinuedEvent(EiffelConstants.SERVICE,"discontinued"),
48+
EiffelServiceReturnedEvent(EiffelConstants.SERVICE,"returned"),
49+
EiffelServiceStartedEvent(EiffelConstants.SERVICE,"started"),
50+
EiffelServiceStoppedEvent(EiffelConstants.SERVICE,"stopped");
51+
4352

4453
private final String family; // family
4554
private final String type; // type

src/main/java/com/ericsson/eiffel/remrem/semantics/SemanticsService.java

Lines changed: 93 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@
2828
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.EXECUTION_RECIPE_COLLECTION_CREATED;
2929
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.ENVIRONMENT_DEFINED;
3030
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.FLOWCONTEXT_DEFINED;
31+
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.SERVICE_ALLOCATED;
32+
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.SERVICE_DEPLOYED;
33+
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.SERVICE_DISCONTINUED;
34+
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.SERVICE_RETURNED;
35+
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.SERVICE_STARTED;
36+
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.SERVICE_STOPPED;
37+
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.ANNOUNCEMENT_ACKNOWLEDGED;
38+
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.ARTIFACT_DEPLOYED;
3139
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.SOURCECHANGE_CREATED;
3240
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.SOURCECHANGE_SUBMITTED;
3341
import static com.ericsson.eiffel.remrem.semantics.EiffelEventType.TESTCASE_FINISHED;
@@ -58,8 +66,10 @@
5866
import com.ericsson.eiffel.semantics.events.EiffelActivityFinishedEvent;
5967
import com.ericsson.eiffel.semantics.events.EiffelActivityStartedEvent;
6068
import com.ericsson.eiffel.semantics.events.EiffelActivityTriggeredEvent;
69+
import com.ericsson.eiffel.semantics.events.EiffelAnnouncementAcknowledgedEvent;
6170
import com.ericsson.eiffel.semantics.events.EiffelAnnouncementPublishedEvent;
6271
import com.ericsson.eiffel.semantics.events.EiffelArtifactCreatedEvent;
72+
import com.ericsson.eiffel.semantics.events.EiffelArtifactDeployedEvent;
6373
import com.ericsson.eiffel.semantics.events.EiffelArtifactPublishedEvent;
6474
import com.ericsson.eiffel.semantics.events.EiffelCompositionDefinedEvent;
6575
import com.ericsson.eiffel.semantics.events.EiffelConfidenceLevelModifiedEvent;
@@ -68,6 +78,12 @@
6878
import com.ericsson.eiffel.semantics.events.EiffelTestCaseTriggeredEvent;
6979
import com.ericsson.eiffel.semantics.events.EiffelEnvironmentDefinedEvent;
7080
import com.ericsson.eiffel.semantics.events.EiffelFlowContextDefinedEvent;
81+
import com.ericsson.eiffel.semantics.events.EiffelServiceAllocatedEvent;
82+
import com.ericsson.eiffel.semantics.events.EiffelServiceDeployedEvent;
83+
import com.ericsson.eiffel.semantics.events.EiffelServiceDiscontinuedEvent;
84+
import com.ericsson.eiffel.semantics.events.EiffelServiceReturnedEvent;
85+
import com.ericsson.eiffel.semantics.events.EiffelServiceStartedEvent;
86+
import com.ericsson.eiffel.semantics.events.EiffelServiceStoppedEvent;
7187
import com.ericsson.eiffel.semantics.events.EiffelSourceChangeCreatedEvent;
7288
import com.ericsson.eiffel.semantics.events.EiffelSourceChangeSubmittedEvent;
7389
import com.ericsson.eiffel.semantics.events.EiffelTestCaseFinishedEvent;
@@ -115,16 +131,16 @@ public SemanticsService() {
115131
supportedEventTypes.add(msg.getEventName());
116132
}
117133
}
118-
134+
119135
@PostConstruct
120-
public void readManifest() {
121-
ManifestHandler manifastHandler = new ManifestHandler();
122-
semanticsGAV = manifastHandler.readGavfromManifest();
123-
if (semanticsGAV == null || semanticsGAV.getArtifactId() == null || semanticsGAV.getGroupId() == null
124-
|| semanticsGAV.getVersion() == null) {
125-
semanticsGavFlag = true;
126-
}
127-
}
136+
public void readManifest() {
137+
ManifestHandler manifastHandler = new ManifestHandler();
138+
semanticsGAV = manifastHandler.readGavfromManifest();
139+
if (semanticsGAV == null || semanticsGAV.getArtifactId() == null || semanticsGAV.getGroupId() == null
140+
|| semanticsGAV.getVersion() == null) {
141+
semanticsGavFlag = true;
142+
}
143+
}
128144

129145
public static Map<EiffelEventType, Class<? extends Event>> eventType() {
130146
eventTypes = new HashMap<>();
@@ -150,15 +166,24 @@ public static Map<EiffelEventType, Class<? extends Event>> eventType() {
150166
eventTypes.put(TESTSUITE_STARTED, EiffelTestSuiteStartedEvent.class);
151167
eventTypes.put(ISSUE_VERIFIED, EiffelIssueVerifiedEvent.class);
152168
eventTypes.put(ARTIFACT_REUSED, EiffelArtifactReusedEvent.class);
169+
eventTypes.put(SERVICE_STOPPED, EiffelServiceStoppedEvent.class);
170+
eventTypes.put(SERVICE_STARTED, EiffelServiceStartedEvent.class);
171+
eventTypes.put(SERVICE_RETURNED, EiffelServiceReturnedEvent.class);
172+
eventTypes.put(SERVICE_DISCONTINUED, EiffelServiceDiscontinuedEvent.class);
173+
eventTypes.put(SERVICE_DEPLOYED, EiffelServiceDeployedEvent.class);
174+
eventTypes.put(SERVICE_ALLOCATED, EiffelServiceAllocatedEvent.class);
175+
eventTypes.put(ARTIFACT_DEPLOYED, EiffelArtifactDeployedEvent.class);
176+
eventTypes.put(ANNOUNCEMENT_ACKNOWLEDGED, EiffelAnnouncementAcknowledgedEvent.class);
177+
153178
return eventTypes;
154179
}
155180

156181
@Override
157182
public String generateMsg(String msgType, JsonObject bodyJson) {
158-
if (semanticsGavFlag) {
159-
return createErrorResponse("GAV info of eiffel-remrem-semantics is missing",
160-
"Required Serializer GAV information of eiffel-remrem-semantics is missing in MANIFEST.MF");
161-
}
183+
if (semanticsGavFlag) {
184+
return createErrorResponse("GAV info of eiffel-remrem-semantics is missing",
185+
"Required Serializer GAV information of eiffel-remrem-semantics is missing in MANIFEST.MF");
186+
}
162187
EiffelEventType eiffelType = EiffelEventType.fromString(msgType);
163188
if (eiffelType == null) {
164189
log.error("Unknown message type requested: " + msgType);
@@ -252,36 +277,43 @@ public String getInputEventType(JsonObject json) {
252277

253278
@Override
254279
public String getEventType(JsonObject json) {
255-
if (json.isJsonObject() && json.getAsJsonObject().has(META) && json.getAsJsonObject()
256-
.getAsJsonObject(META).has(TYPE)) {
257-
return json.getAsJsonObject().getAsJsonObject(META)
258-
.get(TYPE).getAsString();
280+
if (json.isJsonObject() && json.getAsJsonObject().has(META)
281+
&& json.getAsJsonObject().getAsJsonObject(META).has(TYPE)) {
282+
return json.getAsJsonObject().getAsJsonObject(META).get(TYPE).getAsString();
259283
}
260284
return null;
261285
}
262286

263287
/**
264-
* Returns Family Routing Key Word from the messaging library based on the eiffel message eventType.
265-
* @param JsonObject eiffelMessage
288+
* Returns Family Routing Key Word from the messaging library based on the
289+
* eiffel message eventType.
290+
*
291+
* @param JsonObject
292+
* eiffelMessage
266293
* @return family routing key word in String format.
267-
*/
294+
*/
268295
private String getFamily(JsonObject eiffelMessage) {
269296
if (eiffelMessage.isJsonObject() && eiffelMessage.getAsJsonObject().has(META)
270297
&& eiffelMessage.getAsJsonObject().getAsJsonObject(META).has(TYPE)) {
271-
return event.getFamilyRoutingKey(eiffelMessage.getAsJsonObject().getAsJsonObject(META).get(TYPE).getAsString());
298+
return event
299+
.getFamilyRoutingKey(eiffelMessage.getAsJsonObject().getAsJsonObject(META).get(TYPE).getAsString());
272300
}
273301
return null;
274302
}
275303

276304
/**
277-
* Returns Type Routing Key Word from the messaging library based on the eiffel message eventType.
278-
* @param JsonObject eiffelMessage
305+
* Returns Type Routing Key Word from the messaging library based on the
306+
* eiffel message eventType.
307+
*
308+
* @param JsonObject
309+
* eiffelMessage
279310
* @return type routing key word in String format.
280-
*/
311+
*/
281312
private String getType(JsonObject eiffelMessage) {
282313
if (eiffelMessage.isJsonObject() && eiffelMessage.getAsJsonObject().has(META)
283314
&& eiffelMessage.getAsJsonObject().getAsJsonObject(META).has(TYPE)) {
284-
return event.getTypeRoutingKey(eiffelMessage.getAsJsonObject().getAsJsonObject(META).get(TYPE).getAsString());
315+
return event
316+
.getTypeRoutingKey(eiffelMessage.getAsJsonObject().getAsJsonObject(META).get(TYPE).getAsString());
285317
}
286318
return null;
287319
}
@@ -307,15 +339,18 @@ public ValidationResult validateMsg(String msgType, JsonObject jsonvalidateMessa
307339

308340
/**
309341
* Returns the domain Id from json formatted eiffel message.
310-
* @param eiffelMessage eiffel message in json format
311-
* @return the domainId from eiffelMessage if domainId not available then returns the null value
312-
*/
342+
*
343+
* @param eiffelMessage
344+
* eiffel message in json format
345+
* @return the domainId from eiffelMessage if domainId not available then
346+
* returns the null value
347+
*/
313348
private String getDomainId(JsonObject eiffelMessage) {
314-
if (eiffelMessage.isJsonObject() && eiffelMessage.getAsJsonObject().has(META) && eiffelMessage.getAsJsonObject()
315-
.getAsJsonObject(META).has(SOURCE) && eiffelMessage.getAsJsonObject()
316-
.getAsJsonObject(META).getAsJsonObject(SOURCE).has(DOMAIN_ID)) {
317-
return eiffelMessage.getAsJsonObject().getAsJsonObject(META).getAsJsonObject(SOURCE)
318-
.get(DOMAIN_ID).getAsString();
349+
if (eiffelMessage.isJsonObject() && eiffelMessage.getAsJsonObject().has(META)
350+
&& eiffelMessage.getAsJsonObject().getAsJsonObject(META).has(SOURCE)
351+
&& eiffelMessage.getAsJsonObject().getAsJsonObject(META).getAsJsonObject(SOURCE).has(DOMAIN_ID)) {
352+
return eiffelMessage.getAsJsonObject().getAsJsonObject(META).getAsJsonObject(SOURCE).get(DOMAIN_ID)
353+
.getAsString();
319354
}
320355
return null;
321356
}
@@ -330,34 +365,37 @@ public String generateRoutingKey(JsonObject eiffelMessage, String tag, String do
330365
return null;
331366
}
332367
String domainId = getDomainId(eiffelMessage);
333-
//If domainId from input message is null then configured domain will be considered
334-
domainId = StringUtils.defaultIfBlank(domainId, domain);
335-
if(StringUtils.isNotBlank(domainId)) {
368+
// If domainId from input message is null then configured domain
369+
// will be considered
370+
domainId = StringUtils.defaultIfBlank(domainId, domain);
371+
if (StringUtils.isNotBlank(domainId)) {
336372
if (StringUtils.isNotBlank(userDomainSuffix)) {
337373
domainId = domainId + DOT + userDomainSuffix;
338374
}
339-
return StringUtils.deleteWhitespace(PROTOCOL + DOT + family + DOT + type + DOT + StringUtils.defaultIfBlank(tag, "notag") + DOT + domainId);
375+
return StringUtils.deleteWhitespace(PROTOCOL + DOT + family + DOT + type + DOT
376+
+ StringUtils.defaultIfBlank(tag, "notag") + DOT + domainId);
340377
}
341-
log.error("domain needed for Routing key generation in the format <protocol>.<family>.<type>.<tag>.<domain> is not provided in either input message or configuration");
378+
log.error(
379+
"domain needed for Routing key generation in the format <protocol>.<family>.<type>.<tag>.<domain> is not provided in either input message or configuration");
342380
}
343381
return null;
344382
}
345-
383+
346384
/**
347-
* This method is used to override given input meta.source.serializer GAV
348-
* with semantics GAV or if not exist, generates semantics GAV and set to
349-
* meta.source.serializer
350-
*
351-
* @param source
352-
* @return updated source instance with semantics gav information
353-
*/
354-
public static Source setSerializerGav(Source source) {
355-
source = source == null ? new Source() : source;
356-
Serializer serializer = source.getSerializer()==null? new Serializer():source.getSerializer();
357-
serializer.setGroupId(semanticsGAV.getGroupId());
358-
serializer.setArtifactId(semanticsGAV.getArtifactId());
359-
serializer.setVersion(semanticsGAV.getVersion());
360-
source.setSerializer(serializer);
361-
return source;
362-
}
385+
* This method is used to override given input meta.source.serializer GAV
386+
* with semantics GAV or if not exist, generates semantics GAV and set to
387+
* meta.source.serializer
388+
*
389+
* @param source
390+
* @return updated source instance with semantics gav information
391+
*/
392+
public static Source setSerializerGav(Source source) {
393+
source = source == null ? new Source() : source;
394+
Serializer serializer = source.getSerializer() == null ? new Serializer() : source.getSerializer();
395+
serializer.setGroupId(semanticsGAV.getGroupId());
396+
serializer.setArtifactId(semanticsGAV.getArtifactId());
397+
serializer.setVersion(semanticsGAV.getVersion());
398+
source.setSerializer(serializer);
399+
return source;
400+
}
363401
}

0 commit comments

Comments
 (0)