com.twcable.jackalope.impl.jcr.PropertyImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.twcable.jackalope.impl.jcr.PropertyImpl.java

Source

/*
 * Copyright 2015 Time Warner Cable, Inc.
 *
 * Licensed 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 com.twcable.jackalope.impl.jcr;

import com.google.common.primitives.Longs;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.jcr.Binary;
import javax.jcr.ItemExistsException;
import javax.jcr.ItemNotFoundException;
import javax.jcr.ItemVisitor;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.ValueFormatException;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.PropertyDefinition;
import javax.jcr.version.VersionException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

/**
 * Implementation of jcr Property Interface.
 */
@SuppressWarnings("DuplicateThrows")
public class PropertyImpl extends ItemImpl implements Property {
    private Value value;
    private Value[] values;

    public PropertyImpl(@Nonnull SessionImpl session, @Nonnull String path)
            throws ItemNotFoundException, ItemExistsException {
        super(session, path);
    }

    public PropertyImpl(@Nonnull SessionImpl session, @Nonnull String path, @Nonnull Value value)
            throws ValueFormatException, VersionException, LockException, ConstraintViolationException,
            RepositoryException {
        this(session, path);
        setValue(value);
    }

    public PropertyImpl(@Nonnull SessionImpl session, @Nonnull String path, @Nonnull Value[] values)
            throws ValueFormatException, VersionException, LockException, ConstraintViolationException,
            RepositoryException {
        this(session, path);
        setValue(values);
    }

    public PropertyImpl(@Nonnull SessionImpl session, @Nonnull String path, @Nonnull String[] values)
            throws ValueFormatException, VersionException, LockException, ConstraintViolationException,
            RepositoryException {
        this(session, path);
        List<Value> stringValues = new ArrayList<>(values.length);
        for (String value : values)
            stringValues.add(new ValueImpl(value));
        setValue(stringValues.toArray(new Value[stringValues.size()]));
    }

    @Override
    public void setValue(@Nonnull Value value) throws ValueFormatException, VersionException, LockException,
            ConstraintViolationException, RepositoryException {
        this.value = value;
        session.changeItem(this);
    }

    @Override
    public void setValue(@Nonnull Value[] values) throws ValueFormatException, VersionException, LockException,
            ConstraintViolationException, RepositoryException {
        this.values = values;
        session.changeItem(this);
    }

    @Override
    public void setValue(@Nonnull String value) throws ValueFormatException, VersionException, LockException,
            ConstraintViolationException, RepositoryException {
        setValue(new ValueImpl(value));
    }

    @Override
    public void setValue(@Nonnull String[] values) throws ValueFormatException, VersionException, LockException,
            ConstraintViolationException, RepositoryException {
        List<Value> valueList = new ArrayList<>(values.length);
        for (String value : values)
            valueList.add(new ValueImpl(value));
        setValue(valueList.toArray(new Value[valueList.size()]));
    }

    @Override
    public void setValue(InputStream value) throws ValueFormatException, VersionException, LockException,
            ConstraintViolationException, RepositoryException {
        //Deprecated
    }

    @Override
    public void setValue(@Nonnull Binary value) throws ValueFormatException, VersionException, LockException,
            ConstraintViolationException, RepositoryException {
        setValue(new ValueImpl(value));
    }

    @Override
    public void setValue(long value) throws ValueFormatException, VersionException, LockException,
            ConstraintViolationException, RepositoryException {
        setValue(new ValueImpl(value));
    }

    @Override
    public void setValue(double value) throws ValueFormatException, VersionException, LockException,
            ConstraintViolationException, RepositoryException {
        setValue(new ValueImpl(value));
    }

    @Override
    public void setValue(@Nonnull BigDecimal value) throws ValueFormatException, VersionException, LockException,
            ConstraintViolationException, RepositoryException {
        setValue(new ValueImpl(value));
    }

    @Override
    public void setValue(@Nonnull Calendar value) throws ValueFormatException, VersionException, LockException,
            ConstraintViolationException, RepositoryException {
        setValue(new ValueImpl(value));
    }

    @Override
    public void setValue(boolean value) throws ValueFormatException, VersionException, LockException,
            ConstraintViolationException, RepositoryException {
        setValue(new ValueImpl(value));
    }

    @Override
    public void setValue(@Nonnull Node value) throws ValueFormatException, VersionException, LockException,
            ConstraintViolationException, RepositoryException {
        //Not implemented
    }

