package ru.hflabs.rcd.model.notification; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import ru.hflabs.rcd.model.Named; import ru.hflabs.rcd.model.annotation.Hashed; import ru.hflabs.rcd.model.annotation.Indexed; import ru.hflabs.rcd.model.document.DocumentTemplate; import ru.hflabs.util.core.date.DateUtil; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.util.Date; /** * Класс <class>Notification</class> содержит информацию об оповещении * * @see NotifyType * @see NotifyState */ @Getter @Setter @Indexed( id = Notification.PRIMARY_KEY, fields = { @Indexed.Field(Notification.HISTORY_ID), @Indexed.Field(Notification.CHANGE_TYPE), @Indexed.Field(Notification.CHANGE_DATE), @Indexed.Field(Notification.START_DATE), @Indexed.Field(Notification.END_DATE), @Indexed.Field(Notification.TYPE), @Indexed.Field(Notification.PROCESSING_DATE), @Indexed.Field(Notification.PROCESSING_STATE) } ) @Hashed(ignore = {Notification.PRIMARY_KEY, Notification.HISTORY_ID}) public class Notification extends DocumentTemplate { private static final long serialVersionUID = -7785917265124094560L; /** Максимальный размер названия документа */ public static final int DOCUMENT_NAME_LENGTH = Named.NAME_MAX_SIZE; /* * Название полей с идентификаторами */ public static final String START_DATE = "startDate"; public static final String END_DATE = "endDate"; public static final String TYPE = "type"; public static final String RULE_SET_NAME = "ruleSetName"; public static final String FROM_GROUP_NAME = "fromGroupName"; public static final String FROM_DICTIONARY_NAME = "fromDictionaryName"; public static final String FROM_VALUE = "fromValue"; public static final String TO_GROUP_NAME = "toGroupName"; public static final String TO_DICTIONARY_NAME = "toDictionaryName"; public static final String COUNT = "count"; public static final String PROCESSING_DATE = "processingDate"; public static final String PROCESSING_STATE = "processingState"; public static final String PROCESSING_AUTHOR = "processingAuthor"; /** Дата начала агрегации событий */ @NotNull private Date startDate; /** Дата окончания агрегации событий */ @NotNull private Date endDate; /** Тип события */ @NotNull private NotifyType type; /** Название набора правил перекодирования, к которому относится оповещение */ @Size(max = DOCUMENT_NAME_LENGTH) private String ruleSetName; /** Название группы справочника источника, к которому относится оповещение */ @Size(max = DOCUMENT_NAME_LENGTH) private String fromGroupName; /** Название справочника источника, к которому относится оповещение */ @Size(max = DOCUMENT_NAME_LENGTH) private String fromDictionaryName; /** Значение справочника источника */ private String fromValue; /** Название группы справочника назначения, к которому относится оповещение */ @Size(max = DOCUMENT_NAME_LENGTH) private String toGroupName; /** Название справочника назначения, к которому относится оповещение */ @Size(max = DOCUMENT_NAME_LENGTH) private String toDictionaryName; /** Количество событий */ @NotNull private volatile Integer count; /** Дата обработки события */ private Date processingDate; /** Текущее состояние события */ @NotNull private NotifyState processingState; /** Автор обработки события */ private String processingAuthor; @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) .appendSuper(super.toString()) .append(TYPE, getType()) .append(COUNT, getCount()) .append(PROCESSING_STATE, getProcessingState()) .append(PROCESSING_DATE, DateUtil.formatDateTime(getProcessingDate())) .append(PROCESSING_AUTHOR, getProcessingAuthor()) .toString(); } }