package org.netmelody.cieye.server.response.responder; import java.io.IOException; import org.netmelody.cieye.core.domain.Feature; import org.netmelody.cieye.core.domain.Landscape; import org.netmelody.cieye.core.domain.TargetId; import org.netmelody.cieye.core.logging.LogKeeper; import org.netmelody.cieye.core.logging.Logbook; import org.netmelody.cieye.server.CiSpyIntermediary; import org.netmelody.cieye.server.response.CiEyeResponder; import org.netmelody.cieye.server.response.CiEyeResponse; import org.netmelody.cieye.server.response.RequestOriginTracker; import org.simpleframework.http.Request; public final class TargetNotationHandler implements CiEyeResponder { private static final Logbook LOG = LogKeeper.logbookFor(TargetNotationHandler.class); private final RequestOriginTracker tracker; private final Landscape landscape; private final CiSpyIntermediary spyIntermediary; public TargetNotationHandler(Landscape landscape, CiSpyIntermediary spyIntermediary, RequestOriginTracker tracker) { this.landscape = landscape; this.spyIntermediary = spyIntermediary; this.tracker = tracker; } private void makeNote(final TargetId targetId, final String note) { if (targetId.id() == null || targetId.id().isEmpty()) { return; } for (Feature feature : landscape.features()) { if (spyIntermediary.passNoteOn(feature, targetId, note)) { return; } LOG.error("Failed to handle request to note target " + targetId.id()); } } @Override public CiEyeResponse respond(Request request) throws IOException { try { final String targetId = request.getForm().get("id"); final String note = request.getForm().get("note") + " by " + tracker.originOf(request); makeNote(new TargetId(targetId), note); } catch (Exception e) { LOG.error("Failed to handle request to note a build", e); } return CiEyeResponse.withJson(""); } }