org.apache.jackrabbit.commons.webdav.JcrValueType Maven / Gradle / Ivy
/*
* 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.jackrabbit.commons.webdav;
import javax.jcr.PropertyType;
import java.util.HashMap;
import java.util.Map;
/** JcrValueType
... */
public class JcrValueType {
/**
* Fragment for build the content type of request entities representing
* a JCR-value. The fragment must be completed as follows:
*
* jcr-value/ + Value.getType().toLowerCase()
*
*
* resulting in the following types:
*
* jcr-value/binary
* jcr-value/boolean
* jcr-value/date
* jcr-value/decimal
* jcr-value/double
* jcr-value/long
* jcr-value/name
* jcr-value/path
* jcr-value/reference
* jcr-value/string
* jcr-value/undefined
* jcr-value/uri
* jcr-value/weakreference
*
*/
private static final String VALUE_CONTENT_TYPE_FRAGMENT = "jcr-value/";
/**
* Hardcoded lookup from content type as created by {@link #contentTypeFromType(int)}.
* Reason: As of JCR 2.0 there is no trivial rule to obtain the the TYPENAME
* constant from a lower-cased string: WeakReference uses camel-case and URI
* is all upper case...
*/
private static final Map TYPE_LOOKUP = new HashMap();
static {
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.BINARY), PropertyType.BINARY);
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.BOOLEAN), PropertyType.BOOLEAN);
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.DATE), PropertyType.DATE);
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.DECIMAL), PropertyType.DECIMAL);
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.DOUBLE), PropertyType.DOUBLE);
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.LONG), PropertyType.LONG);
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.NAME), PropertyType.NAME);
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.PATH), PropertyType.PATH);
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.REFERENCE), PropertyType.REFERENCE);
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.STRING), PropertyType.STRING);
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.UNDEFINED), PropertyType.UNDEFINED);
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.URI), PropertyType.URI);
TYPE_LOOKUP.put(contentTypeFromType(PropertyType.WEAKREFERENCE), PropertyType.WEAKREFERENCE);
}
public static String contentTypeFromType(int propertyType) {
return VALUE_CONTENT_TYPE_FRAGMENT + PropertyType.nameFromValue(propertyType).toLowerCase();
}
public static int typeFromContentType(String contentType) {
if (contentType != null) {
// remove charset if present
int pos = contentType.indexOf(';');
String ct = (pos == -1) ? contentType : contentType.substring(0, pos);
if (TYPE_LOOKUP.containsKey(ct)) {
return TYPE_LOOKUP.get(ct);
}
}
// some invalid content type argument that does not match any of the
// strings created by contentTypeFromType(int propertyType)
// -> Fallback to UNDEFINED
return PropertyType.UNDEFINED;
}
}