blob: a23a275cd989ad3685eee835e1eab774c87c876f [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.oxm.mappings;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.internal.oxm.XPathFragment;
import org.eclipse.persistence.mappings.DatabaseMapping;
import org.eclipse.persistence.oxm.XMLConstants;
import org.eclipse.persistence.oxm.XMLField;
/*
* <p><b>Purpose:</b> Provides a default implementation of MimeTypePolicy to be used for java
* properties that have a single static mime type.
* The mime type will be obtained from the objects field/property that is mapped
* to the XML attribute with name "contentType" and namespace URI
* "http://www.w3.org/2005/05/xmlmime". If this is not set/present then the
* fixed value will be returned.
*
* @see MimeTypePolicy
* @see XMLBinaryDataMapping
* @see XMLBinaryDataCollectionMapping
*/
public class FixedMimeTypePolicy implements MimeTypePolicy {
private boolean initialized = false;
private String aMimeType;
private DatabaseMapping binaryMapping;
private DatabaseMapping contentTypeMapping;
public FixedMimeTypePolicy() {
initialized = true;
}
public FixedMimeTypePolicy(String aMimeTypeParameter) {
aMimeType = aMimeTypeParameter;
initialized = true;
}
public FixedMimeTypePolicy(String aMimeTypeParameter, DatabaseMapping mapping) {
aMimeType = aMimeTypeParameter;
this.binaryMapping = mapping;
initialized = null == binaryMapping;
}
/**
* The mime type will be obtained from the objects field/property that is
* mapped to the XML attribute with name "contentType" and namespace URI
* "http://www.w3.org/2005/05/xmlmime". If this is not set/present then the
* fixed value will be returned.
*/
@Override
public String getMimeType(Object anObject) {
if(!initialized && null == contentTypeMapping) {
ClassDescriptor descriptor = binaryMapping.getDescriptor();
for(DatabaseMapping mapping : descriptor.getMappings()) {
XMLField xmlField = (XMLField) mapping.getField();
if(null != xmlField) {
XPathFragment xPathFragment = xmlField.getXPathFragment();
if(xPathFragment != null && xPathFragment.isAttribute() && XMLConstants.XML_MIME_URL.equals(xPathFragment.getNamespaceURI()) && XMLConstants.CONTENT_TYPE.equals(xPathFragment.getLocalName())) {
contentTypeMapping = mapping;
break;
}
}
}
initialized = true;
}
if(null != contentTypeMapping) {
String contentType = (String) contentTypeMapping.getAttributeValueFromObject(anObject);
if(null != contentType) {
return contentType;
}
}
return aMimeType;
}
/**
* Return the default mime type for this policy. This mime type will be
* returned if there is no field/property with a value mapped to an XML
* attribute with name "contentType" and URI
* "http://www.w3.org/2005/05/xmlmime".
*/
public String getMimeType() {
return aMimeType;
}
/**
* Set the default mime type for this policy. This mime type will be
* returned if there is no field/property with a value mapped to an XML
* attribute with name "contentType" and URI
* "http://www.w3.org/2005/05/xmlmime".
*/
public void setMimeType(String aString) {
aMimeType = aString;
}
}