internalvalue.java

来自「jsr170接口的java实现。是个apache的开源项目。」· Java 代码 · 共 495 行 · 第 1/2 页

JAVA
495
字号
/* * 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.core.value;import org.apache.jackrabbit.core.fs.FileSystemResource;import org.apache.jackrabbit.name.MalformedPathException;import org.apache.jackrabbit.name.NameException;import org.apache.jackrabbit.name.NamespaceResolver;import org.apache.jackrabbit.name.NoPrefixDeclaredException;import org.apache.jackrabbit.name.Path;import org.apache.jackrabbit.name.QName;import org.apache.jackrabbit.name.NameFormat;import org.apache.jackrabbit.name.PathFormat;import org.apache.jackrabbit.util.ISO8601;import org.apache.jackrabbit.uuid.UUID;import org.apache.jackrabbit.value.BinaryValue;import org.apache.jackrabbit.value.BooleanValue;import org.apache.jackrabbit.value.DateValue;import org.apache.jackrabbit.value.DoubleValue;import org.apache.jackrabbit.value.LongValue;import org.apache.jackrabbit.value.NameValue;import org.apache.jackrabbit.value.PathValue;import org.apache.jackrabbit.value.ReferenceValue;import org.apache.jackrabbit.value.StringValue;import javax.jcr.PropertyType;import javax.jcr.RepositoryException;import javax.jcr.Value;import javax.jcr.ValueFormatException;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.util.Calendar;/** * <code>InternalValue</code> represents the internal format of a property value. * <p/> * The following table specifies the internal format for every property type: * <pre> * <table> * <tr><b>PropertyType</b><td></td><td><b>Internal Format</b></td></tr> * <tr>STRING<td></td><td>String</td></tr> * <tr>LONG<td></td><td>Long</td></tr> * <tr>DOUBLE<td></td><td>Double</td></tr> * <tr>DATE<td></td><td>Calendar</td></tr> * <tr>BOOLEAN<td></td><td>Boolean</td></tr> * <tr>NAME<td></td><td>QName</td></tr> * <tr>PATH<td></td><td>Path</td></tr> * <tr>BINARY<td></td><td>BLOBFileValue</td></tr> * <tr>REFERENCE<td></td><td>UUID</td></tr> * </table> * </pre> */public class InternalValue {    public static final InternalValue[] EMPTY_ARRAY = new InternalValue[0];    public static final InternalValue BOOLEAN_TRUE = create(true);    public static final InternalValue BOOLEAN_FALSE = create(false);    private final Object val;    private final int type;    //------------------------------------------------------< factory methods >    /**     * @param value     * @param nsResolver     * @return     * @throws ValueFormatException     * @throws RepositoryException     */    public static InternalValue create(Value value, NamespaceResolver nsResolver)            throws ValueFormatException, RepositoryException {        if (value == null) {            throw new IllegalArgumentException("null value");        }        switch (value.getType()) {            case PropertyType.BINARY:                try {                    if (value instanceof BLOBFileValue) {                        return new InternalValue((BLOBFileValue) value);                    } else {                        InputStream stream = value.getStream();                        try {                            return new InternalValue(new BLOBFileValue(stream));                        } finally {                            try {                                stream.close();                            } catch (IOException e) {                                // ignore                            }                        }                    }                } catch (IOException ioe) {                    throw new ValueFormatException(ioe.getMessage());                }            case PropertyType.BOOLEAN:                return value.getBoolean() ? BOOLEAN_TRUE : BOOLEAN_FALSE;            case PropertyType.DATE:                return new InternalValue(value.getDate());            case PropertyType.DOUBLE:                return new InternalValue(value.getDouble());            case PropertyType.LONG:                return new InternalValue(value.getLong());            case PropertyType.REFERENCE:                return new InternalValue(new UUID(value.getString()));            case PropertyType.NAME:                try {                    return new InternalValue(NameFormat.parse(value.getString(), nsResolver));                } catch (NameException e) {                    throw new ValueFormatException(e.getMessage());                }            case PropertyType.PATH:                try {                    return new InternalValue(PathFormat.parse(value.getString(), nsResolver));                } catch (MalformedPathException mpe) {                    throw new ValueFormatException(mpe.getMessage());                }            case PropertyType.STRING:                return new InternalValue(value.getString());            default:                throw new IllegalArgumentException("illegal value");        }    }    /**     * @param value     * @return the created value     */    public static InternalValue create(String value) {        return new InternalValue(value);    }    /**     * @param value     * @return the created value     */    public static InternalValue create(long value) {        return new InternalValue(value);    }    /**     * @param value     * @return the created value     */    public static InternalValue create(double value) {        return new InternalValue(value);    }    /**     * @param value     * @return the created value     */    public static InternalValue create(Calendar value) {        return new InternalValue(value);    }    /**     * @param value     * @return the created value     */    public static InternalValue create(boolean value) {        return new InternalValue(value);    }    /**     * @param value     * @return the created value     */    public static InternalValue create(byte[] value) {        return new InternalValue(new BLOBFileValue(value));    }    /**     * @param value     * @return     * @throws IOException     */    public static InternalValue create(InputStream value) throws IOException {        return new InternalValue(new BLOBFileValue(value));    }    /**     * @param value     * @param temp     * @return     * @throws IOException     */    public static InternalValue create(InputStream value, boolean temp) throws IOException {        return new InternalValue(new BLOBFileValue(value, temp));    }    /**     * @param value     * @return     * @throws IOException     */    public static InternalValue create(FileSystemResource value)            throws IOException {        return new InternalValue(new BLOBFileValue(value));    }    /**     * @param value     * @return     * @throws IOException     */    public static InternalValue create(File value) throws IOException {        return new InternalValue(new BLOBFileValue(value));    }    /**     * @param value     * @return the created value     */    public static InternalValue create(QName value) {        return new InternalValue(value);    }    /**     * @param values     * @return the created value     */    public static InternalValue[] create(QName[] values) {        InternalValue[] ret = new InternalValue[values.length];        for (int i = 0; i < values.length; i++) {            ret[i] = new InternalValue(values[i]);        }        return ret;    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?