/*
* 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.core.nodetype;
import org.exoplatform.services.jcr.datamodel.InternalQName;
import java.util.Arrays;
/**
* Created by The eXo Platform SAS. Define base abstraction for NodeType data
* used in core. <br>
* Date: 25.11.2008
*
* @author <a href="mailto:peter.nedonosko@exoplatform.com.ua">Peter
* Nedonosko</a>
* @version $Id: NodeTypeData.java 27741 2009-02-02 16:59:51Z ksm $
*/
public class NodeTypeDataImpl implements NodeTypeData
{
protected InternalQName name;
protected InternalQName primaryItemName;
protected InternalQName[] declaredSupertypeNames;
protected PropertyDefinitionData[] declaredPropertyDefinitions;
protected NodeDefinitionData[] declaredChildNodeDefinitions;
protected Boolean hasOrderableChildNodes;
protected Boolean mixin;
// protected Boolean isAbstract;
// /**
// * Default true.
// */
// protected boolean isQueryable;
public NodeTypeDataImpl(InternalQName name, InternalQName primaryItemName, boolean mixin,
boolean hasOrderableChildNodes, InternalQName[] declaredSupertypeNames,
PropertyDefinitionData[] declaredPropertyDefinitions, NodeDefinitionData[] declaredChildNodeDefinitions)
{
this.name = name;
this.primaryItemName = primaryItemName;
this.mixin = mixin;
this.hasOrderableChildNodes = hasOrderableChildNodes;
//this.isAbstract = isAbstract;
//this.isQueryable = isQueryable;
this.declaredSupertypeNames = declaredSupertypeNames;
this.declaredPropertyDefinitions = declaredPropertyDefinitions;
this.declaredChildNodeDefinitions = declaredChildNodeDefinitions;
}
/**
* @see org.exoplatform.services.jcr.core.nodetype.NodeTypeData#getDeclaredChildNodeDefinitions()
*/
public NodeDefinitionData[] getDeclaredChildNodeDefinitions()
{
return declaredChildNodeDefinitions;
}
/**
* @see org.exoplatform.services.jcr.core.nodetype.NodeTypeData#getDeclaredPropertyDefinitions()
*/
public PropertyDefinitionData[] getDeclaredPropertyDefinitions()
{
return declaredPropertyDefinitions;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(declaredChildNodeDefinitions);
result = prime * result + Arrays.hashCode(declaredPropertyDefinitions);
result = prime * result + Arrays.hashCode(declaredSupertypeNames);
result = prime * result + (hasOrderableChildNodes ? 1231 : 1237);
result = prime * result + (mixin ? 1231 : 1237);
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((primaryItemName == null) ? 0 : primaryItemName.hashCode());
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
if (obj == null)
{
return false;
}
if (getClass() != obj.getClass())
{
return false;
}
NodeTypeDataImpl other = (NodeTypeDataImpl)obj;
if (!Arrays.deepEquals(declaredChildNodeDefinitions, other.declaredChildNodeDefinitions))
{
return false;
}
if (!Arrays.deepEquals(declaredPropertyDefinitions, other.declaredPropertyDefinitions))
{
return false;
}
if (!Arrays.deepEquals(declaredSupertypeNames, other.declaredSupertypeNames))
{
return false;
}
if (hasOrderableChildNodes != other.hasOrderableChildNodes)
{
return false;
}
if (mixin != other.mixin)
{
return false;
}
if (name == null)
{
if (other.name != null)
{
return false;
}
}
else if (!name.equals(other.name))
{
return false;
}
if (primaryItemName == null)
{
if (other.primaryItemName != null)
{
return false;
}
}
else if (!primaryItemName.equals(other.primaryItemName))
{
return false;
}
return true;
}
/**
* @see org.exoplatform.services.jcr.core.nodetype.NodeTypeData#getDeclaredSupertypeNames()
*/
public InternalQName[] getDeclaredSupertypeNames()
{
return declaredSupertypeNames;
}
/**
* @see org.exoplatform.services.jcr.core.nodetype.NodeTypeData#getPrimaryItemName()
*/
public InternalQName getPrimaryItemName()
{
return primaryItemName;
}
/**
* @see org.exoplatform.services.jcr.core.nodetype.NodeTypeData#getName()
*/
public InternalQName getName()
{
return name;
}
/**
* @see org.exoplatform.services.jcr.core.nodetype.NodeTypeData#hasOrderableChildNodes()
*/
public boolean hasOrderableChildNodes()
{
return hasOrderableChildNodes;
}
/**
* @see org.exoplatform.services.jcr.core.nodetype.NodeTypeData#isMixin()
*/
public boolean isMixin()
{
return mixin;
}
// /**
// * @see org.exoplatform.services.jcr.core.nodetype.NodeTypeData#isQueryable()
// */
// public boolean isQueryable()
// {
// return isQueryable;
// }
}