/*
* 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.registration;
import org.exoplatform.services.jcr.core.ExtendedPropertyType;
import org.exoplatform.services.jcr.core.nodetype.PropertyDefinitionData;
import org.exoplatform.services.jcr.dataflow.DataManager;
import org.exoplatform.services.jcr.dataflow.ItemState;
import org.exoplatform.services.jcr.dataflow.PlainChangesLog;
import org.exoplatform.services.jcr.datamodel.InternalQName;
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.datamodel.PropertyData;
import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.dataflow.TransientNodeData;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.jcr.RepositoryException;
import javax.jcr.version.OnParentVersionAction;
/**
* Created by The eXo Platform SAS.
*
* @author <a href="mailto:Sergey.Kabashnyuk@gmail.com">Sergey Kabashnyuk</a>
* @version $Id$
*/
public class PropertyDefinitionAccessProvider extends AbstractItemDefinitionAccessProvider
{
public PropertyDefinitionAccessProvider(DataManager dataManager)
{
super(dataManager);
}
public PropertyDefinitionData read(NodeData nodeData, InternalQName declaringNodeType) throws NodeTypeReadException,
RepositoryException
{
if (Constants.NT_PROPERTYDEFINITION.equals(nodeData.getPrimaryTypeName()))
{
// null if residual;
InternalQName name = readName(nodeData, null, Constants.JCR_NAME);
boolean protectedItem = readMandatoryBoolean(nodeData, null, Constants.JCR_PROTECTED);
boolean autoCreated = readMandatoryBoolean(nodeData, null, Constants.JCR_AUTOCREATED);
boolean mandatory = readMandatoryBoolean(nodeData, null, Constants.JCR_MANDATORY);
int onParentVersion =
OnParentVersionAction.valueFromName(readMandatoryString(nodeData, Constants.JCR_ONPARENTVERSION));
int requiredType =
ExtendedPropertyType.valueFromName(readMandatoryString(nodeData, Constants.JCR_REQUIREDTYPE));
boolean multiple = readMandatoryBoolean(nodeData, null, Constants.JCR_MULTIPLE);
String[] valueConstraints = readStrings(nodeData, null, Constants.JCR_VALUECONSTRAINTS);
String[] defaultValues = readStrings(nodeData, null, Constants.JCR_DEFAULTVALUES);
return new PropertyDefinitionData(name, declaringNodeType, autoCreated, mandatory, onParentVersion,
protectedItem, requiredType, valueConstraints, defaultValues, multiple);
}
return null;
}
public PropertyDefinitionData read(NodeData nodeData, List<PropertyData> props, InternalQName declaringNodeType) throws NodeTypeReadException,
RepositoryException
{
Map<InternalQName, PropertyData> mapProps = new HashMap<InternalQName, PropertyData>();
for (final PropertyData propertyData : props)
{
mapProps.put(propertyData.getQPath().getName(), propertyData);
}
if (Constants.NT_PROPERTYDEFINITION.equals(nodeData.getPrimaryTypeName()))
{
InternalQName name = readName(nodeData, mapProps.get(Constants.JCR_NAME), Constants.JCR_NAME);
boolean protectedItem = readMandatoryBoolean(nodeData, mapProps.get(Constants.JCR_PROTECTED), Constants.JCR_PROTECTED);
boolean autoCreated = readMandatoryBoolean(nodeData, mapProps.get(Constants.JCR_AUTOCREATED), Constants.JCR_AUTOCREATED);
boolean mandatory = readMandatoryBoolean(nodeData, mapProps.get(Constants.JCR_MANDATORY), Constants.JCR_MANDATORY);
int onParentVersion =
OnParentVersionAction.valueFromName(readMandatoryString(nodeData, mapProps.get(Constants.JCR_ONPARENTVERSION), Constants.JCR_ONPARENTVERSION));
int requiredType =
ExtendedPropertyType.valueFromName(readMandatoryString(nodeData, mapProps.get(Constants.JCR_REQUIREDTYPE), Constants.JCR_REQUIREDTYPE));
boolean multiple = readMandatoryBoolean(nodeData, mapProps.get(Constants.JCR_MULTIPLE), Constants.JCR_MULTIPLE);
String[] valueConstraints = readStrings(nodeData, mapProps.get(Constants.JCR_VALUECONSTRAINTS), Constants.JCR_VALUECONSTRAINTS);
String[] defaultValues = readStrings(nodeData, mapProps.get(Constants.JCR_DEFAULTVALUES), Constants.JCR_DEFAULTVALUES);
return new PropertyDefinitionData(name, declaringNodeType, autoCreated, mandatory, onParentVersion,
protectedItem, requiredType, valueConstraints, defaultValues, multiple);
}
return null;
}
public void write(PlainChangesLog changesLog, NodeData declaredNodeType,
PropertyDefinitionData propertyDefinitionData, int index)
{
NodeData propertyDefinition =
TransientNodeData.createNodeData(declaredNodeType, Constants.JCR_PROPERTYDEFINITION,
Constants.NT_PROPERTYDEFINITION, index);
changesLog.add(ItemState.createAddedState(propertyDefinition));
writeItemDefinition(changesLog, propertyDefinition, propertyDefinitionData);
writeName(changesLog, propertyDefinition, Constants.JCR_PRIMARYTYPE, propertyDefinition.getPrimaryTypeName());
writeString(changesLog, propertyDefinition, Constants.JCR_REQUIREDTYPE, ExtendedPropertyType
.nameFromValue(propertyDefinitionData.getRequiredType()));
writeBoolean(changesLog, propertyDefinition, Constants.JCR_MULTIPLE, propertyDefinitionData.isMultiple());
// writeBoolean(changesLog, propertyDefinition, Constants.JCR_QUERYORDERABLE, propertyDefinitionData
// .isQueryOrderable());
// writeStrings(changesLog, propertyDefinition, Constants.JCR_AVAILABLEQUERYOPERATORS, propertyDefinitionData
// .getAvailableQueryOperators());
// writeBoolean(changesLog, propertyDefinition, Constants.JCR_ISFULLTEXTSEARCHABLE, propertyDefinitionData
// .isFullTextSearchable());
if (propertyDefinitionData.getValueConstraints() != null
&& propertyDefinitionData.getValueConstraints().length != 0)
{
writeStrings(changesLog, propertyDefinition, Constants.JCR_VALUECONSTRAINTS, propertyDefinitionData
.getValueConstraints());
}
if (propertyDefinitionData.getDefaultValues() != null && propertyDefinitionData.getDefaultValues().length != 0)
{
writeStrings(changesLog, propertyDefinition, Constants.JCR_DEFAULTVALUES, propertyDefinitionData
.getDefaultValues());
}
}
}