/*
* 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 org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
import org.apache.jackrabbit.spi.commons.name.NameConstants;
import org.apache.jackrabbit.spi.Name;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jcr.nodetype.ItemDefinition;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.RepositoryException;
import javax.jcr.NamespaceException;
import javax.jcr.version.OnParentVersionAction;
/**
* <code>AbstractItemDefinitionTemplate</code> serves as base class for
* <code>NodeDefinitionTemplateImpl</code> and
* <code>PropertyDefinitionTemplateImpl</code>.
*/
abstract class AbstractItemDefinitionTemplate implements ItemDefinition {
private static final Logger log = LoggerFactory.getLogger(AbstractItemDefinitionTemplate.class);
private Name name;
private boolean autoCreated;
private boolean mandatory;
private int opv = OnParentVersionAction.COPY;
private boolean protectedStatus;
protected final NamePathResolver resolver;
/**
* Package private constructor
*
* @param resolver
*/
AbstractItemDefinitionTemplate(NamePathResolver resolver) {
this.resolver = resolver;
}
/**
* Package private constructor
*
* @param def
* @param resolver
* @throws javax.jcr.nodetype.ConstraintViolationException
*/
AbstractItemDefinitionTemplate(ItemDefinition def, NamePathResolver resolver) throws ConstraintViolationException {
this.resolver = resolver;
if (def instanceof ItemDefinitionImpl) {
name = ((ItemDefinitionImpl) def).itemDef.getName();
} else {
setName(def.getName());
}
autoCreated = def.isAutoCreated();
mandatory = def.isMandatory();
opv = def.getOnParentVersion();
protectedStatus = def.isProtected();
}
//-----------------------------------------------< ItemDefinition setters >
/**
* Sets the name of the child item.
*
* @param name a <code>String</code>.
* @throws ConstraintViolationException
*/
public void setName(String name) throws ConstraintViolationException {
if (ItemDefinitionImpl.ANY_NAME.equals(name)) {
// handle the * special case that isn't a valid JCR name but a valid
// name for a ItemDefinition (residual).
this.name = NameConstants.ANY_NAME;
} else {
try {
this.name = resolver.getQName(name);
} catch (RepositoryException e) {
throw new ConstraintViolationException(e);
}
}
}
/**
* Sets the auto-create status of the child item.
*
* @param autoCreated a <code>boolean</code>.
*/
public void setAutoCreated(boolean autoCreated) {
this.autoCreated = autoCreated;
}
/**
* Sets the mandatory status of the child item.
*
* @param mandatory a <code>boolean</code>.
*/
public void setMandatory(boolean mandatory) {
this.mandatory = mandatory;
}
/**
* Sets the on-parent-version status of the child item.
*
* @param opv an <code>int</code> constant member of <code>OnParentVersionAction</code>.
* @throws IllegalArgumentException If the given <code>opv</code> flag isn't valid.
*/
public void setOnParentVersion(int opv) {
// validate the given opv-action
OnParentVersionAction.nameFromValue(opv);
this.opv = opv;
}
/**
* Sets the protected status of the child item.
*
* @param protectedStatus a <code>boolean</code>.
*/
public void setProtected(boolean protectedStatus) {
this.protectedStatus = protectedStatus;
}
//-------------------------------------------------------< ItemDefinition >
/**
* {@inheritDoc}
*/
public String getName() {
if (name == null) {
return null;
} else {
try {
return resolver.getJCRName(name);
} catch (NamespaceException e) {
// should never get here
log.error("encountered unregistered namespace in item definition name", e);
return name.toString();
}
}
}
/**
* {@inheritDoc}
*/
public NodeType getDeclaringNodeType() {
return null;
}
/**
* {@inheritDoc}
*/
public boolean isAutoCreated() {
return autoCreated;
}
/**
* {@inheritDoc}
*/
public boolean isMandatory() {
return mandatory;
}
/**
* {@inheritDoc}
*/
public int getOnParentVersion() {
return opv;
}
/**
* {@inheritDoc}
*/
public boolean isProtected() {
return protectedStatus;
}
}