/*
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.services.jcr.impl.core.nodetype;
import org.exoplatform.services.jcr.core.nodetype.ExtendedNodeTypeManager;
import org.exoplatform.services.jcr.core.nodetype.NodeDefinitionData;
import org.exoplatform.services.jcr.core.nodetype.NodeTypeData;
import org.exoplatform.services.jcr.core.nodetype.NodeTypeDataManager;
import org.exoplatform.services.jcr.dataflow.ItemDataConsumer;
import org.exoplatform.services.jcr.datamodel.InternalQName;
import org.exoplatform.services.jcr.impl.core.LocationFactory;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import javax.jcr.RepositoryException;
import javax.jcr.ValueFactory;
import javax.jcr.nodetype.NodeType;
/**
* Created by The eXo Platform SAS.
*
* @author <a href="mailto:Sergey.Kabashnyuk@gmail.com">Sergey Kabashnyuk</a>
* @version $Id: $
*/
public class NodeDefinitionImpl extends ItemDefinitionImpl implements ExtendedNodeDefinition
{
/**
* Class logger.
*/
private static final Log LOG = ExoLogger.getLogger("exo.jcr.component.core.NodeDefinitionImpl");
private final NodeDefinitionData nodeDefinitionData;
/**
* @param nodeDefinitionData
* @param nodeTypeDataManager
* @param nodeTypeManager
* @param locationFactory
* @param valueFactory
*/
public NodeDefinitionImpl(NodeDefinitionData nodeDefinitionData, NodeTypeDataManager nodeTypeDataManager,
ExtendedNodeTypeManager nodeTypeManager, LocationFactory locationFactory, ValueFactory valueFactory,
ItemDataConsumer dataManager)
{
super(nodeDefinitionData, nodeTypeDataManager, nodeTypeManager, locationFactory, valueFactory, dataManager);
this.nodeDefinitionData = nodeDefinitionData;
}
/**
* @param itemDefinitionData
* @param nodeTypeDataManager
* @param locationFactory
* @param name
*/
/**
* {@inheritDoc}
*/
public boolean allowsSameNameSiblings()
{
return nodeDefinitionData.isAllowsSameNameSiblings();
}
/**
* {@inheritDoc}
*/
public NodeType getDefaultPrimaryType()
{
if (nodeDefinitionData.getDefaultPrimaryType() == null)
return null;
return new NodeTypeImpl(nodeTypeDataManager.getNodeType(nodeDefinitionData.getDefaultPrimaryType()),
nodeTypeDataManager, nodeTypeManager, locationFactory, valueFactory, dataManager);
}
/**
* {@inheritDoc}
*/
public String getDefaultPrimaryTypeName()
{
String result = null;
if (nodeDefinitionData.getDefaultPrimaryType() != null)
{
try
{
result = locationFactory.createJCRName(nodeDefinitionData.getDefaultPrimaryType()).getAsString();
}
catch (RepositoryException e)
{
LOG.error(e.getLocalizedMessage(), e);
}
}
return result;
}
/**
* {@inheritDoc}
*/
public InternalQName getDefaultPrimaryTypeQName()
{
return nodeDefinitionData.getDefaultPrimaryType();
}
/**
* {@inheritDoc}
*/
public String[] getRequiredPrimaryTypeNames()
{
InternalQName[] requiredPrimaryTypes = nodeDefinitionData.getRequiredPrimaryTypes();
String[] result = new String[requiredPrimaryTypes.length];
try
{
for (int i = 0; i < requiredPrimaryTypes.length; i++)
{
result[i] = locationFactory.createJCRName(requiredPrimaryTypes[i]).getAsString();
}
}
catch (RepositoryException e)
{
LOG.error(e.getLocalizedMessage(), e);
}
return result;
}
/**
* {@inheritDoc}
*/
public InternalQName[] getRequiredPrimaryTypeQNames()
{
return nodeDefinitionData.getRequiredPrimaryTypes();
}
/**
* {@inheritDoc}
*/
public NodeType[] getRequiredPrimaryTypes()
{
InternalQName[] requiredPrimaryTypes = nodeDefinitionData.getRequiredPrimaryTypes();
NodeType[] result = new NodeType[requiredPrimaryTypes.length];
for (int i = 0; i < requiredPrimaryTypes.length; i++)
{
NodeTypeData ntData = nodeTypeDataManager.getNodeType(requiredPrimaryTypes[i]);
if (ntData == null)
{
LOG.error("NODE TYPE NOT FOUND " + requiredPrimaryTypes[i].getAsString());
}
else
result[i] =
new NodeTypeImpl(ntData, nodeTypeDataManager, nodeTypeManager, locationFactory, valueFactory,
dataManager);
}
return result;
}
}