/* * 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.jcr2spi; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.jackrabbit.test.AbstractJCRTest; import org.apache.jackrabbit.test.NotExecutableException; import org.apache.jackrabbit.test.api.PropertyUtil; import javax.jcr.Property; import javax.jcr.PropertyType; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Value; import javax.jcr.ValueFactory; import java.util.Calendar; /** * <code>PropertyLengthTest</code>... */ public class PropertyLengthTest extends AbstractJCRTest { private static Logger log = LoggerFactory.getLogger(PropertyLengthTest.class); private static long getValueLength(Value val) throws RepositoryException { long valLength; if (val.getType() == PropertyType.BINARY) { valLength = PropertyUtil.countBytes(val); } else { valLength = val.getString().length(); } return valLength; } private Property getProperty(int propertyType) throws RepositoryException, NotExecutableException { Property p = PropertyUtil.searchProp(testRootNode.getSession(), testRootNode, propertyType, null); if (p == null) { try { Value val; ValueFactory factory = testRootNode.getSession().getValueFactory(); switch (propertyType) { case PropertyType.BINARY: val = factory.createValue("binaryValue", PropertyType.BINARY); break; case PropertyType.BOOLEAN: val = factory.createValue(true); break; case PropertyType.DATE: val = factory.createValue(Calendar.getInstance()); break; case PropertyType.DOUBLE: val = factory.createValue(new Double(134).doubleValue()); break; case PropertyType.LONG: val = factory.createValue(new Long(134).longValue()); break; case PropertyType.NAME: val = factory.createValue(ntBase, PropertyType.NAME); break; case PropertyType.PATH: val = factory.createValue(testRootNode.getPath(), PropertyType.PATH); break; case PropertyType.REFERENCE: Node refNode = testRootNode.addNode(nodeName1); if (refNode.canAddMixin(mixReferenceable)) { testRootNode.addMixin(mixReferenceable); } testRootNode.save(); val = factory.createValue(refNode); break; case PropertyType.STRING: val = factory.createValue("StringValue"); break; default: throw new IllegalArgumentException("Invalid property value type" + propertyType); } p = testRootNode.setProperty(propertyName1, val); } catch (RepositoryException e) { log.error("Unable to create Property of type " + propertyType); throw new NotExecutableException(); } } return p; } private static void checkLength(Property p) throws RepositoryException { if (p.isMultiple()) { Value[] vals = p.getValues(); long[] lengths = p.getLengths(); for (int i = 0; i < lengths.length; i++) { assertTrue("Wrong property length", lengths[i] == getValueLength(vals[i])); } } else { assertTrue("Wrong property length", p.getLength() == getValueLength(p.getValue())); } } public void testLengthOfBinary() throws RepositoryException, NotExecutableException { Property p = getProperty(PropertyType.BINARY); checkLength(p); } public void testLengthOfBoolean() throws RepositoryException, NotExecutableException { Property p = getProperty(PropertyType.BOOLEAN); checkLength(p); } public void testLengthOfDate() throws RepositoryException, NotExecutableException { Property p = getProperty(PropertyType.DATE); checkLength(p); } public void testLengthOfDouble() throws RepositoryException, NotExecutableException { Property p = getProperty(PropertyType.DOUBLE); checkLength(p); } public void testLengthOfLong() throws RepositoryException, NotExecutableException { Property p = getProperty(PropertyType.LONG); checkLength(p); } public void testLengthOfName() throws RepositoryException, NotExecutableException { Property p = getProperty(PropertyType.NAME); checkLength(p); } public void testLengthOfPath() throws RepositoryException, NotExecutableException { Property p = getProperty(PropertyType.PATH); checkLength(p); } public void testLengthOfReference() throws RepositoryException, NotExecutableException { Property p = getProperty(PropertyType.REFERENCE); checkLength(p); } public void testLengthOfString() throws RepositoryException, NotExecutableException { Property p = getProperty(PropertyType.STRING); checkLength(p); } }