package ch.x42.terye; import javax.jcr.AccessDeniedException; import javax.jcr.InvalidItemStateException; import javax.jcr.Item; import javax.jcr.ItemExistsException; import javax.jcr.ItemNotFoundException; import javax.jcr.ItemVisitor; import javax.jcr.Node; import javax.jcr.ReferentialIntegrityException; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.lock.LockException; import javax.jcr.nodetype.ConstraintViolationException; import javax.jcr.nodetype.NoSuchNodeTypeException; import javax.jcr.version.VersionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ch.x42.terye.store.ItemType; public class ItemImpl implements Item { private final Logger logger = LoggerFactory.getLogger(getClass()); protected SessionImpl session; protected Path path; public ItemImpl(SessionImpl session, Path path) { this.session = session; this.path = path; } @Override public void accept(ItemVisitor visitor) throws RepositoryException { // TODO Auto-generated method stub } @Override public Item getAncestor(int depth) throws ItemNotFoundException, AccessDeniedException, RepositoryException { // TODO Auto-generated method stub return null; } @Override public int getDepth() throws RepositoryException { // TODO Auto-generated method stub return 0; } @Override public String getName() throws RepositoryException { return path.getLastSegment(); } @Override public Node getParent() throws ItemNotFoundException, AccessDeniedException, RepositoryException { if (path.getParent() == null) { throw new ItemNotFoundException("The root node has no parent."); } return session.getItemManager().getNode(path.getParent()); } @Override public String getPath() throws RepositoryException { return path.toString(); } @Override public Session getSession() throws RepositoryException { return session; } @Override public boolean isModified() { // TODO Auto-generated method stub return false; } @Override public boolean isNew() { // TODO Auto-generated method stub return false; } @Override public boolean isNode() { return this instanceof NodeImpl; } @Override public boolean isSame(Item arg0) throws RepositoryException { // TODO Auto-generated method stub return false; } @Override public void refresh(boolean arg0) throws InvalidItemStateException, RepositoryException { logger.debug("refresh({})", arg0); } @Override public void remove() throws VersionException, LockException, ConstraintViolationException, AccessDeniedException, RepositoryException { session.getItemManager().removeItem(path); } @Override public void save() throws AccessDeniedException, ItemExistsException, ConstraintViolationException, InvalidItemStateException, ReferentialIntegrityException, VersionException, LockException, NoSuchNodeTypeException, RepositoryException { logger.debug("save()"); // XXX: temporarily save the whole session getSession().save(); } public ItemType getItemType() { return isNode() ? ItemType.NODE : ItemType.PROPERTY; } }