package com.perforce.hws.plugin.perforce.routes;
import com.perforce.hws.core.p4base.HasGson;
import com.perforce.hws.core.p4base.P4Methods;
import com.perforce.hws.core.p4base.ResultMap;
import com.perforce.hws.core.p4base.ResultMapMethods;
import com.perforce.hws.core.sessions.SessionData;
import com.perforce.hws.route.StreamRoute;
import com.perforce.hws.route.UsesJsonRequests;
import com.perforce.hws.utils.HWSSettings;
import com.perforce.hws.utils.ModelConversion;
import com.perforce.hws.utils.UsesServerHandles;
import com.perforce.p4client.models.StreamCommand;
/**
* PATCH /p4/:api/streams/*
*/
public class PerforceUpdateStreamRoute implements
spark.Route,
P4Methods,
ModelConversion,
ResultMapMethods,
HasGson,
StreamRoute,
UsesJsonRequests,
UsesServerHandles {
@Override
public Object handle(spark.Request request, spark.Response response) throws Exception {
SessionData sessionData = request.attribute("sessionData");
HWSSettings settings = request.attribute("settings");
String server = request.params("server");
String stream = getStream(request);
return withServerHandle(server, sessionData, settings, serverHandle -> {
StreamCommand updateCommand = readModel(request, StreamCommand.class);
java.util.Map<String, Object> updates = toRequestMap(updateCommand);
java.util.List<ResultMap> results = exec(serverHandle, "stream", "-o", stream);
ResultMap resultMap = firstResultOrFail(results);
java.util.function.Supplier<String> offsetSupplier = offsetSupplier(serverHandle);
java.util.Map<String, Object> current = toRequestMap(toStreamCommand(resultMap, offsetSupplier));
current.putAll(updates);
return toCommandResponse(execInput(serverHandle, current, "stream", "-i"));
});
}
}