/**
* Copyright Intellectual Reserve, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.familysearch.api.client.ft;
import com.sun.jersey.api.client.ClientRequest;
import com.sun.jersey.api.client.ClientResponse;
import org.familysearch.api.client.ChangeHistoryState;
import org.familysearch.api.client.Rel;
import org.familysearch.api.client.util.RequestUtil;
import org.familysearch.platform.FamilySearchPlatform;
import org.gedcomx.Gedcomx;
import org.gedcomx.common.EvidenceReference;
import org.gedcomx.common.Note;
import org.gedcomx.conclusion.Fact;
import org.gedcomx.conclusion.Relationship;
import org.gedcomx.links.Link;
import org.gedcomx.rs.client.RelationshipState;
import org.gedcomx.rs.client.SourceDescriptionState;
import org.gedcomx.rs.client.StateTransitionOption;
import org.gedcomx.source.SourceReference;
import javax.ws.rs.HttpMethod;
/**
* @author Ryan Heaton
*/
public class FamilyTreeRelationshipState extends RelationshipState implements PreferredRelationshipState {
protected FamilyTreeRelationshipState(ClientRequest request, ClientResponse response, String accessToken, FamilyTreeStateFactory stateFactory) {
super(request, response, accessToken, stateFactory);
}
@Override
protected FamilyTreeRelationshipState clone(ClientRequest request, ClientResponse response) {
return new FamilyTreeRelationshipState(request, response, this.accessToken, (FamilyTreeStateFactory) this.stateFactory);
}
@Override
protected FamilySearchPlatform loadEntityConditionally(ClientResponse response) {
if (HttpMethod.GET.equals(request.getMethod()) && (response.getClientResponseStatus() == ClientResponse.Status.OK
|| response.getClientResponseStatus() == ClientResponse.Status.GONE)
|| response.getClientResponseStatus() == ClientResponse.Status.PRECONDITION_FAILED) {
return loadEntity(response);
}
else {
return null;
}
}
@Override
protected FamilySearchPlatform loadEntity(ClientResponse response) {
return response.getEntity(FamilySearchPlatform.class);
}
@Override
public FamilySearchPlatform getEntity() {
return (FamilySearchPlatform) super.getEntity();
}
@Override
public FamilyTreeRelationshipState ifSuccessful() {
return (FamilyTreeRelationshipState) super.ifSuccessful();
}
@Override
public FamilyTreeRelationshipState head(StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.head(options);
}
@Override
public FamilyTreeRelationshipState get(StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.get(options);
}
@Override
public FamilyTreeRelationshipState delete(StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.delete(options);
}
@Override
public FamilyTreeRelationshipState put(Gedcomx e, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.put(e, options);
}
@Override
public FamilyTreeRelationshipState post(Gedcomx entity, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.post(entity, options);
}
@Override
public FamilySearchFamilyTree readCollection(StateTransitionOption... options) {
return (FamilySearchFamilyTree) super.readCollection(options);
}
@Override
public FamilyTreePersonState readPerson1(StateTransitionOption... options) {
return (FamilyTreePersonState) super.readPerson1(options);
}
@Override
public FamilyTreePersonState readPerson2(StateTransitionOption... options) {
return (FamilyTreePersonState) super.readPerson2(options);
}
@Override
protected ClientRequest.Builder createRequestForEmbeddedResource(String rel) {
if (org.gedcomx.rs.Rel.DISCUSSION_REFERENCES.equals(rel)) {
return RequestUtil.applyFamilySearchConneg(createAuthenticatedRequest());
}
else {
return super.createRequestForEmbeddedResource(rel);
}
}
@Override
public FamilyTreeRelationshipState loadEmbeddedResources(StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.loadEmbeddedResources(options);
}
@Override
public FamilyTreeRelationshipState loadEmbeddedResources(String[] rels, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.loadEmbeddedResources(rels, options);
}
@Override
public FamilyTreeRelationshipState loadConclusions(StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.loadConclusions(options);
}
@Override
public FamilyTreeRelationshipState loadSourceReferences(StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.loadSourceReferences(options);
}
public FamilyTreeRelationshipState loadDiscussionReferences(StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.loadEmbeddedResources(new String[]{org.gedcomx.rs.Rel.DISCUSSION_REFERENCES}, options);
}
@Override
public FamilyTreeRelationshipState loadEvidenceReferences(StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.loadEvidenceReferences(options);
}
@Override
public FamilyTreeRelationshipState loadMediaReferences(StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.loadMediaReferences(options);
}
@Override
public FamilyTreeRelationshipState loadNotes(StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.loadNotes(options);
}
@Override
public FamilyTreeRelationshipState updateFact(Fact fact, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateFact(fact, options);
}
@Override
public FamilyTreeRelationshipState updateFacts(Fact[] facts, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateFacts(facts, options);
}
@Override
public FamilyTreeRelationshipState updateConclusions(Relationship relationship, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateConclusions(relationship, options);
}
@Override
public FamilyTreeRelationshipState deleteFact(Fact fact, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.deleteFact(fact, options);
}
@Override
public FamilyTreeRelationshipState addSourceReference(SourceDescriptionState source, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.addSourceReference(source, options);
}
@Override
public FamilyTreeRelationshipState addSourceReference(SourceReference reference, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.addSourceReference(reference, options);
}
@Override
public FamilyTreeRelationshipState addSourceReferences(SourceReference[] refs, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.addSourceReferences(refs, options);
}
@Override
public FamilyTreeRelationshipState updateSourceReference(SourceReference reference, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateSourceReference(reference, options);
}
@Override
public FamilyTreeRelationshipState updateSourceReferences(SourceReference[] refs, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateSourceReferences(refs, options);
}
@Override
public FamilyTreeRelationshipState updateSourceReferences(Relationship relationship, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateSourceReferences(relationship, options);
}
@Override
public FamilyTreeRelationshipState deleteSourceReference(SourceReference reference, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.deleteSourceReference(reference, options);
}
@Override
public FamilyTreeRelationshipState addMediaReference(SourceDescriptionState description, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.addMediaReference(description, options);
}
@Override
public FamilyTreeRelationshipState addMediaReference(SourceReference reference, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.addMediaReference(reference, options);
}
@Override
public FamilyTreeRelationshipState addMediaReferences(SourceReference[] refs, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.addMediaReferences(refs, options);
}
@Override
public FamilyTreeRelationshipState updateMediaReference(SourceReference reference, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateMediaReference(reference, options);
}
@Override
public FamilyTreeRelationshipState updateMediaReferences(SourceReference[] refs, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateMediaReferences(refs, options);
}
@Override
public FamilyTreeRelationshipState updateMediaReferences(Relationship relationship, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateMediaReferences(relationship, options);
}
@Override
public FamilyTreeRelationshipState deleteMediaReference(SourceReference reference, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.deleteMediaReference(reference, options);
}
@Override
public FamilyTreeRelationshipState addEvidenceReference(RelationshipState evidence, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.addEvidenceReference(evidence, options);
}
@Override
public FamilyTreeRelationshipState addEvidenceReference(EvidenceReference reference, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.addEvidenceReference(reference, options);
}
@Override
public FamilyTreeRelationshipState addEvidenceReferences(EvidenceReference[] refs, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.addEvidenceReferences(refs, options);
}
@Override
public FamilyTreeRelationshipState updateEvidenceReference(EvidenceReference reference, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateEvidenceReference(reference, options);
}
@Override
public FamilyTreeRelationshipState updateEvidenceReferences(EvidenceReference[] refs, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateEvidenceReferences(refs, options);
}
@Override
public FamilyTreeRelationshipState updateEvidenceReferences(Relationship relationship, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateEvidenceReferences(relationship, options);
}
@Override
public FamilyTreeRelationshipState deleteEvidenceReference(EvidenceReference reference, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.deleteEvidenceReference(reference, options);
}
@Override
public FamilyTreeRelationshipState readNote(Note note, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.readNote(note, options);
}
@Override
public FamilyTreeRelationshipState addNote(Note note, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.addNote(note, options);
}
@Override
public FamilyTreeRelationshipState addNotes(Note[] notes, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.addNotes(notes, options);
}
@Override
public FamilyTreeRelationshipState updateNote(Note note, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateNote(note, options);
}
@Override
public FamilyTreeRelationshipState updateNotes(Relationship relationship, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateNotes(relationship, options);
}
@Override
public FamilyTreeRelationshipState updateNotes(Note[] notes, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.updateNotes(notes, options);
}
@Override
public FamilyTreeRelationshipState deleteNote(Note note, StateTransitionOption... options) {
return (FamilyTreeRelationshipState) super.deleteNote(note, options);
}
public ChangeHistoryState readChangeHistory(StateTransitionOption... options) {
Link link = getLink(Rel.CHANGE_HISTORY);
if (link == null || link.getHref() == null) {
return null;
}
ClientRequest request = createAuthenticatedFeedRequest().build(link.getHref().toURI(), HttpMethod.GET);
return ((FamilyTreeStateFactory)this.stateFactory).newChangeHistoryState(request, invoke(request, options), this.accessToken);
}
public FamilyTreeRelationshipState restore(StateTransitionOption... options) {
Link link = getLink(Rel.RESTORE);
if (link == null || link.getHref() == null) {
return null;
}
ClientRequest request = RequestUtil.applyFamilySearchConneg(createAuthenticatedRequest()).build(link.getHref().toURI(), HttpMethod.POST);
return ((FamilyTreeStateFactory)this.stateFactory).newRelationshipState(request, invoke(request, options), this.accessToken);
}
}