/** * This file is part of lavagna. * * lavagna 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. * * lavagna 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 lavagna. If not, see <http://www.gnu.org/licenses/>. */ package io.lavagna.service.importexport; import io.lavagna.common.Constants; import io.lavagna.model.*; import io.lavagna.model.CardLabel.LabelDomain; import io.lavagna.model.CardLabel.LabelType; import io.lavagna.model.CardLabelValue.LabelValue; import io.lavagna.model.Event.EventType; import io.lavagna.service.*; import java.util.Date; import java.util.List; abstract class AbstractProcessLabelEvent extends AbstractProcessEvent { protected final LabelService labelService; protected final CardLabelRepository cardLabelRepository; protected final BoardRepository boardRepository; private final EventRepository eventRepository; AbstractProcessLabelEvent(CardRepository cardRepository, UserRepository userRepository, CardDataService cardDataService, LabelService labelService, CardLabelRepository cardLabelRepository, BoardRepository boardRepository, EventRepository eventRepository) { super(cardRepository, userRepository, cardDataService); this.labelService = labelService; this.cardLabelRepository = cardLabelRepository; this.boardRepository = boardRepository; this.eventRepository = eventRepository; } protected CardLabelValue findCardLabelValueBy(EventFull e) { CardLabel cl = findLabelByEvent(e); if (cl != null) { LabelValue lv = labelValue(cl, e); if(lv == null) { return null; } List<CardLabelValue> r = cardLabelRepository.findLabelValueByLabelAndValue(cardId(e), cl, lv); return r.size() == 1 ? r.get(0) : null; } return null; } protected LabelValue labelValue(CardLabel cl, EventFull e) { Event event = e.getEvent(); if (cl.getType() == LabelType.LIST) { List<LabelListValueWithMetadata> res = cardLabelRepository.findListValuesByLabelIdAndValue(cl.getId(), e.getEvent() .getValueString()); return (res.size() == 1) ? new LabelValue(null, null, null, null, null, res.get(0).getId()) : null; } else if (cl.getType() == LabelType.USER) { return new LabelValue(null, null, null, null, userRepository.findUserByName(e.getLabelUserProvider(), e.getLabelUsername()).getId(), null); } else if (cl.getType() == LabelType.CARD) { return new LabelValue(null, null, null, cardRepository.findCardIdByBoardNameAndSeq( e.getLabelBoardShortName(), e.getLabelCardSequenceNumber()), null, null); } else { return new LabelValue(event.getValueString(), event.getValueTimestamp(), event.getValueInt(), null, null, null); } } protected CardLabel findLabelByEvent(EventFull e) { Board b = boardRepository.findBoardByShortName(e.getBoardShortName()); LabelDomain domain = Constants.RESERVED_SYSTEM_LABELS_NAME.contains(e.getEvent().getLabelName()) ? LabelDomain.SYSTEM : LabelDomain.USER; List<CardLabel> r = cardLabelRepository.findLabelsByName(b.getProjectId(), e.getEvent().getLabelName(), domain); return r.isEmpty() ? null : r.get(0); } protected Integer fromLabelUsernameToUserId(EventFull e) { if (e.getLabelUsername() != null && e.getLabelCardSequenceNumber() != null && userRepository.userExists(e.getLabelUserProvider(), e.getLabelUsername())) { return userRepository.findUserByName(e.getLabelUserProvider(), e.getLabelUsername()).getId(); } return null; } protected Integer fromLabelCardToCardId(EventFull e) { if (e.getLabelBoardShortName() != null && e.getLabelCardSequenceNumber() != null && cardRepository.existCardWith(e.getLabelBoardShortName(), e.getLabelCardSequenceNumber())) { return cardRepository.findCardIdByBoardNameAndSeq(e.getLabelBoardShortName(), e.getLabelCardSequenceNumber()); } return null; } protected void insertLabelEvent(EventFull e, Event event, Date time, EventType eventType) { Integer labelCardId = fromLabelCardToCardId(e); Integer labeUserId = fromLabelUsernameToUserId(e); LabelValue labelValue = new LabelValue(event.getValueString(), event.getValueTimestamp(), event.getValueInt(), labelCardId, labeUserId, null); if ((event.getLabelType() == LabelType.CARD && labelCardId == null) || (event.getLabelType() == LabelType.USER && labeUserId == null)) { return; } eventRepository.insertLabelEvent(event.getLabelName(), cardId(e), toUser(e).getId(), eventType, labelValue, event.getLabelType(), time); } }