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 com.google.gwt.core.client.JavaScriptObject;
import org.sigmah.server.domain.element.ContactListElement;
import org.sigmah.shared.dto.element.CheckboxElementDTO;
import org.sigmah.shared.dto.element.ComputationElementDTO;
import org.sigmah.shared.dto.element.ContactListElementDTO;
import org.sigmah.shared.dto.element.CoreVersionElementDTO;
import org.sigmah.shared.dto.element.DefaultFlexibleElementDTO;
import org.sigmah.shared.dto.element.FilesListElementDTO;
import org.sigmah.shared.dto.element.FlexibleElementDTO;
import org.sigmah.shared.dto.element.IndicatorsListElementDTO;
import org.sigmah.shared.dto.element.MessageElementDTO;
import org.sigmah.shared.dto.element.QuestionElementDTO;
import org.sigmah.shared.dto.element.ReportElementDTO;
import org.sigmah.shared.dto.element.ReportListElementDTO;
import org.sigmah.shared.dto.element.TextAreaElementDTO;
import org.sigmah.shared.dto.element.TripletsListElementDTO;
import org.sigmah.shared.dto.layout.LayoutConstraintDTO;
import org.sigmah.shared.dto.layout.LayoutGroupDTO;
import org.sigmah.shared.dto.profile.PrivacyGroupDTO;
import org.sigmah.shared.dto.referential.ElementTypeEnum;
/**
* Parent class for the JavaScript version of the flexible elements.
*
* @author Raphaƫl Calabro (rcalabro@ideia.fr)
*/
public abstract class FlexibleElementJS extends JavaScriptObject {
protected FlexibleElementJS() {
}
public static FlexibleElementJS toJavaScript(FlexibleElementDTO flexibleElementDTO) {
final FlexibleElementJS flexibleElementJS;
switch(flexibleElementDTO.getElementType()) {
case CHECKBOX:
flexibleElementJS = CheckboxElementJS.toJavaScript((CheckboxElementDTO)flexibleElementDTO);
break;
case COMPUTATION:
flexibleElementJS = ComputationElementJS.toJavaScript((ComputationElementDTO)flexibleElementDTO);
break;
case CONTACT_LIST:
flexibleElementJS = ContactListElementJS.toJavaScript((ContactListElementDTO)flexibleElementDTO);
break;
case CORE_VERSION:
flexibleElementJS = Values.createJavaScriptObject(FlexibleElementJS.class);
break;
case DEFAULT:
flexibleElementJS = DefaultFlexibleElementJS.toJavaScript((DefaultFlexibleElementDTO)flexibleElementDTO);
break;
case FILES_LIST:
flexibleElementJS = FilesListElementJS.toJavaScript((FilesListElementDTO)flexibleElementDTO);
break;
case INDICATORS:
flexibleElementJS = Values.createJavaScriptObject(FlexibleElementJS.class);
break;
case MESSAGE:
flexibleElementJS = MessageElementJS.toJavaScript((MessageElementDTO)flexibleElementDTO);
break;
case QUESTION:
flexibleElementJS = QuestionElementJS.toJavaScript((QuestionElementDTO)flexibleElementDTO);
break;
case REPORT:
flexibleElementJS = ReportElementJS.toJavaScript((ReportElementDTO)flexibleElementDTO);
break;
case REPORT_LIST:
flexibleElementJS = ReportListElementJS.toJavaScript((ReportListElementDTO)flexibleElementDTO);
break;
case TEXT_AREA:
flexibleElementJS = TextAreaElementJS.toJavaScript((TextAreaElementDTO)flexibleElementDTO);
break;
case TRIPLETS:
flexibleElementJS = TripletsListElementJS.toJavaScript((TripletsListElementDTO)flexibleElementDTO);
break;
default:
throw new UnsupportedOperationException("Given flexible element type is not supported yet: " + flexibleElementDTO.getElementType());
}
flexibleElementJS.setId(flexibleElementDTO.getId());
flexibleElementJS.setElementType(flexibleElementDTO.getElementType());
flexibleElementJS.setLabel(flexibleElementDTO.getLabel());
flexibleElementJS.setCode(flexibleElementDTO.getCode());
flexibleElementJS.setValidates(flexibleElementDTO.getValidates());
// flexibleElementJS.setFilledIn(flexibleElementDTO.isFilledIn());
flexibleElementJS.setAmendable(flexibleElementDTO.getAmendable());
flexibleElementJS.setExportable(flexibleElementDTO.getExportable());
flexibleElementJS.setGloballyExportable(flexibleElementDTO.getGloballyExportable());
flexibleElementJS.setHistorable(flexibleElementDTO.isHistorable());
flexibleElementJS.setPrivacyGroup(flexibleElementDTO.getPrivacyGroup());
flexibleElementJS.setGroup(flexibleElementDTO.getGroup());
flexibleElementJS.setConstraint(flexibleElementDTO.getConstraint());
flexibleElementJS.setBannerConstraint(flexibleElementDTO.getBannerConstraint());
return flexibleElementJS;
}
public final FlexibleElementDTO toDTO() {
final FlexibleElementDTO flexibleElementDTO;
switch(getElementTypeEnum()) {
case CHECKBOX:
flexibleElementDTO = ((CheckboxElementJS)this).toCheckboxElementDTO();
break;
case COMPUTATION:
flexibleElementDTO = ((ComputationElementJS)this).toComputationElementDTO();
break;
case CONTACT_LIST:
flexibleElementDTO = ((ContactListElementJS)this).toContactListElementDTO();
break;
case CORE_VERSION:
flexibleElementDTO = new CoreVersionElementDTO();
break;
case DEFAULT:
flexibleElementDTO = ((DefaultFlexibleElementJS)this).toDefaultFlexibleElementDTO();
break;
case FILES_LIST:
flexibleElementDTO = ((FilesListElementJS)this).toFilesListElementDTO();
break;
case INDICATORS:
flexibleElementDTO = new IndicatorsListElementDTO();
break;
case MESSAGE:
flexibleElementDTO = ((MessageElementJS)this).toMessageElementDTO();
break;
case QUESTION:
flexibleElementDTO = ((QuestionElementJS)this).toQuestionElementDTO();
break;
case REPORT:
flexibleElementDTO = ((ReportElementJS)this).toReportElementDTO();
break;
case REPORT_LIST:
flexibleElementDTO = ((ReportListElementJS)this).toReportListElementDTO();
break;
case TEXT_AREA:
flexibleElementDTO = ((TextAreaElementJS)this).toTextAreaElementDTO();
break;
case TRIPLETS:
flexibleElementDTO = ((TripletsListElementJS)this).toTripletsListElementDTO();
break;
default:
throw new UnsupportedOperationException("Given flexible element type is not supported yet: " + getElementType());
}
flexibleElementDTO.setId(getId());
flexibleElementDTO.setLabel(getLabel());
flexibleElementDTO.setCode(getCode());
flexibleElementDTO.setValidates(isValidates());
// dto.setFilledIn(isFilledIn());
flexibleElementDTO.setAmendable(isAmendable());
flexibleElementDTO.setExportable(isExportable());
flexibleElementDTO.setGloballyExportable(isGloballyExportable());
flexibleElementDTO.setHistorable(isHistorable());
flexibleElementDTO.setPrivacyGroup(getPrivacyGroupDTO());
return flexibleElementDTO;
}
public final native int getId() /*-{
return this.id;
}-*/;
public final native void setId(int id) /*-{
this.id = id;
}-*/;
public final native String getLabel() /*-{
return this.label;
}-*/;
public final native void setLabel(String label) /*-{
this.label = label;
}-*/;
public final native String getCode() /*-{
return this.code;
}-*/;
public final native void setCode(String code) /*-{
this.code = code;
}-*/;
public final native boolean isValidates() /*-{
return this.validates;
}-*/;
public final native void setValidates(boolean validates) /*-{
this.validates = validates;
}-*/;
public final native boolean isFilledIn() /*-{
return this.filledIn;
}-*/;
public final native void setFilledIn(boolean filledIn) /*-{
this.filledIn = filledIn;
}-*/;
public final native boolean isAmendable() /*-{
return this.amendable;
}-*/;
public final native void setAmendable(boolean amendable) /*-{
this.amendable = amendable;
}-*/;
public final native boolean isExportable() /*-{
return this.exportable;
}-*/;
public final native void setExportable(boolean exportable) /*-{
this.exportable = exportable;
}-*/;
public final native boolean isGloballyExportable() /*-{
return this.globallyExportable;
}-*/;
public final native void setGloballyExportable(boolean globallyExportable) /*-{
this.globallyExportable = globallyExportable;
}-*/;
public final native boolean isHistorable() /*-{
return this.historable;
}-*/;
public final native void setHistorable(boolean historable) /*-{
this.historable = historable;
}-*/;
public final native PrivacyGroupJS getPrivacyGroup() /*-{
return this.privacyGroup;
}-*/;
public final native void setPrivacyGroup(PrivacyGroupJS privacyGroup) /*-{
this.privacyGroup = privacyGroup;
}-*/;
public final PrivacyGroupDTO getPrivacyGroupDTO() {
if(getPrivacyGroup() != null) {
return getPrivacyGroup().toDTO();
}
return null;
}
public final void setPrivacyGroup(PrivacyGroupDTO privacyGroup) {
if(privacyGroup != null) {
setPrivacyGroup(PrivacyGroupJS.toJavaScript(privacyGroup));
}
}
public final native String getElementType() /*-{
return this.elementType;
}-*/;
public final void setElementType(ElementTypeEnum elementType) {
if(elementType != null) {
setElementType(elementType.name());
}
}
public final native void setElementType(String elementType) /*-{
this.elementType = elementType;
}-*/;
public final ElementTypeEnum getElementTypeEnum() {
if(getElementType() != null) {
return ElementTypeEnum.valueOf(getElementType());
} else {
return null;
}
}
public final native int getGroup() /*-{
return this.group;
}-*/;
public final void setGroup(LayoutGroupDTO group) {
if(group != null) {
setGroup(group.getId());
}
}
public final native void setGroup(int group) /*-{
this.group = group;
}-*/;
public final Integer getConstraint() {
return Values.getInteger(this, "constraint");
}
public final void setConstraint(LayoutConstraintDTO constraint) {
if(constraint != null) {
Values.setInteger(this, "constraint", constraint.getId());
}
}
public final Integer getBannerConstraint() {
return Values.getInteger(this, "bannerConstraint");
}
public final void setBannerConstraint(LayoutConstraintDTO constraint) {
if(constraint != null) {
Values.setInteger(this, "bannerConstraint", constraint.getId());
}
}
}