Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix issues with the new trigger service #43556

Merged
merged 4 commits into from
Nov 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
import io.ballerina.trigger.entity.BallerinaTriggerRequest;
import io.ballerina.trigger.entity.CentralTriggerListResult;
import io.ballerina.trigger.entity.Constants;
import io.ballerina.trigger.entity.Trigger;
import org.ballerinalang.annotation.JavaSPIService;
import org.ballerinalang.central.client.CentralAPIClient;
import org.ballerinalang.central.client.exceptions.CentralClientException;
Expand Down Expand Up @@ -69,8 +68,6 @@
@JavaSPIService("org.ballerinalang.langserver.commons.service.spi.ExtendedLanguageServerService")
@JsonSegment("ballerinaTrigger")
public class BallerinaTriggerService implements ExtendedLanguageServerService {
public static final String BALLERINA = "ballerina";
public static final String BALLERINAX = "ballerinax";
private LanguageClient languageClient;
private final Map<String, InBuiltTrigger> inBuiltTriggers;

Expand Down Expand Up @@ -116,26 +113,12 @@ public CompletableFuture<BallerinaTriggerListResponse> triggers(BallerinaTrigger
}

@JsonRequest
public CompletableFuture<BallerinaTriggerListResponse> triggersNew(BallerinaTriggerListRequest request) {
public CompletableFuture<JsonObject> triggersNew(BallerinaTriggerListRequest request) {
return CompletableFuture.supplyAsync(() -> {
BallerinaTriggerListResponse triggersList = new BallerinaTriggerListResponse();
try {
List<Trigger> inBuiltTriggers = getInBuiltTriggers(request);
triggersList.addInBuiltTriggers(inBuiltTriggers);
if (request.getLimit() > 0) {
if (inBuiltTriggers.size() == request.getLimit()) {
return triggersList;
}
request.setLimit(request.getLimit() - inBuiltTriggers.size());
}
CentralTriggerListResult centralTriggerListResult = getCentralTriggerListResult(request);
triggersList.addCentralTriggers(centralTriggerListResult.getTriggers());
return triggersList;
} catch (CentralClientException | SettingsTomlException e) {
String msg = "Operation 'ballerinaTrigger/triggers' failed!";
this.languageClient.logMessage(new MessageParams(MessageType.Error, msg));
return triggersList;
}
JsonObject triggersList = new JsonObject();
List<JsonObject> inBuiltTriggers = getInBuiltTriggers(request);
triggersList.add("central", new Gson().toJsonTree(inBuiltTriggers));
return triggersList;
});
}

Expand All @@ -159,9 +142,7 @@ public CompletableFuture<JsonObject> triggerNew(BallerinaTriggerRequest request)
return trigger.get();
}
}

Optional<JsonObject> trigger = getTriggerFromCentral(request);
return trigger.orElseGet(JsonObject::new);
return new JsonObject();
});
}

Expand All @@ -170,28 +151,7 @@ private static boolean expectsTriggerByName(BallerinaTriggerRequest request) {
}

private Optional<JsonObject> getTriggerByName(BallerinaTriggerRequest request) {
Optional<JsonObject> inBuiltTrigger = getInBuiltTriggerJson(request.getPackageName());
if (inBuiltTrigger.isPresent()) {
return inBuiltTrigger;
}

BallerinaTriggerListRequest triggerListRequest = new BallerinaTriggerListRequest();
triggerListRequest.setPackageName(request.getPackageName());
triggerListRequest.setOrganization(request.getOrgName());
BallerinaTriggerListResponse triggersList = new BallerinaTriggerListResponse();
try {
CentralTriggerListResult centralTriggerListResult = getCentralTriggerListResult(triggerListRequest);
triggersList.addCentralTriggers(centralTriggerListResult.getTriggers());
if (triggersList.getCentralTriggers().isEmpty()) {
return Optional.empty();
}
request.setId(triggersList.getCentralTriggers().get(0).id);
return getTriggerFromCentral(request);
} catch (CentralClientException | SettingsTomlException e) {
String msg = "Operation 'ballerinaTrigger/triggers' failed!";
this.languageClient.logMessage(new MessageParams(MessageType.Error, msg));
return Optional.empty();
}
return getInBuiltTriggerJson(request.getPackageName());
}

