UINodeProperty.java
/*
* Copyright (C) 2003-2007 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.ecm.webui.component.explorer.versions;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.PropertyType;
import javax.jcr.Session;
import javax.jcr.Value;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeManager;
import javax.jcr.nodetype.PropertyDefinition;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.ecm.webui.component.explorer.UIDocumentWorkspace;
import org.exoplatform.services.jcr.RepositoryService;
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.form.UIForm;
/**
* Created by The eXo Platform SARL
* Author : Le Bien Thuy
* lebienthuy@gmail.com
* Oct 20, 2006
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/groovy/webui/component/explorer/versions/UINodeProperty.gtmpl"
)
public class UINodeProperty extends UIForm{
public UINodeProperty() {}
public List<Property> getVersionedNodeProperties() throws Exception{
RepositoryService repositoryService =
(RepositoryService)PortalContainer.getComponent(RepositoryService.class) ;
List<Property> list = new ArrayList<Property>() ;
NodeTypeManager nodeTypeManager = repositoryService.getCurrentRepository().getNodeTypeManager();
NodeType jcrFrozenNode = nodeTypeManager.getNodeType("nt:frozenNode") ;
NodeType ntVersion = nodeTypeManager.getNodeType("nt:version") ;
NodeType ntVersionHistory = nodeTypeManager.getNodeType("nt:versionHistory") ;
NodeType mixVersionable = nodeTypeManager.getNodeType("mix:versionable") ;
UIVersionInfo uiVersionInfo = getAncestorOfType(UIDocumentWorkspace.class).getChild(UIVersionInfo.class) ;
Node frozenNode = uiVersionInfo.getCurrentVersionNode().getNode("jcr:frozenNode") ;
for(PropertyIterator propertyIter = frozenNode.getProperties(); propertyIter.hasNext() ;) {
Property property = propertyIter.nextProperty() ;
boolean isDefinition = false ;
for(PropertyDefinition propDef : jcrFrozenNode.getPropertyDefinitions()) {
if(propDef.getName().equals(property.getName())) isDefinition = true ;
}
for(PropertyDefinition propDef : ntVersion.getPropertyDefinitions()) {
if(propDef.getName().equals(property.getName())) isDefinition = true ;
}
for(PropertyDefinition propDef : ntVersionHistory.getPropertyDefinitions()) {
if(propDef.getName().equals(property.getName())) isDefinition = true ;
}
for(PropertyDefinition propDef : mixVersionable.getPropertyDefinitions()) {
if(propDef.getName().equals(property.getName())) isDefinition = true ;
}
if(!isDefinition) list.add(property) ;
}
return list ;
}
public String getPropertyValue(Property property) throws Exception{
switch(property.getType()) {
case PropertyType.BINARY: return Integer.toString(PropertyType.BINARY) ;
case PropertyType.BOOLEAN :return Boolean.toString(property.getValue().getBoolean()) ;
case PropertyType.DATE : return property.getValue().getDate().getTime().toString() ;
case PropertyType.DOUBLE : return Double.toString(property.getValue().getDouble()) ;
case PropertyType.LONG : return Long.toString(property.getValue().getLong()) ;
case PropertyType.NAME : return property.getValue().getString() ;
case PropertyType.STRING : return property.getValue().getString() ;
case PropertyType.REFERENCE : {
if(property.getName().equals("exo:category") || property.getName().equals("exo:relation")) {
Session session = getSystemSession() ;
Node referenceNode = session.getNodeByUUID(property.getValue().getString()) ;
String path = referenceNode.getPath();
return path ;
}
return property.getValue().getString() ;
}
}
return null ;
}
public List<String> getPropertyMultiValues(Property property) throws Exception {
String propName = property.getName() ;
if(propName.equals("exo:category")) return getCategoriesValues(property) ;
else if(propName.equals("exo:relation")) return getRelationValues(property) ;
List<String> values = new ArrayList<String>() ;
for(Value value:property.getValues()) {
values.add(value.getString()) ;
}
return values ;
}
public boolean isMultiValue(Property prop) throws Exception{
PropertyDefinition propDef = prop.getDefinition() ;
return propDef.isMultiple() ;
}
private List<String> getReferenceValues(Property property) throws Exception {
Session session = getSystemSession() ;
List<String> pathList = new ArrayList<String>() ;
Value[] values = property.getValues() ;
for(Value value:values) {
Node referenceNode = session.getNodeByUUID(value.getString()) ;
pathList.add(referenceNode.getPath()) ;
}
return pathList ;
}
private List<String> getRelationValues(Property relationProp) throws Exception {
return getReferenceValues(relationProp) ;
}
private List<String> getCategoriesValues(Property categoryProp) throws Exception {
return getReferenceValues(categoryProp) ;
}
private Session getSystemSession() throws Exception {
ManageableRepository manageableRepository = getApplicationComponent(RepositoryService.class).getCurrentRepository();
String systemWorksapce = manageableRepository.getConfiguration().getDefaultWorkspaceName();
Session session = WCMCoreUtils.getSystemSessionProvider().getSession(systemWorksapce, manageableRepository) ;
return session ;
}
}