ResultNode.java
/*
* Copyright (C) 2003-2008 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.services.wcm.search;
import java.io.InputStream;
import java.util.Calendar;
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.MergeException;
import javax.jcr.NoSuchWorkspaceException;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.ReferentialIntegrityException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
import javax.jcr.ValueFormatException;
import javax.jcr.lock.Lock;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.nodetype.NodeDefinition;
import javax.jcr.nodetype.NodeType;
import javax.jcr.query.Row;
import javax.jcr.version.Version;
import javax.jcr.version.VersionException;
import javax.jcr.version.VersionHistory;
import org.apache.commons.lang.StringEscapeUtils;
import org.exoplatform.services.wcm.core.NodeLocation;
/**
* Created by The eXo Platform SAS
* Author : Hoa Pham
* hoa.phamvu@exoplatform.com
* Feb 2, 2009
*/
public class ResultNode implements Node{
/** The node. */
private NodeLocation nodeLocation;
/** The score. */
private float score;
/** The excerpt. */
private String excerpt;
/** user navigation node's uri **/
private String userNavigationURI;
/**
* Instantiates a new result node.
*
* @param node the node
* @param row the row
*
* @throws RepositoryException the repository exception
*/
public ResultNode(Node node, Row row) throws RepositoryException{
this.nodeLocation = NodeLocation.getNodeLocationByNode(node);
if(row != null) {
Value excerpt = row.getValue("rep:excerpt(.)");
this.excerpt = excerpt == null ? "" : excerpt.getString();
this.score = row.getValue("jcr:score").getLong();
}
}
public ResultNode(Node node, float score, String excerpt) {
this.nodeLocation = NodeLocation.getNodeLocationByNode(node);
this.excerpt = excerpt;
this.score = score;
}
public ResultNode(Node node, Row row, String userNavURI) throws RepositoryException {
this.nodeLocation = NodeLocation.getNodeLocationByNode(node);
this.userNavigationURI = userNavURI;
Value excerpt = row.getValue("rep:excerpt(.)");
this.excerpt = excerpt == null ? "" : excerpt.getString();
this.score = row.getValue("jcr:score").getLong();
}
/**
* Gets the node.
*
* @return the node
*/
public Node getNode() { return NodeLocation.getNodeByLocation(nodeLocation); }
/**
* Sets the node.
*
* @param node the new node
*/
public void setNode(Node node) { this.nodeLocation = NodeLocation.getNodeLocationByNode(node); }
/**
* @param userNavigationURI the userNavigationURI to set
*/
public void setUserNavigationURI(String userNavigationURI) {
this.userNavigationURI = userNavigationURI;
}
/**
* @return the userNavigationURI
*/
public String getUserNavigationURI() {
return userNavigationURI;
}
/**
* Gets the score.
*
* @return the score
*/
public float getScore() { return score; }
/**
* Sets the score.
*
* @param score the new score
*/
public void setScore(float score) { this.score = score; }
/**
* Gets the excerpt.
*
* @return the excerpt
*/
public String getExcerpt() {
excerpt = StringEscapeUtils.unescapeHtml(excerpt);
return excerpt;
}
public String getEditor() {
String editor = null;
try {
if (getNode().hasProperty("exo:owner")) {
editor = getNode().getProperty("exo:owner").getString();
}
} catch (Exception ex) {
editor = null;
}
return editor;
}
/**
* Sets the excerpt.
*
* @param excerpt the new excerpt
*/
public void setExcerpt(String excerpt) {
this.excerpt = excerpt;
}
/**
* Gets the title.
*
* @return the title
*
* @throws Exception the exception
*/
public String getTitle() throws Exception {
if(getNode().hasProperty("exo:title")) {
return getNode().getProperty("exo:title").getString();
}
return getNode().getName();
}
/**
* Gets the summary.
*
* @return the summary
*
* @throws Exception the exception
*/
public String getSummary() throws Exception {
if(getNode().hasProperty("exo:summary")) {
return getNode().getProperty("exo:summary").getString();
}
return null;
}
/**
* Get the meta tag SEO's description of page node
*
* @return
* @throws Exception
*/
public String getDescription() throws Exception {
if (getNode().hasProperty("exo:metaDescription")) {
return getNode().getProperty("exo:metaDescription").getString();
}
return null;
}
/* (non-Javadoc)
* @see javax.jcr.Node#addMixin(java.lang.String)
*/
public void addMixin(String name) throws NoSuchNodeTypeException, VersionException,
ConstraintViolationException, LockException, RepositoryException {
throw new ConstraintViolationException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#addNode(java.lang.String)
*/
public Node addNode(String name) throws ItemExistsException, PathNotFoundException,
VersionException, ConstraintViolationException, LockException, RepositoryException {
throw new ConstraintViolationException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#addNode(java.lang.String, java.lang.String)
*/
public Node addNode(String name, String type) throws ItemExistsException,
PathNotFoundException, NoSuchNodeTypeException, LockException, VersionException,
ConstraintViolationException, RepositoryException {
throw new ConstraintViolationException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#canAddMixin(java.lang.String)
*/
public boolean canAddMixin(String name) throws NoSuchNodeTypeException, RepositoryException {
throw new ConstraintViolationException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#cancelMerge(javax.jcr.version.Version)
*/
public void cancelMerge(Version version) throws VersionException, InvalidItemStateException,
UnsupportedRepositoryOperationException, RepositoryException {
throw new ConstraintViolationException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#checkin()
*/
public Version checkin() throws VersionException, UnsupportedRepositoryOperationException,
InvalidItemStateException, LockException, RepositoryException {
throw new ConstraintViolationException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#checkout()
*/
public void checkout() throws UnsupportedRepositoryOperationException, LockException,
RepositoryException {
throw new ConstraintViolationException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#doneMerge(javax.jcr.version.Version)
*/
public void doneMerge(Version version) throws VersionException, InvalidItemStateException,
UnsupportedRepositoryOperationException, RepositoryException {
throw new ConstraintViolationException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#getBaseVersion()
*/
public Version getBaseVersion() throws UnsupportedRepositoryOperationException,
RepositoryException {
return getNode().getBaseVersion();
}
/* (non-Javadoc)
* @see javax.jcr.Node#getCorrespondingNodePath(java.lang.String)
*/
public String getCorrespondingNodePath(String nodePath) throws ItemNotFoundException,
NoSuchWorkspaceException, AccessDeniedException, RepositoryException {
return getNode().getCorrespondingNodePath(nodePath);
}
/* (non-Javadoc)
* @see javax.jcr.Node#getDefinition()
*/
public NodeDefinition getDefinition() throws RepositoryException {
return getNode().getDefinition();
}
/* (non-Javadoc)
* @see javax.jcr.Node#getIndex()
*/
public int getIndex() throws RepositoryException {
return getNode().getIndex();
}
/* (non-Javadoc)
* @see javax.jcr.Node#getLock()
*/
public Lock getLock() throws UnsupportedRepositoryOperationException, LockException,
AccessDeniedException, RepositoryException {
return getNode().getLock();
}
/* (non-Javadoc)
* @see javax.jcr.Node#getMixinNodeTypes()
*/
public NodeType[] getMixinNodeTypes() throws RepositoryException {
return getNode().getMixinNodeTypes();
}
/* (non-Javadoc)
* @see javax.jcr.Node#getNode(java.lang.String)
*/
public Node getNode(String name) throws PathNotFoundException, RepositoryException {
return getNode().getNode(name);
}
/* (non-Javadoc)
* @see javax.jcr.Node#getNodes()
*/
public NodeIterator getNodes() throws RepositoryException {
return getNode().getNodes();
}
/* (non-Javadoc)
* @see javax.jcr.Node#getNodes(java.lang.String)
*/
public NodeIterator getNodes(String name) throws RepositoryException {
return getNode().getNodes(name);
}
/* (non-Javadoc)
* @see javax.jcr.Node#getPrimaryItem()
*/
public Item getPrimaryItem() throws ItemNotFoundException, RepositoryException {
return getNode().getPrimaryItem();
}
/* (non-Javadoc)
* @see javax.jcr.Node#getPrimaryNodeType()
*/
public NodeType getPrimaryNodeType() throws RepositoryException {
return getNode().getPrimaryNodeType();
}
/* (non-Javadoc)
* @see javax.jcr.Node#getProperties()
*/
public PropertyIterator getProperties() throws RepositoryException {
return getNode().getProperties();
}
/* (non-Javadoc)
* @see javax.jcr.Node#getProperties(java.lang.String)
*/
public PropertyIterator getProperties(String name) throws RepositoryException {
return getNode().getProperties(name);
}
/* (non-Javadoc)
* @see javax.jcr.Node#getReferences()
*/
public PropertyIterator getReferences() throws RepositoryException {
return getNode().getReferences();
}
/* (non-Javadoc)
* @see javax.jcr.Node#getUUID()
*/
public String getUUID() throws UnsupportedRepositoryOperationException, RepositoryException {
return getNode().getUUID();
}
/* (non-Javadoc)
* @see javax.jcr.Node#getVersionHistory()
*/
public VersionHistory getVersionHistory() throws UnsupportedRepositoryOperationException,
RepositoryException {
return getNode().getVersionHistory();
}
/* (non-Javadoc)
* @see javax.jcr.Node#hasNode(java.lang.String)
*/
public boolean hasNode(String name) throws RepositoryException {
return getNode().hasNode(name);
}
/* (non-Javadoc)
* @see javax.jcr.Node#hasNodes()
*/
public boolean hasNodes() throws RepositoryException {
return getNode().hasNodes();
}
/* (non-Javadoc)
* @see javax.jcr.Node#hasProperties()
*/
public boolean hasProperties() throws RepositoryException {
return getNode().hasProperties();
}
/* (non-Javadoc)
* @see javax.jcr.Node#hasProperty(java.lang.String)
*/
public boolean hasProperty(String name) throws RepositoryException {
return getNode().hasProperty(name);
}
/* (non-Javadoc)
* @see javax.jcr.Node#holdsLock()
*/
public boolean holdsLock() throws RepositoryException {
return getNode().holdsLock();
}
/* (non-Javadoc)
* @see javax.jcr.Node#isCheckedOut()
*/
public boolean isCheckedOut() throws RepositoryException {
return getNode().isCheckedOut();
}
/* (non-Javadoc)
* @see javax.jcr.Node#isLocked()
*/
public boolean isLocked() throws RepositoryException {
return getNode().isLocked();
}
/* (non-Javadoc)
* @see javax.jcr.Node#isNodeType(java.lang.String)
*/
public boolean isNodeType(String type) throws RepositoryException {
return getNode().isNodeType(type);
}
/* (non-Javadoc)
* @see javax.jcr.Node#lock(boolean, boolean)
*/
public Lock lock(boolean arg0, boolean arg1) throws UnsupportedRepositoryOperationException,
LockException, AccessDeniedException, InvalidItemStateException, RepositoryException {
throw new UnsupportedRepositoryOperationException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#merge(java.lang.String, boolean)
*/
public NodeIterator merge(String arg0, boolean arg1) throws NoSuchWorkspaceException,
AccessDeniedException, MergeException, LockException, InvalidItemStateException,
RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#orderBefore(java.lang.String, java.lang.String)
*/
public void orderBefore(String arg0, String arg1)
throws UnsupportedRepositoryOperationException, VersionException,
ConstraintViolationException, ItemNotFoundException, LockException, RepositoryException {
getNode().orderBefore(arg0, arg1);
}
/* (non-Javadoc)
* @see javax.jcr.Node#removeMixin(java.lang.String)
*/
public void removeMixin(String arg0) throws NoSuchNodeTypeException, VersionException,
ConstraintViolationException, LockException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#restore(java.lang.String, boolean)
*/
public void restore(String arg0, boolean arg1) throws VersionException, ItemExistsException,
UnsupportedRepositoryOperationException, LockException, InvalidItemStateException,
RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#restore(javax.jcr.version.Version, boolean)
*/
public void restore(Version arg0, boolean arg1) throws VersionException, ItemExistsException,
UnsupportedRepositoryOperationException, LockException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#restore(javax.jcr.version.Version, java.lang.String, boolean)
*/
public void restore(Version arg0, String arg1, boolean arg2) throws PathNotFoundException,
ItemExistsException, VersionException, ConstraintViolationException,
UnsupportedRepositoryOperationException, LockException, InvalidItemStateException,
RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#restoreByLabel(java.lang.String, boolean)
*/
public void restoreByLabel(String arg0, boolean arg1) throws VersionException,
ItemExistsException, UnsupportedRepositoryOperationException, LockException,
InvalidItemStateException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, javax.jcr.Value)
*/
public Property setProperty(String arg0, Value arg1) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, javax.jcr.Value[])
*/
public Property setProperty(String arg0, Value[] arg1) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, java.lang.String[])
*/
public Property setProperty(String arg0, String[] arg1) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, java.lang.String)
*/
public Property setProperty(String arg0, String arg1) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, java.io.InputStream)
*/
public Property setProperty(String arg0, InputStream arg1) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, boolean)
*/
public Property setProperty(String arg0, boolean arg1) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, double)
*/
public Property setProperty(String arg0, double arg1) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, long)
*/
public Property setProperty(String arg0, long arg1) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, java.util.Calendar)
*/
public Property setProperty(String arg0, Calendar arg1) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, javax.jcr.Node)
*/
public Property setProperty(String arg0, Node arg1) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, javax.jcr.Value, int)
*/
public Property setProperty(String arg0, Value arg1, int arg2) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, javax.jcr.Value[], int)
*/
public Property setProperty(String arg0, Value[] arg1, int arg2) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, java.lang.String[], int)
*/
public Property setProperty(String arg0, String[] arg1, int arg2) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#setProperty(java.lang.String, java.lang.String, int)
*/
public Property setProperty(String arg0, String arg1, int arg2) throws ValueFormatException,
VersionException, LockException, ConstraintViolationException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#unlock()
*/
public void unlock() throws UnsupportedRepositoryOperationException, LockException,
AccessDeniedException, InvalidItemStateException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#update(java.lang.String)
*/
public void update(String arg0) throws NoSuchWorkspaceException, AccessDeniedException,
LockException, InvalidItemStateException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Item#accept(javax.jcr.ItemVisitor)
*/
public void accept(ItemVisitor arg0) throws RepositoryException {
getNode().accept(arg0);
}
/* (non-Javadoc)
* @see javax.jcr.Item#getAncestor(int)
*/
public Item getAncestor(int arg0) throws ItemNotFoundException, AccessDeniedException,
RepositoryException {
return getNode().getAncestor(arg0);
}
/* (non-Javadoc)
* @see javax.jcr.Item#getDepth()
*/
public int getDepth() throws RepositoryException {
return getNode().getDepth();
}
/* (non-Javadoc)
* @see javax.jcr.Item#getName()
*/
public String getName() throws RepositoryException {
return getNode().getName();
}
/* (non-Javadoc)
* @see javax.jcr.Item#isModified()
*/
public boolean isModified() {
return getNode().isModified();
}
/* (non-Javadoc)
* @see javax.jcr.Item#isNew()
*/
public boolean isNew() {
return getNode().isNew();
}
/* (non-Javadoc)
* @see javax.jcr.Item#isNode()
*/
public boolean isNode() {
return getNode().isNode();
}
/* (non-Javadoc)
* @see javax.jcr.Item#isSame(javax.jcr.Item)
*/
public boolean isSame(Item arg0) throws RepositoryException {
return getNode().isSame(arg0);
}
/* (non-Javadoc)
* @see javax.jcr.Item#refresh(boolean)
*/
public void refresh(boolean arg0) throws InvalidItemStateException, RepositoryException {
getNode().refresh(arg0);
}
/* (non-Javadoc)
* @see javax.jcr.Item#remove()
*/
public void remove() throws VersionException, LockException, ConstraintViolationException,
RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Item#save()
*/
public void save() throws AccessDeniedException, ItemExistsException,
ConstraintViolationException, InvalidItemStateException, ReferentialIntegrityException,
VersionException, LockException, NoSuchNodeTypeException, RepositoryException {
throw new RepositoryException("Unsupported this method");
}
/* (non-Javadoc)
* @see javax.jcr.Node#getProperty(java.lang.String)
*/
public Property getProperty(String arg0) throws PathNotFoundException, RepositoryException {
return getNode().getProperty(arg0);
}
/* (non-Javadoc)
* @see javax.jcr.Item#getParent()
*/
public Node getParent() throws ItemNotFoundException, AccessDeniedException,
RepositoryException {
return getNode().getParent();
}
/* (non-Javadoc)
* @see javax.jcr.Item#getPath()
*/
public String getPath() throws RepositoryException {
return getNode().getPath();
}
/* (non-Javadoc)
* @see javax.jcr.Item#getSession()
*/
public Session getSession() throws RepositoryException {
return getNode().getSession();
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
try {
ResultNode resNode = (ResultNode)obj;
if(getNode().getPath().equals(resNode.getNode().getPath())) return true;
} catch(Exception e) {
return false;
}
return false;
}
@Override
public int hashCode() {
return nodeLocation.hashCode();
}
}