GenesysAttachmentDTO.java

/*
 * Copyright 2025 Global Crop Diversity Trust
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.gringlobal.api.model.integration;

import com.opencsv.bean.AbstractBeanField;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvCustomBindByName;

import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.gringlobal.api.model.AccessionInfo;
import org.gringlobal.model.integration.GenesysAttachment;

import java.util.UUID;

@Data
@NoArgsConstructor
public class GenesysAttachmentDTO {

	private Long id;

	@CsvBindByName(column = "uuid")
	private UUID uuid;
	@CsvBindByName(column = "version")
	private Integer version;
	@CsvCustomBindByName(column = "contentType", converter = EmptyStringToNullConverter.class)
	private String contentType;
	@CsvCustomBindByName(column = "path", converter = EmptyStringToNullConverter.class)
	private String path;
	@CsvCustomBindByName(column = "extension", converter = EmptyStringToNullConverter.class)
	private String extension;
	@CsvCustomBindByName(column = "originalFilename", converter = EmptyStringToNullConverter.class)
	private String originalFilename;
	@CsvCustomBindByName(column = "title", converter = EmptyStringToNullConverter.class)
	private String title;
	@CsvCustomBindByName(column = "subject", converter = EmptyStringToNullConverter.class)
	private String subject;
	@CsvCustomBindByName(column = "description", converter = EmptyStringToNullConverter.class)
	private String description;
	@CsvCustomBindByName(column = "creator", converter = EmptyStringToNullConverter.class)
	private String creator;
	@CsvCustomBindByName(column = "created", converter = EmptyStringToNullConverter.class)
	private String created;
	@CsvCustomBindByName(column = "rightsHolder", converter = EmptyStringToNullConverter.class)
	private String rightsHolder;
	@CsvCustomBindByName(column = "accessRights", converter = EmptyStringToNullConverter.class)
	private String accessRights;
	@CsvCustomBindByName(column = "license", converter = EmptyStringToNullConverter.class)
	private String license;
	@CsvCustomBindByName(column = "bibliographicCitation", converter = EmptyStringToNullConverter.class)
	private String bibliographicCitation;
	@CsvCustomBindByName(column = "md5", converter = EmptyStringToNullConverter.class)
	private String md5;

	private AccessionInfo accession;
	private GenesysAttachment.ImageSyncList type;
	private GenesysAttachment.ImageSyncStatus status;
	private String errorMessage;

	public static class EmptyStringToNullConverter extends AbstractBeanField<String, String> {
		@Override
		protected String convert(String value) {
			return StringUtils.trimToNull(value);
		}
	}
}