/*******************************************************************************
* 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.plugin.maven.client.service;
import com.google.gwt.http.client.Response;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.commons.exception.UnmarshallerException;
import org.eclipse.che.ide.ext.java.shared.dto.Problem;
import org.eclipse.che.ide.rest.AsyncRequestCallback;
import org.eclipse.che.ide.rest.AsyncRequestFactory;
import org.eclipse.che.ide.rest.DtoUnmarshallerFactory;
import org.eclipse.che.ide.rest.StringUnmarshaller;
import org.eclipse.che.ide.rest.Unmarshallable;
import org.eclipse.che.ide.ui.loaders.request.LoaderFactory;
import org.eclipse.che.ide.util.loging.Log;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* Implementation for {@link MavenServerServiceClient}.
*
* @author Valeriy Svydenko
*/
@Singleton
public class MavenServerServiceClientImpl implements MavenServerServiceClient {
private final String servicePath;
private final AppContext appContext;
private final LoaderFactory loaderFactory;
private final AsyncRequestFactory asyncRequestFactory;
private final DtoUnmarshallerFactory dtoUnmarshallerFactory;
@Inject
public MavenServerServiceClientImpl(AppContext appContext,
LoaderFactory loaderFactory,
AsyncRequestFactory asyncRequestFactory,
DtoUnmarshallerFactory dtoUnmarshallerFactory) {
this.appContext = appContext;
this.loaderFactory = loaderFactory;
this.asyncRequestFactory = asyncRequestFactory;
this.dtoUnmarshallerFactory = dtoUnmarshallerFactory;
this.servicePath = "/maven/server/";
}
@Override
public Promise<String> getEffectivePom(String projectPath) {
final String url = appContext.getDevMachine().getWsAgentBaseUrl() + servicePath + "effective/pom?projectpath=" + projectPath;
return asyncRequestFactory.createGetRequest(url)
.loader(loaderFactory.newLoader("Generating effective pom..."))
.send(new StringUnmarshaller());
}
@Override
public Promise<Boolean> downloadSources(String projectPath, String fqn) {
final String url = appContext.getDevMachine().getWsAgentBaseUrl() + servicePath +
"download/sources?projectpath=" + projectPath +"&fqn=" + fqn;
return asyncRequestFactory.createGetRequest(url)
.loader(loaderFactory.newLoader("Generating effective pom..."))
.send(new Unmarshallable<Boolean>() {
private boolean downloaded;
@Override
public void unmarshal(Response response) throws UnmarshallerException {
downloaded = Boolean.valueOf(response.getText());
}
@Override
public Boolean getPayload() {
return downloaded;
}
});
}
@Override
public Promise<Void> reImportProjects(@NotNull List<String> projectsPaths) {
StringBuilder queryParameters = new StringBuilder();
for (String path : projectsPaths) {
queryParameters.append("&projectPath=").append(path);
}
final String url = appContext.getDevMachine().getWsAgentBaseUrl() + servicePath + "reimport" +
queryParameters.toString().replaceFirst("&", "?");
return asyncRequestFactory.createPostRequest(url, null).send();
}
@Override
public Promise<List<Problem>> reconcilePom(String pomPath) {
final String url = appContext.getDevMachine().getWsAgentBaseUrl() + servicePath + "pom/reconcile?pompath=" + pomPath;
Unmarshallable<List<Problem>> unmarshallable = dtoUnmarshallerFactory.newListUnmarshaller(Problem.class);
return asyncRequestFactory.createGetRequest(url)
.send(unmarshallable);
}
}