MediaOrderCriteria.java
/*
* Copyright (C) 2000 - 2024 Silverpeas
*
* 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.
*
* As a special exception to the terms and conditions of version 3.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* Open Source Software ("FLOSS") applications as described in Silverpeas's
* FLOSS exception. You should have received a copy of the text describing
* the FLOSS exception, and it is also available here:
* "http://www.silverpeas.org/docs/core/legal/floss_exception.html"
*
* 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 <https://www.gnu.org/licenses/>.
*/
package org.silverpeas.components.gallery.model;
import org.silverpeas.core.util.CollectionUtil;
import org.silverpeas.core.util.DateUtil;
import org.silverpeas.kernel.util.StringUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static org.silverpeas.core.persistence.jdbc.sql.JdbcSqlQuery.isSqlDefined;
/**
* Class that permits to set order search criteria for order application.
* @author Yohann Chastagnier
*/
public class MediaOrderCriteria {
private String componentInstanceId;
private final List<String> identifiers = new ArrayList<>();
private String ordererId;
private Date referenceDate = DateUtil.getDate();
private Integer nbDaysAfterThatDeleteAnOrder;
private MediaOrderCriteria() {
}
/**
* Initializes order search criteria axed on the given order component instance id.
* @param componentInstanceId the identifier of the component instance.
* @return an instance of order criteria based on the specified identifier of component instance.
*/
public static MediaOrderCriteria fromComponentInstanceId(String componentInstanceId) {
MediaOrderCriteria criteria = new MediaOrderCriteria();
criteria.componentInstanceId = componentInstanceId;
return criteria;
}
/**
* Initializes order search criteria axed on the given order identifier.
* @return an empty instance of order criteria.
*/
public static MediaOrderCriteria fromNbDaysAfterThatDeleteAnOrder(int nbDays) {
MediaOrderCriteria criteria = new MediaOrderCriteria();
criteria.nbDaysAfterThatDeleteAnOrder = nbDays;
return criteria;
}
/**
* Sets the orderer identifier.
* @param ordererId the orderer identifier.
* @return an instance of order criteria with the orderer criterion filled.
*/
public MediaOrderCriteria withOrdererId(String ordererId) {
this.ordererId = ordererId;
return this;
}
/**
* Sets the identifiers criterion to find the orders with an identifier equals to one of the
* specified ones.
* @param identifiers a list of identifiers the orders to find should have.
* @return the order criteria itself with the new criterion on the order identifiers.
*/
public MediaOrderCriteria identifierIsOneOf(String... identifiers) {
CollectionUtil.addAllIgnoreNull(this.identifiers, identifiers);
return this;
}
/**
* Sets the reference date criterion (the date of the day by default).
* @param referenceDate the reference date specified.
* @return the order criteria itself with the new criterion on the reference date.
*/
public MediaOrderCriteria referenceDateOf(Date referenceDate) {
if (referenceDate == null) {
throw new IllegalArgumentException("dateReference parameter must not be null");
}
this.referenceDate = referenceDate;
return this;
}
/**
* Gets the indetifier of order instance.
* {@link #fromComponentInstanceId(String)}
* @return the criterion on the order instance to which the orders should belong.
*/
public String getComponentInstanceId() {
return componentInstanceId;
}
/**
* Gets the orderer identifier.
* {@link #withOrdererId(String)}
* @return the orderer identifier.
*/
private String getOrdererId() {
return ordererId;
}
/**
* Gets the identifiers criteria value.
* {@link #identifierIsOneOf(String...)}
* @return the criterion on the identifiers the orders should match.
*/
private List<String> getIdentifiers() {
return identifiers;
}
/**
* Gets the reference date.
* @return the reference date.
*/
private Date getReferenceDate() {
return referenceDate;
}
/**
* Gets the number of days after that an order should be deleted.
* @return the number of days after that an order should be deleted.
*/
private Integer getNbDaysAfterThatDeleteAnOrder() {
return nbDaysAfterThatDeleteAnOrder;
}
/**
* Processes this criteria with the specified processor.
* It chains in a given order the different criterion to process.
* @param processor the processor to use for processing each criterion in this criteria.
*/
public void processWith(final MediaOrderCriteriaProcessor processor) {
processor.startProcessing();
if (StringUtil.isDefined(getComponentInstanceId())) {
processor.processComponentInstance(getComponentInstanceId());
}
if (!getIdentifiers().isEmpty()) {
processor.then().processIdentifiers(getIdentifiers());
}
if (isSqlDefined(getOrdererId())) {
processor.then().processOrderer(getOrdererId());
}
if (getNbDaysAfterThatDeleteAnOrder() != null) {
processor.then().processNbDaysAfterThatDeleteAnOrder(getReferenceDate(),
getNbDaysAfterThatDeleteAnOrder());
}
processor.endProcessing();
}
}