/******************************************************************************* | |
* Copyright (c) 1998, 2013 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 v1.0 and Eclipse Distribution License v. 1.0 | |
* which accompanies this distribution. | |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
* and the Eclipse Distribution License is available at | |
* http://www.eclipse.org/org/documents/edl-v10.php. | |
* | |
* 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. | |
*/ | |
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; | |
} | |
} |