blob: 76ee05f5f0d50e61cf9352f0c76db7b193c75b0c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.olingo.client.core.domain;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.olingo.client.api.domain.AbstractClientPayload;
import org.apache.olingo.client.api.domain.ClientAnnotation;
import org.apache.olingo.client.api.domain.ClientEntity;
import org.apache.olingo.client.api.domain.ClientLink;
import org.apache.olingo.client.api.domain.ClientOperation;
import org.apache.olingo.client.api.domain.ClientProperty;
import org.apache.olingo.client.api.domain.ClientSingleton;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
public class ClientEntityImpl extends AbstractClientPayload implements ClientEntity, ClientSingleton {
/**
* Entity id.
*/
private URI id;
/**
* ETag.
*/
private String eTag;
/**
* Media entity flag.
*/
private boolean mediaEntity = false;
/**
* In case of media entity, media content type.
*/
private String mediaContentType;
/**
* In case of media entity, media content source.
*/
private URI mediaContentSource;
/**
* Media ETag.
*/
private String mediaETag;
/**
* Edit link.
*/
private URI editLink;
private final List<ClientProperty> properties = new ArrayList<ClientProperty>();
private final List<ClientAnnotation> annotations = new ArrayList<ClientAnnotation>();
private final FullQualifiedName typeName;
/**
* Navigation links (might contain in-line entities or entity sets).
*/
private final List<ClientLink> navigationLinks = new ArrayList<ClientLink>();
/**
* Association links.
*/
private final List<ClientLink> associationLinks = new ArrayList<ClientLink>();
/**
* Media edit links.
*/
private final List<ClientLink> mediaEditLinks = new ArrayList<ClientLink>();
/**
* Operations (legacy, functions, actions).
*/
private final List<ClientOperation> operations = new ArrayList<ClientOperation>();
public ClientEntityImpl(final FullQualifiedName typeName) {
super(typeName == null ? null : typeName.toString());
this.typeName = typeName;
}
@Override
public FullQualifiedName getTypeName() {
return typeName;
}
@Override
public String getETag() {
return eTag;
}
@Override
public void setETag(final String eTag) {
this.eTag = eTag;
}
@Override
public ClientOperation getOperation(final String title) {
ClientOperation result = null;
for (ClientOperation operation : operations) {
if (title.equals(operation.getTitle())) {
result = operation;
break;
}
}
return result;
}
/**
* Gets operations.
*
* @return operations.
*/
@Override
public List<ClientOperation> getOperations() {
return operations;
}
@Override
public ClientProperty getProperty(final String name) {
ClientProperty result = null;
if (StringUtils.isNotBlank(name)) {
for (ClientProperty property : getProperties()) {
if (name.equals(property.getName())) {
result = property;
break;
}
}
}
return result;
}
@Override
public boolean addLink(final ClientLink link) {
boolean result = false;
switch (link.getType()) {
case ASSOCIATION:
result = associationLinks.contains(link) ? false : associationLinks.add(link);
break;
case ENTITY_NAVIGATION:
case ENTITY_SET_NAVIGATION:
result = navigationLinks.contains(link) ? false : navigationLinks.add(link);
break;
case MEDIA_EDIT:
case MEDIA_READ:
result = mediaEditLinks.contains(link) ? false : mediaEditLinks.add(link);
break;
default:
}
return result;
}
@Override
public boolean removeLink(final ClientLink link) {
return associationLinks.remove(link) || navigationLinks.remove(link);
}
private ClientLink getLink(final List<ClientLink> links, final String name) {
ClientLink result = null;
for (ClientLink link : links) {
if (name.equals(link.getName())) {
result = link;
break;
}
}
return result;
}
@Override
public ClientLink getNavigationLink(final String name) {
return getLink(navigationLinks, name);
}
@Override
public List<ClientLink> getNavigationLinks() {
return navigationLinks;
}
@Override
public ClientLink getAssociationLink(final String name) {
return getLink(associationLinks, name);
}
@Override
public List<ClientLink> getAssociationLinks() {
return associationLinks;
}
@Override
public ClientLink getMediaEditLink(final String name) {
return getLink(mediaEditLinks, name);
}
@Override
public List<ClientLink> getMediaEditLinks() {
return mediaEditLinks;
}
@Override
public URI getEditLink() {
return editLink;
}
@Override
public void setEditLink(final URI editLink) {
this.editLink = editLink;
}
@Override
public URI getLink() {
return super.getLink() == null ? getEditLink() : super.getLink();
}
@Override
public boolean isReadOnly() {
return super.getLink() != null;
}
@Override
public boolean isMediaEntity() {
return mediaEntity;
}
@Override
public void setMediaEntity(final boolean isMediaEntity) {
mediaEntity = isMediaEntity;
}
@Override
public String getMediaContentType() {
return mediaContentType;
}
@Override
public void setMediaContentType(final String mediaContentType) {
this.mediaContentType = mediaContentType;
}
@Override
public URI getMediaContentSource() {
return mediaContentSource;
}
@Override
public void setMediaContentSource(final URI mediaContentSource) {
this.mediaContentSource = mediaContentSource;
}
@Override
public String getMediaETag() {
return mediaETag;
}
@Override
public void setMediaETag(final String eTag) {
mediaETag = eTag;
}
@Override
public URI getId() {
return id;
}
@Override
public void setId(final URI id) {
this.id = id;
}
@Override
public List<ClientProperty> getProperties() {
return properties;
}
@Override
public List<ClientAnnotation> getAnnotations() {
return annotations;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((annotations == null) ? 0 : annotations.hashCode());
result = prime * result + ((associationLinks == null) ? 0 : associationLinks.hashCode());
result = prime * result + ((eTag == null) ? 0 : eTag.hashCode());
result = prime * result + ((editLink == null) ? 0 : editLink.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((mediaContentSource == null) ? 0 : mediaContentSource.hashCode());
result = prime * result + ((mediaContentType == null) ? 0 : mediaContentType.hashCode());
result = prime * result + ((mediaETag == null) ? 0 : mediaETag.hashCode());
result = prime * result + ((mediaEditLinks == null) ? 0 : mediaEditLinks.hashCode());
result = prime * result + (mediaEntity ? 1231 : 1237);
result = prime * result + ((navigationLinks == null) ? 0 : navigationLinks.hashCode());
result = prime * result + ((operations == null) ? 0 : operations.hashCode());
result = prime * result + ((properties == null) ? 0 : properties.hashCode());
result = prime * result + ((typeName == null) ? 0 : typeName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!super.equals(obj)) {
return false;
}
if (!(obj instanceof ClientEntityImpl)) {
return false;
}
ClientEntityImpl other = (ClientEntityImpl) obj;
if (annotations == null) {
if (other.annotations != null) {
return false;
}
} else if (!annotations.equals(other.annotations)) {
return false;
}
if (associationLinks == null) {
if (other.associationLinks != null) {
return false;
}
} else if (!associationLinks.equals(other.associationLinks)) {
return false;
}
if (eTag == null) {
if (other.eTag != null) {
return false;
}
} else if (!eTag.equals(other.eTag)) {
return false;
}
if (editLink == null) {
if (other.editLink != null) {
return false;
}
} else if (!editLink.equals(other.editLink)) {
return false;
}
if (id == null) {
if (other.id != null) {
return false;
}
} else if (!id.equals(other.id)) {
return false;
}
if (mediaContentSource == null) {
if (other.mediaContentSource != null) {
return false;
}
} else if (!mediaContentSource.equals(other.mediaContentSource)) {
return false;
}
if (mediaContentType == null) {
if (other.mediaContentType != null) {
return false;
}
} else if (!mediaContentType.equals(other.mediaContentType)) {
return false;
}
if (mediaETag == null) {
if (other.mediaETag != null) {
return false;
}
} else if (!mediaETag.equals(other.mediaETag)) {
return false;
}
if (mediaEditLinks == null) {
if (other.mediaEditLinks != null) {
return false;
}
} else if (!mediaEditLinks.equals(other.mediaEditLinks)) {
return false;
}
if (mediaEntity != other.mediaEntity) {
return false;
}
if (navigationLinks == null) {
if (other.navigationLinks != null) {
return false;
}
} else if (!navigationLinks.equals(other.navigationLinks)) {
return false;
}
if (operations == null) {
if (other.operations != null) {
return false;
}
} else if (!operations.equals(other.operations)) {
return false;
}
if (properties == null) {
if (other.properties != null) {
return false;
}
} else if (!properties.equals(other.properties)) {
return false;
}
if (typeName == null) {
if (other.typeName != null) {
return false;
}
} else if (!typeName.equals(other.typeName)) {
return false;
}
return true;
}
@Override
public String toString() {
return "ClientEntityImpl [id=" + id + ", eTag=" + eTag + ", mediaEntity=" + mediaEntity + ", mediaContentType="
+ mediaContentType + ", mediaContentSource=" + mediaContentSource + ", mediaETag=" + mediaETag + ", editLink="
+ editLink + ", properties=" + properties + ", annotations=" + annotations + ", typeName=" + typeName
+ ", navigationLinks=" + navigationLinks + ", associationLinks=" + associationLinks + ", mediaEditLinks="
+ mediaEditLinks + ", operations=" + operations + "super[" + super.toString() + "]]";
}
}