blob: f2f4bb798a485e5ade08a57c0de14347eaf7c5b6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. 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.base;
import javax.jcr.Item;
import javax.jcr.ItemNotFoundException;
import javax.jcr.ItemVisitor;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.UnsupportedRepositoryOperationException;
/**
* Item base class.
*/
public class BaseItem implements Item {
/**
* Implemented by calling <code>getParent().getPath()</code> and
* appending <code>getName()</code> to the returned parent path.
* Returns the root path <code>/</code> if an
* {@link ItemNotFoundException ItemNotFoundException} is thrown by
* <code>getParent()</code> (indicating that this is the root node).
* {@inheritDoc}
*/
public String getPath() throws RepositoryException {
try {
String path = getParent().getPath();
if (path.equals("/")) {
return path + getName();
} else {
return path + "/" + getName();
}
} catch (ItemNotFoundException e) {
return "/";
}
}
/** Not implemented. {@inheritDoc} */
public String getName() throws RepositoryException {
throw new UnsupportedRepositoryOperationException();
}
/**
* Implemented by calling <code>getDepth()</code> and returning either
* this item, <code>getSession().getRootNode()</code>, or
* <code>getParent().getAncestor()</code>, or throwing an
* {@link ItemNotFoundException ItemNotFoundException} depending on the
* given depth.
* {@inheritDoc}
*/
public Item getAncestor(int depth) throws RepositoryException {
int thisDepth = getDepth();
if (thisDepth == depth) {
return this;
} else if (depth == 0) {
return getSession().getRootNode();
} else if (depth > 0 && depth < thisDepth) {
return getParent().getAncestor(depth);
} else {
throw new ItemNotFoundException("Invalid ancestor depth " + depth);
}
}
/** Not implemented. {@inheritDoc} */
public Node getParent() throws RepositoryException {
throw new UnsupportedRepositoryOperationException();
}
/**
* Implemented by calling <code>getParent().getDepth() + 1</code> and
* returning <code>0</code> if an
* {@link ItemNotFoundException ItemNotFoundException} is thrown by
* <code>getParent()</code> (indicating that this is the root node).
* {@inheritDoc}
*/
public int getDepth() throws RepositoryException {
try {
return getParent().getDepth() + 1;
} catch (ItemNotFoundException e) {
return 0;
}
}
/** Not implemented. {@inheritDoc} */
public Session getSession() throws RepositoryException {
throw new UnsupportedRepositoryOperationException();
}
/** Always returns <code>false</code>. {@inheritDoc} */
public boolean isNode() {
return false;
}
/** Not implemented. {@inheritDoc} */
public boolean isNew() {
return false;
}
/** Not implemented. {@inheritDoc} */
public boolean isModified() {
return false;
}
/** Not implemented. {@inheritDoc} */
public boolean isSame(Item otherItem) {
try {
return getPath().equals(otherItem.getPath());
} catch (RepositoryException e) {
return false;
}
}
/** Does nothing. {@inheritDoc} */
public void accept(ItemVisitor visitor) throws RepositoryException {
}
/** Not implemented. {@inheritDoc} */
public void save() throws RepositoryException {
throw new UnsupportedRepositoryOperationException();
}
/** Not implemented. {@inheritDoc} */
public void refresh(boolean keepChanges) throws RepositoryException {
throw new UnsupportedRepositoryOperationException();
}
/** Not implemented. {@inheritDoc} */
public void remove() throws RepositoryException {
throw new UnsupportedRepositoryOperationException();
}
}