    @Override
    @Nonnull
    public Value getValue() throws ValueFormatException, RepositoryException {
        return value;
    }

    @Override
    @Nonnull
    public Value[] getValues() throws ValueFormatException, RepositoryException {
        return values;
    }

    @Override
    @Nonnull
    public String getString() throws ValueFormatException, RepositoryException {
        if (isMultiple())
            throw new ValueFormatException();
        return value.getString(); //To change body of implemented methods use File | Settings | File Templates.
    }

    @Override
    @Nullable
    public InputStream getStream() throws ValueFormatException, RepositoryException {
        return null; // deprecated
    }

    @Override
    @Nonnull
    public Binary getBinary() throws ValueFormatException, RepositoryException {
        if (isMultiple())
            throw new ValueFormatException();
        return value.getBinary(); //To change body of implemented methods use File | Settings | File Templates.
    }

    @Override
    public long getLong() throws ValueFormatException, RepositoryException {
        if (isMultiple())
            throw new ValueFormatException();
        return value.getLong(); //To change body of implemented methods use File | Settings | File Templates.
    }

    @Override
    public double getDouble() throws ValueFormatException, RepositoryException {
        if (isMultiple())
            throw new ValueFormatException();
        return value.getDouble(); //To change body of implemented methods use File | Settings | File Templates.
    }

    @Override
    @Nonnull
    public BigDecimal getDecimal() throws ValueFormatException, RepositoryException {
        if (isMultiple())
            throw new ValueFormatException();
        return value.getDecimal(); //To change body of implemented methods use File | Settings | File Templates.
    }

    @Override
    @Nonnull
    public Calendar getDate() throws ValueFormatException, RepositoryException {
        if (isMultiple())
            throw new ValueFormatException();
        return value.getDate(); //To change body of implemented methods use File | Settings | File Templates.
    }

    @Override
    public boolean getBoolean() throws ValueFormatException, RepositoryException {
        if (isMultiple())
            throw new ValueFormatException();
        return value.getBoolean(); //To change body of implemented methods use File | Settings | File Templates.
    }

    @Override
    public Node getNode() throws ItemNotFoundException, ValueFormatException, RepositoryException {
        return null; //not implemented
    }

    @Override
    public Property getProperty() throws ItemNotFoundException, ValueFormatException, RepositoryException {
        return null; //not implemented
    }

    @Override
    public long getLength() throws ValueFormatException, RepositoryException {
        if (isMultiple())
            throw new ValueFormatException();
        return getString().length();
    }

    @Override
    @Nonnull
    public long[] getLengths() throws ValueFormatException, RepositoryException {
        if (!isMultiple())
            throw new ValueFormatException();
        List<Long> lengths = new ArrayList<>();
        for (Value value : values)
            lengths.add((long) value.getString().length());
        return Longs.toArray(lengths);
    }

    @Override
    public PropertyDefinition getDefinition() throws RepositoryException {
        return new PropertyDefinition() {
            @Override
            public int getRequiredType() {
                return 0;
            }

            @Override
            public String[] getValueConstraints() {
                return new String[0];
            }

            @Override
            public Value[] getDefaultValues() {
                return new Value[0];
            }

            @Override
            public boolean isMultiple() {
                return PropertyImpl.this.isMultiple();
            }

            @Override
            public String[] getAvailableQueryOperators() {
                return new String[0];
            }

            @Override
            public boolean isFullTextSearchable() {
                return false;
            }

            @Override
            public boolean isQueryOrderable() {
                return false;
            }

            @Override
            public NodeType getDeclaringNodeType() {
                return null;
            }

            @Override
            public String getName() {
                return null;
            }

            @Override
            public boolean isAutoCreated() {
                return false;
            }

            @Override
            public boolean isMandatory() {
                return false;
            }

            @Override
            public int getOnParentVersion() {
                return 0;
            }

            @Override
            public boolean isProtected() {
                return false;
            }
        };
    }

    @Override
    public int getType() throws RepositoryException {
        return !isMultiple() ? value.getType() : values.length > 0 ? values[0].getType() : PropertyType.UNDEFINED;
    }

    @Override
    public boolean isMultiple() {
        return values != null;
    }

    @Override
    public boolean isNode() {
        return false;
    }

    @Override
    public void accept(ItemVisitor visitor) throws RepositoryException {
        visitor.visit(this);
    }
}