ItemLocation.java
/*
* Copyright (C) 2003-2009 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.core;
import javax.jcr.Item;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.exoplatform.services.cms.link.NodeFinder;
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.security.IdentityConstants;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
/**
* Created by The eXo Platform SAS
* Author : Nguyen Anh Vu
* anhvurz90@gmail.com
* 5 Jul. 2011
*/
public class ItemLocation {
/** The repository. */
protected String repository;
/** The workspace. */
protected String workspace;
/** The path. */
protected String path;
/** The UUID. */
protected String uuid;
/** If session is system */
protected boolean isSystemSession;
/**
* Instantiates a new item location.
*/
public ItemLocation() {}
/**
* Instantiates a new item location.
*
* @param repository the repository
* @param workspace the workspace
* @param path the path
* @param uuid the uuid
* @param isSystem if the node session is system
*/
public ItemLocation(final String repository, final String workspace, final String path, final String uuid,
final boolean isSystem) {
this.repository = repository;
this.workspace = workspace;
this.path = path;
this.uuid = uuid;
this.isSystemSession = isSystem;
}
/**
* Instantiates a new item location.
*
* @param repository the repository
* @param workspace the workspace
* @param path the path
* @param uuid the uuid
*/
public ItemLocation(final String repository, final String workspace, final String path, final String uuid ) {
this(repository, workspace, path, uuid, false);
}
/**
* Instantiates a new item location.
*
* @param repository the repository
* @param workspace the workspace
* @param path the path
*/
public ItemLocation(final String repository, final String workspace, final String path) {
this(repository, workspace, path, null, false);
}
/**
* Instantiates a new item location.
*/
public ItemLocation(ItemLocation itemLocation) {
this(itemLocation.repository, itemLocation.workspace, itemLocation.path, itemLocation.uuid, itemLocation.isSystemSession);
}
/**
* Gets the repository.
*
* @return the repository
*/
public String getRepository() {
return repository;
}
/**
* Sets the repository.
*
* @param repository the new repository
*/
public void setRepository(String repository) {
this.repository = repository;
}
/**
* Gets the workspace.
*
* @return the workspace
*/
public String getWorkspace() {
return workspace;
}
/**
* Sets the workspace.
*
* @param workspace the new workspace
*/
public void setWorkspace(String workspace) {
this.workspace = workspace;
}
/**
* Gets the path.
*
* @return the path
*/
public String getPath() {
return path;
}
/**
* Sets the path.
*
* @param path the new path
*/
public void setPath(String path) {
this.path = path;
}
/**
* Sets the uuid.
*
* @param uuid the new uuid
*/
public void setUUID(String uuid) {
this.uuid = uuid;
}
/**
* Gets the uuid.
*
* @return the uuid
*/
public String getUUID() {
return uuid;
}
/**
* Sets the isSystemSession.
*
* @param value isSysstemSession
*/
public void setSystemSession(boolean value) {
this.isSystemSession = value;
}
/**
* Gets the isSystemSession.
*
* @return true if node session is system, false if not
*/
public boolean isSystemSession() {
return this.isSystemSession;
}
/**
* Get an ItemLocation object by an item
*
* @param item the item
*
* @return a ItemLocation object
*/
public static final ItemLocation getItemLocationByItem(final Item item) {
Session session = null;
try {
session = item.getSession();
String repository = ((ManageableRepository)session.getRepository()).getConfiguration().getName();
String workspace = session.getWorkspace().getName();
String path = item.getPath();
String uuid = null;
try {
if (item instanceof Node)
uuid = ((Node)item).getUUID();
} catch (RepositoryException e) {
uuid = null;
}
boolean isSystemSession = IdentityConstants.SYSTEM.equals(session.getUserID());
return new ItemLocation(repository, workspace, path, uuid, isSystemSession);
} catch (RepositoryException e) {
return null;
}
}
/**
* Get an item by a ItemLocation object.
*
* @param itemLocation the ItemLocation object
*
* @return an item
*/
public static final Item getItemByLocation(final ItemLocation itemLocation) {
Session session = null;
try {
ManageableRepository repository = WCMCoreUtils.getRepository();
session = (itemLocation.isSystemSession ?
WCMCoreUtils.getSystemSessionProvider() : WCMCoreUtils.getUserSessionProvider())
.getSession(itemLocation.getWorkspace(), repository);
if (itemLocation.getUUID() != null)
return session.getNodeByUUID(itemLocation.getUUID());
else {
return WCMCoreUtils.getService(NodeFinder.class).getItem(session, itemLocation.getPath());
}
} catch(PathNotFoundException pne) {
return null;
} catch (Exception e) {
return null;
}
}
}