private static CentralTriggerListResult getCentralTriggerListResult(BallerinaTriggerListRequest triggerListRequest)
Expand All @@ -205,9 +165,7 @@ private static CentralTriggerListResult getCentralTriggerListResult(BallerinaTri
settings.getCentral().getCallTimeout(), settings.getCentral().getMaxRetries());
JsonElement triggerSearchResult = client.getTriggers(triggerListRequest.getQueryMap(),
"any", RepoUtils.getBallerinaVersion());
CentralTriggerListResult centralTriggerListResult = new Gson().fromJson(
triggerSearchResult.getAsString(), CentralTriggerListResult.class);
return centralTriggerListResult;
return new Gson().fromJson(triggerSearchResult.getAsString(), CentralTriggerListResult.class);
}

private Optional<JsonObject> getTriggerFromCentral(BallerinaTriggerRequest request) {
Expand Down Expand Up @@ -242,10 +200,10 @@ public String getName() {
return Constants.CAPABILITY_NAME;
}

private List<Trigger> getInBuiltTriggers(BallerinaTriggerListRequest request) {
private List<JsonObject> getInBuiltTriggers(BallerinaTriggerListRequest request) {
return inBuiltTriggers.values().stream()
.filter(inBuiltTrigger -> filterInBuiltTriggers(inBuiltTrigger, request))
.map(inBuiltTrigger -> getInBuiltTrigger(inBuiltTrigger.name()))
.map(inBuiltTrigger -> getInBuiltTriggerJson(inBuiltTrigger.name()))
.flatMap(Optional::stream)
.limit(request.getLimit() > 0 ? request.getLimit() : Long.MAX_VALUE)
.toList();
Expand All @@ -260,24 +218,6 @@ private boolean filterInBuiltTriggers(InBuiltTrigger inBuiltTrigger, BallerinaTr
.anyMatch(keyword -> keyword.contains(request.getQuery())));
}

private Optional<Trigger> getInBuiltTrigger(String triggerName) {
InputStream resourceStream = getClass().getClassLoader().getResourceAsStream(String.format("inbuilt-triggers/%s.json", triggerName));
if (resourceStream == null) {
String msg = String.format("Trigger info file not found for the trigger: %s", triggerName);
this.languageClient.logMessage(new MessageParams(MessageType.Error, msg));
return Optional.empty();
}

try (JsonReader reader = new JsonReader(new InputStreamReader(resourceStream, StandardCharsets.UTF_8))) {
return Optional.of(new Gson().fromJson(reader, Trigger.class));
} catch (IOException e) {
String msg = String.format("Error occurred while reading the trigger info file for the trigger: %s",
triggerName);
this.languageClient.logMessage(new MessageParams(MessageType.Error, msg));
return Optional.empty();
}
}

private Optional<JsonObject> getInBuiltTriggerJsonById(String triggerId) {
if (!inBuiltTriggers.containsKey(triggerId)) {
return Optional.empty();
Expand All @@ -287,7 +227,7 @@ private Optional<JsonObject> getInBuiltTriggerJsonById(String triggerId) {

private Optional<JsonObject> getInBuiltTriggerJson(String triggerName) {
if (inBuiltTriggers.values().stream()
.noneMatch(inBuiltTrigger -> inBuiltTrigger.packageName().equals(triggerName))) {
.noneMatch(inBuiltTrigger -> inBuiltTrigger.name().equals(triggerName))) {
return Optional.empty();
}
InputStream resourceStream = getClass().getClassLoader().getResourceAsStream(String.format("inbuilt-triggers/%s.json", triggerName));
Expand Down
Loading