/*******************************************************************************
* 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.api.factory.server;
import org.eclipse.che.api.core.model.user.User;
import org.eclipse.che.api.factory.shared.dto.AuthorDto;
import org.eclipse.che.api.factory.shared.dto.ButtonAttributesDto;
import org.eclipse.che.api.factory.shared.dto.ButtonDto;
import org.eclipse.che.api.factory.shared.dto.FactoryDto;
import org.eclipse.che.api.factory.shared.dto.IdeActionDto;
import org.eclipse.che.api.factory.shared.dto.IdeDto;
import org.eclipse.che.api.factory.shared.dto.OnAppClosedDto;
import org.eclipse.che.api.factory.shared.dto.OnAppLoadedDto;
import org.eclipse.che.api.factory.shared.dto.OnProjectsLoadedDto;
import org.eclipse.che.api.factory.shared.dto.PoliciesDto;
import org.eclipse.che.api.core.model.factory.Action;
import org.eclipse.che.api.core.model.factory.Author;
import org.eclipse.che.api.core.model.factory.Button;
import org.eclipse.che.api.core.model.factory.ButtonAttributes;
import org.eclipse.che.api.core.model.factory.Factory;
import org.eclipse.che.api.core.model.factory.Ide;
import org.eclipse.che.api.core.model.factory.OnAppClosed;
import org.eclipse.che.api.core.model.factory.OnAppLoaded;
import org.eclipse.che.api.core.model.factory.OnProjectsLoaded;
import org.eclipse.che.api.core.model.factory.Policies;
import java.util.List;
import static java.util.stream.Collectors.toList;
import static org.eclipse.che.dto.server.DtoFactory.newDto;
/**
* Helps to convert to DTOs related to factory.
*
* @author Anton Korneta
*/
public final class DtoConverter {
public static FactoryDto asDto(Factory factory, User user) {
final FactoryDto factoryDto = newDto(FactoryDto.class).withId(factory.getId())
.withName(factory.getName())
.withV(factory.getV());
if (factory.getWorkspace() != null) {
factoryDto.withWorkspace(org.eclipse.che.api.workspace.server.DtoConverter.asDto(factory.getWorkspace()));
}
if (factory.getCreator() != null) {
factoryDto.withCreator(asDto(factory.getCreator(), user));
}
if (factory.getIde() != null) {
factoryDto.withIde(asDto(factory.getIde()));
}
if (factory.getPolicies() != null) {
factoryDto.withPolicies(asDto(factory.getPolicies()));
}
if (factory.getButton() != null) {
factoryDto.withButton(asDto(factory.getButton()));
}
return factoryDto;
}
public static IdeDto asDto(Ide ide) {
final IdeDto ideDto = newDto(IdeDto.class);
final OnAppClosed onAppClosed = ide.getOnAppClosed();
final OnAppLoaded onAppLoaded = ide.getOnAppLoaded();
final OnProjectsLoaded onProjectsLoaded = ide.getOnProjectsLoaded();
if (onAppClosed != null) {
ideDto.withOnAppClosed(newDto(OnAppClosedDto.class).withActions(asDto(onAppClosed.getActions())));
}
if (onAppLoaded != null) {
ideDto.withOnAppLoaded(newDto(OnAppLoadedDto.class).withActions(asDto(onAppLoaded.getActions())));
}
if (onProjectsLoaded != null) {
ideDto.withOnProjectsLoaded(newDto(OnProjectsLoadedDto.class).withActions(asDto(onProjectsLoaded.getActions())));
}
return ideDto;
}
public static AuthorDto asDto(Author author, User user) {
return newDto(AuthorDto.class).withUserId(author.getUserId())
.withName(user.getName())
.withEmail(user.getEmail())
.withCreated(author.getCreated());
}
public static IdeActionDto asDto(Action action) {
return newDto(IdeActionDto.class).withId(action.getId())
.withProperties(action.getProperties());
}
public static List<IdeActionDto> asDto(List<? extends Action> actions) {
return actions.stream().map(DtoConverter::asDto).collect(toList());
}
public static PoliciesDto asDto(Policies policies) {
return newDto(PoliciesDto.class).withCreate(policies.getCreate())
.withReferer(policies.getReferer())
.withSince(policies.getSince())
.withUntil(policies.getUntil());
}
public static ButtonDto asDto(Button button) {
final ButtonDto buttonDto = newDto(ButtonDto.class);
if (button.getAttributes() != null) {
buttonDto.withAttributes(asDto(button.getAttributes()));
}
if (button.getType() != null) {
buttonDto.withType(button.getType());
}
return buttonDto;
}
public static ButtonAttributesDto asDto(ButtonAttributes attributes) {
return newDto(ButtonAttributesDto.class).withColor(attributes.getColor())
.withCounter(attributes.getCounter())
.withLogo(attributes.getLogo())
.withStyle(attributes.getStyle());
}
private DtoConverter() {}
}