/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.api.event.ng; import com.google.gwt.user.client.rpc.AsyncCallback; import org.eclipse.che.api.core.jsonrpc.commons.JsonRpcPromise; import org.eclipse.che.api.core.jsonrpc.commons.RequestTransmitter; import org.eclipse.che.api.project.shared.dto.event.FileTrackingOperationDto; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.promises.client.PromiseProvider; import org.eclipse.che.ide.dto.DtoFactory; import javax.inject.Inject; import javax.inject.Singleton; import static org.eclipse.che.api.project.shared.dto.event.FileTrackingOperationDto.Type.MOVE; import static org.eclipse.che.api.project.shared.dto.event.FileTrackingOperationDto.Type.RESUME; import static org.eclipse.che.api.project.shared.dto.event.FileTrackingOperationDto.Type.START; import static org.eclipse.che.api.project.shared.dto.event.FileTrackingOperationDto.Type.STOP; import static org.eclipse.che.api.project.shared.dto.event.FileTrackingOperationDto.Type.SUSPEND; /** * @author Roman Nikitenko */ @Singleton public class ClientServerEventServiceImpl implements ClientServerEventService { private static final String ENDPOINT_ID = "ws-agent"; private static final String OUTCOMING_METHOD = "track:editor-file"; private final DtoFactory dtoFactory; private final RequestTransmitter requestTransmitter; private final PromiseProvider promises; @Inject public ClientServerEventServiceImpl(DtoFactory dtoFactory, RequestTransmitter requestTransmitter, PromiseProvider promises) { this.dtoFactory = dtoFactory; this.requestTransmitter = requestTransmitter; this.promises = promises; } @Override public Promise<Void> sendFileTrackingStartEvent(String path) { return transmit(path, "", START); } @Override public Promise<Void> sendFileTrackingStopEvent(String path) { return transmit(path, "", STOP); } @Override public Promise<Void> sendFileTrackingSuspendEvent() { return transmit("", "", SUSPEND); } @Override public Promise<Void> sendFileTrackingResumeEvent() { return transmit("", "", RESUME); } @Override public Promise<Void> sendFileTrackingMoveEvent(String oldPath, String newPath) { return transmit(oldPath, newPath, MOVE); } private Promise<Void> transmit(String path, String oldPath, FileTrackingOperationDto.Type type) { final FileTrackingOperationDto dto = dtoFactory.createDto(FileTrackingOperationDto.class) .withPath(path) .withType(type) .withOldPath(oldPath); return promises.create((AsyncCallback<Void> callback) -> { JsonRpcPromise<Void> jsonRpcPromise = requestTransmitter.newRequest() .endpointId(ENDPOINT_ID) .methodName(OUTCOMING_METHOD) .paramsAsDto(dto) .sendAndReceiveResultAsEmpty(); jsonRpcPromise.onSuccess(aVoid -> { callback.onSuccess(null); }); jsonRpcPromise.onFailure(jsonRpcError -> { callback.onFailure(new Throwable(jsonRpcError.getMessage())); }); }); } }