/*******************************************************************************
* Copyright (c) 2012-2015 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.api.builder;
import org.eclipse.che.api.builder.internal.Constants;
import org.eclipse.che.api.builder.dto.BuilderDescriptor;
import org.eclipse.che.api.builder.dto.ServerState;
import org.eclipse.che.api.core.ConflictException;
import org.eclipse.che.api.core.ForbiddenException;
import org.eclipse.che.api.core.NotFoundException;
import org.eclipse.che.api.core.ServerException;
import org.eclipse.che.api.core.UnauthorizedException;
import org.eclipse.che.api.core.rest.HttpJsonHelper;
import org.eclipse.che.api.core.rest.RemoteServiceDescriptor;
import org.eclipse.che.api.core.rest.shared.dto.Link;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
/**
* Factory for RemoteBuilder. See {@link RemoteBuilder} about usage of this class.
*
* @author andrew00x
* @see RemoteBuilder
*/
public class RemoteBuilderServer extends RemoteServiceDescriptor {
/** Name of IDE workspace this server used for. */
private String assignedWorkspace;
/** Name of project inside IDE workspace this server used for. */
private String assignedProject;
public RemoteBuilderServer(String baseUrl) {
super(baseUrl);
}
public String getAssignedWorkspace() {
return assignedWorkspace;
}
public void setAssignedWorkspace(String assignedWorkspace) {
this.assignedWorkspace = assignedWorkspace;
}
public String getAssignedProject() {
return assignedProject;
}
public void setAssignedProject(String assignedProject) {
this.assignedProject = assignedProject;
}
public boolean isDedicated() {
return assignedWorkspace != null;
}
public RemoteBuilder getRemoteBuilder(String name) throws BuilderException {
for (BuilderDescriptor builderDescriptor : getBuilderDescriptors()) {
if (name.equals(builderDescriptor.getName())) {
return createRemoteBuilder(builderDescriptor);
}
}
throw new BuilderException(String.format("Invalid builder name %s", name));
}
public List<RemoteBuilder> getRemoteBuilders() throws BuilderException {
List<RemoteBuilder> remoteBuilders = new LinkedList<>();
for (BuilderDescriptor builderDescriptor : getBuilderDescriptors()) {
remoteBuilders.add(createRemoteBuilder(builderDescriptor));
}
return remoteBuilders;
}
private RemoteBuilder createRemoteBuilder(BuilderDescriptor descriptor) throws BuilderException {
try {
return new RemoteBuilder(baseUrl, descriptor, getLinks());
} catch (IOException e) {
throw new BuilderException(e);
} catch (ServerException e) {
throw new BuilderException(e.getServiceError());
}
}
public List<BuilderDescriptor> getBuilderDescriptors() throws BuilderException {
try {
final Link link = getLink(Constants.LINK_REL_AVAILABLE_BUILDERS);
if (link == null) {
throw new BuilderException("Unable get URL for retrieving list of remote builders");
}
return HttpJsonHelper.requestArray(BuilderDescriptor.class, link);
} catch (IOException e) {
throw new BuilderException(e);
} catch (ServerException | UnauthorizedException | ForbiddenException | NotFoundException | ConflictException e) {
throw new BuilderException(e.getServiceError());
}
}
public ServerState getServerState() throws BuilderException {
try {
final Link stateLink = getLink(Constants.LINK_REL_SERVER_STATE);
if (stateLink == null) {
throw new BuilderException(String.format("Unable get URL for getting state of a remote server '%s'", baseUrl));
}
return HttpJsonHelper.request(ServerState.class, 10000, stateLink);
} catch (IOException e) {
throw new BuilderException(e);
} catch (ServerException | UnauthorizedException | ForbiddenException | NotFoundException | ConflictException e) {
throw new BuilderException(e.getServiceError());
}
}
}