org.apache.jackrabbit.spi.commons.nodetype.QPropertyDefinitionBuilder 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.spi.commons.nodetype;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.jcr.PropertyType;
import javax.jcr.nodetype.PropertyDefinition;
import org.apache.jackrabbit.commons.query.qom.Operator;
import org.apache.jackrabbit.spi.QPropertyDefinition;
import org.apache.jackrabbit.spi.QValue;
import org.apache.jackrabbit.spi.QValueConstraint;
import org.apache.jackrabbit.spi.commons.QPropertyDefinitionImpl;
/**
* A builder for {@link QPropertyDefinition}.
*/
public class QPropertyDefinitionBuilder extends QItemDefinitionBuilder {
private int requiredType = PropertyType.UNDEFINED;
private List valueConstraints = new ArrayList();
private List defaultValues;
private boolean isMultiple = false;
private boolean fullTextSearchable = true;
private boolean queryOrderable = true;
private String[] queryOperators = Operator.getAllQueryOperators();
/**
* @param type the required type of the property definition being built.
* @see PropertyDefinition#getRequiredType()
*/
public void setRequiredType(int type) {
requiredType = type;
}
/**
* @return the required type of the property definition being built.
* @see PropertyDefinition#getRequiredType()
*/
public int getRequiredType() {
return requiredType;
}
/**
* Adds a value constraint of the property definition being built.
*
* @param constraint the constraint.
*/
public void addValueConstraint(QValueConstraint constraint) {
valueConstraints.add(constraint);
}
/**
* @param constraints array of value constraints of the property definition
* being built.
* @see PropertyDefinition#getValueConstraints()
*/
public void setValueConstraints(QValueConstraint[] constraints) {
valueConstraints.clear();
valueConstraints.addAll(Arrays.asList(constraints));
}
/**
* @return array of value constraints of the property definition being
* built.
* @see PropertyDefinition#getValueConstraints()
*/
public QValueConstraint[] getValueConstraints() {
return valueConstraints.toArray(new QValueConstraint[valueConstraints.size()]);
}
/**
* Adds a default value of the property definition being built.
*
* @param value a default value.
*/
public void addDefaultValue(QValue value) {
if (defaultValues == null) {
defaultValues = new ArrayList();
}
defaultValues.add(value);
}
/**
* @param values array of default values of the property definition being
* built.
* @see PropertyDefinition#getDefaultValues()
*/
public void setDefaultValues(QValue[] values) {
if (values == null) {
defaultValues = null;
} else {
// replace
defaultValues = new ArrayList(Arrays.asList(values));
}
}
/**
* @return array of default values of the property definition being built or
* null
if no default values are defined.
* @see PropertyDefinition#getDefaultValues()
*/
public QValue[] getDefaultValues() {
if (defaultValues == null) {
return null;
} else {
return defaultValues.toArray(new QValue[defaultValues.size()]);
}
}
/**
* @param isMultiple true if building a 'multiple' property definition.
* @see PropertyDefinition#isMultiple()
*/
public void setMultiple(boolean isMultiple) {
this.isMultiple = isMultiple;
}
/**
* @return true if building a 'multiple' property definition.
* @see PropertyDefinition#isMultiple()
*/
public boolean getMultiple() {
return isMultiple;
}
/**
* @return true
if the property is fulltext searchable
* @see PropertyDefinition#isFullTextSearchable()
*/
public boolean getFullTextSearchable() {
return fullTextSearchable;
}
/**
* @param fullTextSearchable true
if building a 'fulltext
* searchable' property definition
* @see PropertyDefinition#isFullTextSearchable()
*/
public void setFullTextSearchable(boolean fullTextSearchable) {
this.fullTextSearchable = fullTextSearchable;
}
/**
* @return true
if the property is orderable in a query
* @see PropertyDefinition#isQueryOrderable()
*/
public boolean getQueryOrderable() {
return queryOrderable;
}
/**
* @param queryOrderable true
if the property is orderable in a
* query
* @see PropertyDefinition#isQueryOrderable()
*/
public void setQueryOrderable(boolean queryOrderable) {
this.queryOrderable = queryOrderable;
}
/**
* @return the query operators of the property
* @see PropertyDefinition#getAvailableQueryOperators()
*/
public String[] getAvailableQueryOperators() {
return queryOperators;
}
/**
* @param queryOperators the query operators of the property
* @see PropertyDefinition#getAvailableQueryOperators()
*/
public void setAvailableQueryOperators(String[] queryOperators) {
this.queryOperators = queryOperators;
}
/**
* Creates a new {@link QPropertyDefinition} instance based on the state of
* this builder.
*
* @return a new {@link QPropertyDefinition} instance.
* @throws IllegalStateException if the instance has not the necessary
* information to build the QPropertyDefinition
* instance.
*/
public QPropertyDefinition build() throws IllegalStateException {
return new QPropertyDefinitionImpl(getName(), getDeclaringNodeType(), getAutoCreated(), getMandatory(), getOnParentVersion(), getProtected(), getDefaultValues(), getMultiple(), getRequiredType(), getValueConstraints(), getAvailableQueryOperators(), getFullTextSearchable(), getQueryOrderable());
}
}