/** * Copyright (C) 2010 MediaShelf <http://www.yourmediashelf.com/> * * This file is part of fedora-client. * * fedora-client is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * fedora-client is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with fedora-client. If not, see <http://www.gnu.org/licenses/>. */ package com.yourmediashelf.fedora.client.request; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.yourmediashelf.fedora.client.FedoraClient; import com.yourmediashelf.fedora.client.FedoraClientException; import com.yourmediashelf.fedora.client.response.FedoraResponse; import com.yourmediashelf.fedora.client.response.FedoraResponseImpl; /** * Builder for the AddRelationship method. * * @author Edwin Shin */ public class AddRelationship extends RelationshipsRequest { public AddRelationship(String subject) { super(subject); } /** * The subject of the relationship. If <code>null</code>, defaults to the * URI form of the constructor-provided pid, e.g. * <code>info:fedora/demo:1</code>. * * @param subject * the subject of the relationship * @return this builder * @deprecated use constructor */ @Deprecated public AddRelationship subject(String subject) { addQueryParam("subject", subject); return this; } public AddRelationship predicate(String predicate) { addQueryParam("predicate", predicate); return this; } /** * Add the object of the relationship. * * <p> * Unless otherwise indicated with the now-deprecated * {@link #isLiteral(boolean)} method, the object will be added as a * resource (i.e. a URI, not as a literal). * * @param object * the object of the relationship * @return this builder */ public AddRelationship object(String object) { addQueryParam("object", object); return this; } /** * Add the object of the relationship as a plain literal. * * @param object * the object of the relationship * @param isLiteral * whether or not the object is a literal. * @return this builder */ public AddRelationship object(String object, boolean isLiteral) { addQueryParam("object", object); addQueryParam("isLiteral", Boolean.toString(isLiteral)); return this; } /** * Add the object of the relationship as a datatyped literal. * * @param object * the object of the relationship * @param datatype * The URI of the XML Schema Datatype of the object literal, e.g. * "http://www.w3.org/2001/XMLSchema#dateTime". * @return this builder */ public AddRelationship object(String object, String datatype) { addQueryParam("object", object); addQueryParam("isLiteral", Boolean.toString(true)); addQueryParam("datatype", datatype); return this; } /** * Indicate whether the object is a literal. If omitted, defaults to false. * * @param isLiteral * indicate whether the object is a literal. * @return this builder * @deprecated use {@link #object(String, boolean)} */ @Deprecated public AddRelationship isLiteral(boolean isLiteral) { addQueryParam("isLiteral", Boolean.toString(isLiteral)); return this; } /** * The URI of the XML Schema Datatype of the object literal, e.g. * "http://www.w3.org/2001/XMLSchema#dateTime". * * @param datatype * the datatype of the literal * @return this builder * @deprecated use {@link #object(String, String)} */ @Deprecated public AddRelationship datatype(String datatype) { addQueryParam("datatype", datatype); return this; } @Override public FedoraResponse execute(FedoraClient fedora) throws FedoraClientException { WebResource wr = resource(fedora, String.format("objects/%s/relationships/new", pid)) .queryParams(getQueryParams()); return new FedoraResponseImpl(wr.post(ClientResponse.class)); } }