blob: 4acaa10ca7401fcf94b81879f0e44395258f08dd [file] [log] [blame]
/*
* Copyright (c) 2014, 2021 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<>();
/**
* 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;
}
}