/*
* This file is part of LibrePlan
*
* Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e
* Desenvolvemento Tecnolóxico de Galicia
* Copyright (C) 2010-2011 Igalia, S.L.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.libreplan.ws.common.api;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
/**
* DTO for modeling the list of constraint violations on a given instance.
*
* @author Fernando Bellas Permuy <fbellas@udc.es>
*/
public class InstanceConstraintViolationsDTO {
public static final String NUM_ITEM_ATTRIBUTE_NAME = "num-item";
public static final String CODE_ATTRIBUTE_NAME = IntegrationEntityDTO.CODE_ATTRIBUTE_NAME;
public static final String ENTITY_TYPE_ATTRIBUTE_NAME = "entity-type";
@Deprecated
public static final String INSTANCE_ID_ATTRIBUTE_NAME = "instance-id";
@Deprecated
@XmlAttribute(name=INSTANCE_ID_ATTRIBUTE_NAME)
public String instanceId;
@XmlAttribute(name=NUM_ITEM_ATTRIBUTE_NAME)
public Long numItem;
@XmlAttribute(name=CODE_ATTRIBUTE_NAME)
public String code;
@XmlAttribute(name=ENTITY_TYPE_ATTRIBUTE_NAME)
public String entityType;
@XmlElement(name="constraint-violation")
public List<ConstraintViolationDTO> constraintViolations;
@XmlElement(name="recoverable-error")
public RecoverableErrorDTO recoverableError;
@XmlElement(name="internal-error")
public InternalErrorDTO internalError;
public InstanceConstraintViolationsDTO() {}
@Deprecated
public InstanceConstraintViolationsDTO(String instanceId, List<ConstraintViolationDTO> constraintViolations) {
/* TODO resolve deprecated */
this.instanceId = instanceId;
this.constraintViolations = constraintViolations;
}
private InstanceConstraintViolationsDTO(InstanceConstraintViolationsDTOId instanceId) {
this.numItem = instanceId.getNumItem();
this.code = instanceId.getCode();
this.entityType = instanceId.getEntityType();
}
public InstanceConstraintViolationsDTO(
InstanceConstraintViolationsDTOId instanceId, List<ConstraintViolationDTO> constraintViolations) {
this(instanceId);
this.constraintViolations = constraintViolations;
}
public InstanceConstraintViolationsDTO(
InstanceConstraintViolationsDTOId instanceId, RecoverableErrorDTO recoverableError) {
this(instanceId);
this.recoverableError = recoverableError;
}
public InstanceConstraintViolationsDTO(InstanceConstraintViolationsDTOId instanceId, InternalErrorDTO internalError) {
this(instanceId);
this.internalError = internalError;
}
@Deprecated
public static InstanceConstraintViolationsDTO create(String instanceId, String message) {
List<ConstraintViolationDTO> constraintViolations = new ArrayList<>();
constraintViolations.add(new ConstraintViolationDTO(null, message));
/* TODO resolve deprecated */
return new InstanceConstraintViolationsDTO(instanceId, constraintViolations);
}
public static InstanceConstraintViolationsDTO create(InstanceConstraintViolationsDTOId instanceId, String message) {
List<ConstraintViolationDTO> constraintViolations = new ArrayList<>();
constraintViolations.add(new ConstraintViolationDTO(null, message));
return new InstanceConstraintViolationsDTO(instanceId, constraintViolations);
}
@Override
public String toString() {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
/* TODO resolve deprecated */
printWriter.println("** " + INSTANCE_ID_ATTRIBUTE_NAME + " = " + instanceId + " **");
printWriter.println("** " +
NUM_ITEM_ATTRIBUTE_NAME + " = " + numItem + " - " +
CODE_ATTRIBUTE_NAME + " = " + code + " - " +
ENTITY_TYPE_ATTRIBUTE_NAME + " = " + entityType +
" **");
if (internalError != null) {
printWriter.println("Internal error:");
printWriter.println(internalError);
} else if (constraintViolations != null) {
printWriter.println("Constraint violations:");
for (ConstraintViolationDTO i : constraintViolations) {
printWriter.println(i);
}
} else if (recoverableError != null) {
printWriter.println("Recoverable error:");
printWriter.println(recoverableError);
}
printWriter.close();
return stringWriter.toString();
}
}