All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github._1c_syntax.bsl.mdo.CommonAttribute Maven / Gradle / Ivy

/*
 * This file is a part of MDClasses.
 *
 * Copyright (c) 2019 - 2024
 * Tymko Oleg , Maximov Valery  and contributors
 *
 * SPDX-License-Identifier: LGPL-3.0-or-later
 *
 * MDClasses is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3.0 of the License, or (at your option) any later version.
 *
 * MDClasses 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with MDClasses.
 */
package com.github._1c_syntax.bsl.mdo;

import com.github._1c_syntax.bsl.mdo.support.DataSeparation;
import com.github._1c_syntax.bsl.mdo.support.IndexingType;
import com.github._1c_syntax.bsl.mdo.support.MultiLanguageString;
import com.github._1c_syntax.bsl.mdo.support.ObjectBelonging;
import com.github._1c_syntax.bsl.mdo.support.UseMode;
import com.github._1c_syntax.bsl.support.SupportVariant;
import com.github._1c_syntax.bsl.types.MdoReference;
import lombok.Builder;
import lombok.Builder.Default;
import lombok.EqualsAndHashCode;
import lombok.Singular;
import lombok.ToString;
import lombok.Value;

import java.util.List;

@Value
@Builder
@ToString(of = {"name", "uuid"})
@EqualsAndHashCode(of = {"name", "uuid"})
public class CommonAttribute implements MDObject {

  /*
   * ReferenceObject
   */

  @Default
  String uuid = "";
  @Default
  String name = "";
  @Default
  MdoReference mdoReference = MdoReference.EMPTY;
  @Default
  ObjectBelonging objectBelonging = ObjectBelonging.OWN;
  @Default
  String comment = "";
  @Default
  MultiLanguageString synonym = MultiLanguageString.EMPTY;
  @Default
  SupportVariant supportVariant = SupportVariant.NONE;

  /*
   * Свое
   */

  /**
   * Автоиспользование
   */
  @Default
  UseMode autoUse = UseMode.USE;

  /**
   * Режим пароля. Только для общих реквизитов с типом с типом `Строка`
   */
  boolean passwordMode;

  /**
   * Индексирование
   */
  @Default
  IndexingType indexing = IndexingType.DONT_INDEX;

  /**
   * Разделение данных
   */
  @Default
  DataSeparation dataSeparation = DataSeparation.SEPARATE;

  /**
   * Значение разделяемых данных
   */
  @Default
  MdoReference dataSeparationValue = MdoReference.EMPTY;

  /**
   * Использование разделения данных
   */
  @Default
  MdoReference dataSeparationUse = MdoReference.EMPTY;

  /**
   * Условное разделение
   */
  @Default
  MdoReference conditionalSeparation = MdoReference.EMPTY;

  /**
   * Разделение пользователей
   */
  @Default
  DataSeparation usersSeparation = DataSeparation.SEPARATE;

  /**
   * Разделение аутентификаций
   */
  @Default
  DataSeparation authenticationSeparation = DataSeparation.SEPARATE;

  /**
   * Разделение расширений конфигурации
   */
  @Default
  DataSeparation configurationExtensionsSeparation = DataSeparation.SEPARATE;

  /**
   * Список объектов, включенных в состав общего реквизита
   */
  @Singular("addContent")
  List content;

  /**
   * Проверяет наличие объекта в составе общего реквизита (вне зависимости от режима использования)
   *
   * @param mdoReference Ссылка на искомый объект
   * @return Признак вхождения в состав
   */
  public boolean contains(MdoReference mdoReference) {
    return content.stream().anyMatch(useContent -> useContent.getMetadata().equals(mdoReference));
  }

  /**
   * Возвращает режим использования общего реквизита для объекта метаданных. Если объект не входит в состав
   * общего реквизита, то будет возвращено UseMode.DONT_USE
   *
   * @param mdoReference Ссылка на искомый объект
   * @return Признак использования
   */
  public UseMode useMode(MdoReference mdoReference) {
    var value = content.stream()
      .filter(useContent -> useContent.getMetadata().equals(mdoReference))
      .findAny();
    if (value.isPresent()) {
      return value.get().getUse();
    } else {
      return UseMode.DONT_USE;
    }
  }

  @Value
  @Builder
  public static class UseContent {

    /**
     * Ссылка на объект метаданных
     */
    @Default
    MdoReference metadata = MdoReference.EMPTY;

    /**
     * Режим использования
     */
    @Default
    UseMode use = UseMode.USE;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy