| /* |
| * Copyright (c) 2014, 2020 Oracle and/or its affiliates. All rights reserved. |
| * |
| * 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, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // Dmitry Kornilov - initial implementation |
| package org.eclipse.persistence.jpa.rs.features; |
| |
| import org.eclipse.persistence.internal.jpa.rs.metadata.model.ItemLinks; |
| import org.eclipse.persistence.internal.jpa.rs.metadata.model.LinkV2; |
| import org.eclipse.persistence.jpa.rs.ReservedWords; |
| import org.eclipse.persistence.jpa.rs.resources.common.AbstractResource; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| /** |
| * Convenient {@link ItemLinks} object builder. |
| * |
| * @author Dmitry Kornilov |
| * @since EclipseLink 2.6.0 |
| */ |
| public final class ItemLinksBuilder { |
| private final List<LinkV2> links = new ArrayList<LinkV2>(); |
| |
| /** |
| * Adds a 'self' link. |
| * |
| * @param href 'self' link |
| * @return {@link ItemLinksBuilder} with added 'self' link. |
| */ |
| public ItemLinksBuilder addSelf(String href) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_SELF, href)); |
| return this; |
| } |
| |
| /** |
| * Adds a 'canonical' link. |
| * |
| * @param href 'canonical' link |
| * @return {@link ItemLinksBuilder} with added 'canonical' link. |
| */ |
| public ItemLinksBuilder addCanonical(String href) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_CANONICAL, href)); |
| return this; |
| } |
| |
| /** |
| * Adds a 'canonical' link. |
| * |
| * @param href 'canonical' link |
| * @param mediaType media type |
| * @return {@link ItemLinksBuilder} with added 'canonical' link. |
| */ |
| public ItemLinksBuilder addCanonical(String href, String mediaType) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_CANONICAL, href, mediaType)); |
| return this; |
| } |
| |
| /** |
| * Adds a 'next' link. |
| * |
| * @param href 'next' link |
| * @return {@link ItemLinksBuilder} with added 'next' link. |
| */ |
| public ItemLinksBuilder addNext(String href) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_NEXT, href)); |
| return this; |
| } |
| |
| /** |
| * Adds a 'prev' link. |
| * |
| * @param href 'prev' link |
| * @return {@link ItemLinksBuilder} with added 'prev' link. |
| */ |
| public ItemLinksBuilder addPrev(String href) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_PREV, href)); |
| return this; |
| } |
| |
| /** |
| * Adds a 'alternate' link. |
| * Alternate links always have "application/schema+json" media type. |
| * |
| * @param href 'alternate' link |
| * @return {@link ItemLinksBuilder} with added 'alternate' link. |
| */ |
| public ItemLinksBuilder addAlternate(String href) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_ALTERNATE, href, AbstractResource.APPLICATION_SCHEMA_JSON)); |
| return this; |
| } |
| |
| /** |
| * Adds a 'describes' link. |
| * |
| * @param href 'describes' link |
| * @return {@link ItemLinksBuilder} with added 'describes' link. |
| */ |
| public ItemLinksBuilder addDescribes(String href) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_DESCRIBES, href)); |
| return this; |
| } |
| |
| /** |
| * Adds a 'describedBy' link. |
| * |
| * @param href 'describedBy' link |
| * @return {@link ItemLinksBuilder} with added 'describedBy' link. |
| */ |
| public ItemLinksBuilder addDescribedBy(String href) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_DESCRIBED_BY, href)); |
| return this; |
| } |
| |
| /** |
| * Adds a 'create' link. |
| * |
| * @param href 'create' link |
| * @return {@link ItemLinksBuilder} with added 'create' link. |
| */ |
| public ItemLinksBuilder addCreate(String href) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_CREATE, href, null, "PUT")); |
| return this; |
| } |
| |
| /** |
| * Adds a 'find' link. |
| * |
| * @param href 'find' link |
| * @return {@link ItemLinksBuilder} with added 'find' link. |
| */ |
| public ItemLinksBuilder addFind(String href) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_FIND, href, null, "GET")); |
| return this; |
| } |
| |
| /** |
| * Adds a 'update' link. |
| * |
| * @param href 'update' link |
| * @return {@link ItemLinksBuilder} with added 'update' link. |
| */ |
| public ItemLinksBuilder addUpdate(String href) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_UPDATE, href, null, "POST")); |
| return this; |
| } |
| |
| /** |
| * Adds a 'delete' link. |
| * |
| * @param href 'delete' link |
| * @return {@link ItemLinksBuilder} with added 'delete' link. |
| */ |
| public ItemLinksBuilder addDelete(String href) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_DELETE, href, null, "DELETE")); |
| return this; |
| } |
| |
| /** |
| * Adds a 'execute' link. |
| * |
| * @param href 'execute' link |
| * @param method GET/POST etc. |
| * @return {@link ItemLinksBuilder} with added 'execute' link. |
| */ |
| public ItemLinksBuilder addExecute(String href, String method) { |
| links.add(new LinkV2(ReservedWords.JPARS_REL_EXECUTE, href, null, method)); |
| return this; |
| } |
| |
| /** |
| * Builds {@link ItemLinks} object. |
| * |
| * @return {@link ItemLinks} object. |
| */ |
| public ItemLinks build() { |
| final ItemLinks itemLinks = new ItemLinks(); |
| itemLinks.setLinks(links); |
| return itemLinks; |
| } |
| |
| /** |
| * Returns a list of links. |
| * |
| * @return list of links. |
| */ |
| public List<LinkV2> getList() { |
| return links; |
| } |
| } |