| /******************************************************************************** |
| * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation |
| * |
| * See the NOTICE file(s) distributed with this work for additional |
| * information regarding copyright ownership. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| ********************************************************************************/ |
| |
| package org.eclipse.mdm.api.base.model; |
| |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.List; |
| |
| /** |
| * This interface extends the {@link Entity} interface and provides getter and |
| * setter methods for the 'FileLinks' sequence field of an entity. |
| * |
| * @since 1.0.0 |
| * @author Viktor Stoehr, Gigatronik Ingolstadt GmbH |
| * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH |
| * @see FileLink |
| */ |
| public interface FilesAttachable extends Entity { |
| |
| // ====================================================================== |
| // Class variables |
| // ====================================================================== |
| |
| /** |
| * The 'FileLinks' attribute name. |
| */ |
| String ATTR_FILE_LINKS = "MDMLinks"; |
| |
| // ====================================================================== |
| // Public methods |
| // ====================================================================== |
| |
| /** |
| * Returns current set of linked files of this entity. |
| * |
| * @return Current set of linked files are returned. |
| */ |
| default FileLink[] getFileLinks() { |
| return ((FileLink[]) getValue(ATTR_FILE_LINKS).extract()).clone(); |
| } |
| |
| /** |
| * Replaces current set of linked files with given {@link FileLink}s. |
| * |
| * @param fileLinks The new {@code FileLink}s. |
| */ |
| default void setFileLinks(FileLink[] fileLinks) { |
| getValue(ATTR_FILE_LINKS).set(fileLinks); |
| } |
| |
| /** |
| * Adds given {@link FileLink} to the current set of linked files. |
| * |
| * @param fileLink The new {@code FileLink}. |
| */ |
| default void addFileLink(FileLink fileLink) { |
| FileLink[] fileLinks = getFileLinks(); |
| |
| FileLink[] newFileLinks = new FileLink[fileLinks.length + 1]; |
| System.arraycopy(fileLinks, 0, newFileLinks, 0, fileLinks.length); |
| newFileLinks[fileLinks.length] = fileLink; |
| setFileLinks(newFileLinks); |
| } |
| |
| /** |
| * Removes given {@link FileLink} from current set of linked files. |
| * |
| * @param fileLink The {@code FileLink} which shall be removed. |
| */ |
| default void removeFileLink(FileLink fileLink) { |
| List<FileLink> fileLinks = new ArrayList<>(Arrays.asList(getFileLinks())); |
| fileLinks.remove(fileLink); |
| setFileLinks(fileLinks.toArray(new FileLink[fileLinks.size()])); |
| } |
| |
| } |