package org.sigmah.offline.js;
/*
* #%L
* Sigmah
* %%
* Copyright (C) 2010 - 2016 URD
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import java.util.ArrayList;
import java.util.List;
import org.sigmah.shared.dto.PhaseModelDTO;
import org.sigmah.shared.dto.ProjectBannerDTO;
import org.sigmah.shared.dto.ProjectDetailsDTO;
import org.sigmah.shared.dto.ProjectModelDTO;
import org.sigmah.shared.dto.ProjectModelVisibilityDTO;
import org.sigmah.shared.dto.logframe.LogFrameModelDTO;
import org.sigmah.shared.dto.referential.ProjectModelStatus;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.core.client.JsArrayInteger;
/**
* JavaScript version of <code>ProjectModelDTO</code>.
*
* @author Raphaƫl Calabro (rcalabro@ideia.fr)
*/
public final class ProjectModelJS extends JavaScriptObject {
/**
* Empty protected constructor. Required for subclasses of JavaScriptObject.
*/
protected ProjectModelJS() {
// Empty.
}
public static ProjectModelJS toJavaScript(final ProjectModelDTO projectModelDTO) {
return toJavaScript(projectModelDTO, false);
}
public static ProjectModelJS toJavaScript(final ProjectModelDTO projectModelDTO, boolean includePhases) {
final ProjectModelJS projectModelJS = Values.createJavaScriptObject(ProjectModelJS.class);
projectModelJS.setId(projectModelDTO.getId());
projectModelJS.setName(projectModelDTO.getName());
projectModelJS.setRootPhaseModel(projectModelDTO.getRootPhaseModel());
if (!includePhases) {
projectModelJS.setPhaseModels(projectModelDTO.getPhaseModels());
} else {
projectModelJS.setPhaseModelDTOs(projectModelDTO.getPhaseModels());
}
projectModelJS.setProjectBanner(projectModelDTO.getProjectBanner());
projectModelJS.setProjectDetails(projectModelDTO.getProjectDetails());
projectModelJS.setVisibilities(projectModelDTO.getVisibilities());
projectModelJS.setLogFrameModel(projectModelDTO.getLogFrameModel());
projectModelJS.setStatus(projectModelDTO.getStatus());
projectModelJS.setUnderMaintenance(projectModelDTO.isUnderMaintenance());
return projectModelJS;
}
public ProjectModelDTO toDTO() {
final ProjectModelDTO projectModelDTO = new ProjectModelDTO();
projectModelDTO.setId(getId());
projectModelDTO.setName(getName());
projectModelDTO.setPhaseModels(getPhaseModelDTOs());
if (getProjectBanner() != null) {
final ProjectBannerDTO projectBannerDTO = getProjectBanner().toDTO();
projectBannerDTO.setProjectModelDTO(projectModelDTO);
projectModelDTO.setProjectBanner(projectBannerDTO);
}
if (getProjectDetails() != null) {
final ProjectDetailsDTO projectDetailsDTO = getProjectDetails().toDTO();
projectDetailsDTO.setProjectModel(projectModelDTO);
projectModelDTO.setProjectDetails(projectDetailsDTO);
}
final JsArray<ProjectModelVisibilityJS> visibilities = getVisibilities();
if (visibilities != null) {
final ArrayList<ProjectModelVisibilityDTO> dtos = new ArrayList<ProjectModelVisibilityDTO>();
for(int index = 0; index < visibilities.length(); index++) {
dtos.add(visibilities.get(index).toDTO());
}
projectModelDTO.setVisibilities(dtos);
}
final String status = getStatus();
if (status != null) {
projectModelDTO.setStatus(ProjectModelStatus.valueOf(status));
}
projectModelDTO.setUnderMaintenance(isUnderMaintenance());
return projectModelDTO;
}
public native int getId() /*-{
return this.id;
}-*/;
public native void setId(int id) /*-{
this.id = id;
}-*/;
public native String getName() /*-{
return this.name;
}-*/;
public native void setName(String name) /*-{
this.name = name;
}-*/;
public native int getRootPhaseModel() /*-{
return this.rootPhaseModel;
}-*/;
public void setRootPhaseModel(PhaseModelDTO rootPhaseModel) {
if (rootPhaseModel != null) {
setRootPhaseModel(rootPhaseModel.getId());
}
}
public native void setRootPhaseModel(int rootPhaseModel) /*-{
this.rootPhaseModel = rootPhaseModel;
}-*/;
public native JsArrayInteger getPhaseModels() /*-{
return this.phaseModels;
}-*/;
public void setPhaseModels(final List<PhaseModelDTO> phaseModels) {
Values.setArrayOfIdentifiers(this, ProjectModelDTO.PHASE_MODELS, phaseModels);
}
public List<PhaseModelDTO> getPhaseModelDTOs() {
final List<PhaseModelDTO> dtos;
if (Values.isObject(this, ProjectModelDTO.PHASE_MODELS)) {
final JsArray<PhaseModelJS> phaseModels = Values.getJavaScriptObject(this, ProjectModelDTO.PHASE_MODELS);
dtos = new ArrayList<PhaseModelDTO>();
for(int index = 0; index < phaseModels.length(); index++) {
dtos.add(phaseModels.get(index).toDTO());
}
} else {
dtos = null;
}
return dtos;
}
public void setPhaseModelDTOs(final List<PhaseModelDTO> phaseModels) {
if (phaseModels != null) {
final JsArray<PhaseModelJS> models = Values.createTypedJavaScriptArray(PhaseModelJS.class);
for (final PhaseModelDTO phaseModel : phaseModels) {
models.push(PhaseModelJS.toJavaScript(phaseModel));
}
Values.setJavaScriptObject(this, ProjectModelDTO.PHASE_MODELS, models);
}
}
public native ProjectBannerJS getProjectBanner() /*-{
return this.projectBanner;
}-*/;
public void setProjectBanner(ProjectBannerDTO projectBanner) {
if (projectBanner != null) {
setProjectBanner(ProjectBannerJS.toJavaScript(projectBanner));
}
}
public native void setProjectBanner(ProjectBannerJS projectBanner) /*-{
this.projectBanner = projectBanner;
}-*/;
public native ProjectDetailsJS getProjectDetails() /*-{
return this.projectDetails;
}-*/;
public void setProjectDetails(ProjectDetailsDTO projectDetails) {
if (projectDetails != null) {
setProjectDetails(ProjectDetailsJS.toJavaScript(projectDetails));
}
}
public native void setProjectDetails(ProjectDetailsJS projectDetails) /*-{
this.projectDetails = projectDetails;
}-*/;
public native JsArray<ProjectModelVisibilityJS> getVisibilities() /*-{
return this.visibilities;
}-*/;
public void setVisibilities(List<ProjectModelVisibilityDTO> visibilities) {
if (visibilities != null) {
final JsArray<ProjectModelVisibilityJS> array = (JsArray<ProjectModelVisibilityJS>) JavaScriptObject.createArray();
for(final ProjectModelVisibilityDTO visibility : visibilities) {
array.push(ProjectModelVisibilityJS.toJavaScript(visibility));
}
setVisibilities(array);
}
}
public native void setVisibilities(JsArray<ProjectModelVisibilityJS> visibilities) /*-{
this.visibilities = visibilities;
}-*/;
public Integer getLogFrameModel() {
return Values.getInteger(this, "logFrameModel");
}
public void setLogFrameModel(LogFrameModelDTO logFrameModel) {
if (logFrameModel != null) {
Values.setInteger(this, "logFrameModel", logFrameModel.getId());
}
}
public native String getStatus() /*-{
return this.status;
}-*/;
public void setStatus(ProjectModelStatus status) {
if (status != null) {
setStatus(status.name());
}
}
public native void setStatus(String status) /*-{
this.status = status;
}-*/;
public native boolean isUnderMaintenance() /*-{
return this.underMaintenance;
}-*/;
public native void setUnderMaintenance(boolean underMaintenance) /*-{
this.underMaintenance = underMaintenance;
}-*/;
}