org.eclipse.persistence.jpa.rs.features.ItemLinksBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction f2b9fc5
/*
* 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 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 getList() {
return links;
}
}