/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved.
*
* The contents of this file are subject to the terms of the GNU
* General Public License Version 3 only ("GPL").
* You may not use this file except in compliance with the License.
* You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html
* See the License for the specific language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each file.
*
*/
package org.jopendocument.dom;
import java.util.HashSet;
import java.util.Set;
/**
* A {@link ContentType} of a certain version.
*
* @author Sylvain
*/
public enum ContentTypeVersioned {
TEXT_V1(ContentType.TEXT, XMLVersion.OOo, "application/vnd.sun.xml.writer", "text", "sxw") {
},
GRAPHICS_V1(ContentType.GRAPHICS, XMLVersion.OOo, "application/vnd.sun.xml.draw", "drawing", "sxd") {
},
PRESENTATION_V1(ContentType.PRESENTATION, XMLVersion.OOo, "application/vnd.sun.xml.impress", "presentation", "sxi") {
},
SPREADSHEET_V1(ContentType.SPREADSHEET, XMLVersion.OOo, "application/vnd.sun.xml.calc", "spreadsheet", "sxc") {
},
TEXT(ContentType.TEXT, XMLVersion.OD, "application/vnd.oasis.opendocument.text", "text", "odt") {
},
TEXT_TEMPLATE(ContentType.TEXT, XMLVersion.OD, "application/vnd.oasis.opendocument.text-template", "text", "ott") {
},
GRAPHICS(ContentType.GRAPHICS, XMLVersion.OD, "application/vnd.oasis.opendocument.graphics", "drawing", "odg") {
},
GRAPHICS_TEMPLATE(ContentType.GRAPHICS, XMLVersion.OD, "application/vnd.oasis.opendocument.graphics-template", "drawing", "otg") {
},
PRESENTATION(ContentType.PRESENTATION, XMLVersion.OD, "application/vnd.oasis.opendocument.presentation", "presentation", "odp") {
},
PRESENTATION_TEMPLATE(ContentType.PRESENTATION, XMLVersion.OD, "application/vnd.oasis.opendocument.presentation-template", "presentation", "otp") {
},
SPREADSHEET(ContentType.SPREADSHEET, XMLVersion.OD, "application/vnd.oasis.opendocument.spreadsheet", "spreadsheet", "ods") {
},
SPREADSHEET_TEMPLATE(ContentType.SPREADSHEET, XMLVersion.OD, "application/vnd.oasis.opendocument.spreadsheet-template", "spreadsheet", "ots") {
};
private final ContentType type;
private final XMLVersion version;
private final String mimeType;
// either office:class of the root element for V1
// or the name of the child of office:body for V2
private final String shortName;
private final String extension;
private ContentTypeVersioned(ContentType type, XMLVersion version, String mimeType, String bodyChildName, String extension) {
this.type = type;
this.mimeType = mimeType;
this.version = version;
this.shortName = bodyChildName;
this.extension = extension;
}
public final XMLVersion getVersion() {
return this.version;
}
public final String getShortName() {
return this.shortName;
}
public final String getMimeType() {
return this.mimeType;
}
public final ContentType getType() {
return this.type;
}
public final String getExtension() {
return this.extension;
}
// *** static
static public ContentTypeVersioned fromType(ContentType type, XMLVersion version) {
for (final ContentTypeVersioned t : fromType(type))
if (t.getVersion() == version)
return t;
return null;
}
static public Set<ContentTypeVersioned> fromType(ContentType type) {
final Set<ContentTypeVersioned> res = new HashSet<ContentTypeVersioned>();
for (final ContentTypeVersioned t : ContentTypeVersioned.values())
if (t.getType().equals(type))
res.add(t);
return res;
}
static public ContentTypeVersioned fromMime(String mime) {
for (final ContentTypeVersioned t : ContentTypeVersioned.values())
if (t.getMimeType().equals(mime))
return t;
return null;
}
static ContentTypeVersioned fromClass(String name) {
return fromShortName(XMLVersion.OOo, name);
}
static ContentTypeVersioned fromBody(String name) {
return fromShortName(XMLVersion.OD, name);
}
static private ContentTypeVersioned fromShortName(XMLVersion version, String name) {
if (name == null)
throw new NullPointerException();
for (final ContentTypeVersioned t : ContentTypeVersioned.values())
if (t.shortName.equals(name) && t.getVersion() == version)
return t;
return null;
}
}