/*
* 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;
import javax.jcr.nodetype.ItemDefinition;
import javax.jcr.RepositoryException;
import org.apache.jackrabbit.core.id.ItemId;
import org.apache.jackrabbit.core.id.NodeId;
import org.apache.jackrabbit.core.state.ItemState;
import org.apache.jackrabbit.core.state.NodeState;
import org.apache.jackrabbit.core.state.PropertyState;
/**
* Data object referenced by different <code>ItemImpl</code> instances that
* all represent the same item, i.e. items having the same <code>ItemId</code>.
*/
public abstract class ItemData {
/** Associated item id */
private final ItemId id;
/** Associated item state */
private ItemState state;
/** Associated item definition */
private ItemDefinition definition;
/** Status */
private int status;
/** The item manager */
private ItemManager itemMgr;
/**
* Create a new instance of this class.
*
* @param state item state
* @param itemMgr item manager
*/
protected ItemData(ItemState state, ItemManager itemMgr) {
this.id = state.getId();
this.state = state;
this.itemMgr = itemMgr;
this.status = ItemImpl.STATUS_NORMAL;
}
/**
* Create a new instance of this class.
*
* @param id item id
*/
protected ItemData(ItemId id) {
this.id = id;
this.status = ItemImpl.STATUS_NORMAL;
}
/**
* Return the associated item state.
*
* @return item state
*/
public ItemState getState() {
return state;
}
/**
* Set the associated item state.
*
* @param state item state
*/
protected void setState(ItemState state) {
this.state = state;
}
/**
* Return the associated item definition.
*
* @return item definition
* @throws RepositoryException if the definition cannot be retrieved.
*/
public ItemDefinition getDefinition() throws RepositoryException {
if (definition == null && itemMgr != null) {
if (isNode()) {
definition = itemMgr.getDefinition((NodeState) state);
} else {
definition = itemMgr.getDefinition((PropertyState) state);
}
}
return definition;
}
/**
* Set the associated item definition.
*
* @param definition item definition
*/
protected void setDefinition(ItemDefinition definition) {
this.definition = definition;
}
/**
* Return the status.
*
* @return status
*/
public int getStatus() {
return status;
}
/**
* Set the status.
*
* @param status
*/
protected void setStatus(int status) {
this.status = status;
}
/**
* Return a flag indicating whether item is a node.
*
* @return <code>true</code> if this item is a node;
* <code>false</code> otherwise.
*/
public boolean isNode() {
return false;
}
/**
* Return the id associated with this item.
*
* @return item id
*/
public ItemId getId() {
return id;
}
/**
* Return the parent id of this item.
*
* @return parent id
*/
public NodeId getParentId() {
return getState().getParentId();
}
/**
* {@inheritDoc}
*/
public String toString() {
return getId().toString();
}
}