/* * 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 java.util.ArrayList; import java.util.List; /** * Created by The eXo Platform SAS<br> * * The NodeTypeValue interface represents a simple container structure used to define node types * which are then registered through the ExtendedNodeTypeManager. * * @author <a href="mailto:gennady.azarenkov@exoplatform.com">Gennady Azarenkov</a> * @version $Id: NodeTypeValue.java 11907 2008-03-13 15:36:21Z ksm $ * @LevelAPI Unsupported */ public final class NodeTypeValue { protected String name; protected boolean mixin; protected boolean orderableChild; protected String primaryItemName; protected List<String> declaredSupertypeNames; protected List<PropertyDefinitionValue> declaredPropertyDefinitionValues; protected List<NodeDefinitionValue> declaredChildNodeDefinitionValues; public NodeTypeValue() { } /** * @return Returns the declaredSupertypeNames. */ public List<String> getDeclaredSupertypeNames() { return declaredSupertypeNames; } /** * @param declaredSupertypeNames The declaredSupertypeNames to set. */ public void setDeclaredSupertypeNames(List<String> declaredSupertypeNames) { this.declaredSupertypeNames = declaredSupertypeNames; } /** * @return Returns the mixin. */ public boolean isMixin() { return mixin; } /** * @param mixin The mixin to set. */ public void setMixin(boolean mixin) { this.mixin = mixin; } /** * @return Returns the name. */ public String getName() { return name; } /** * @param name The name to set. */ public void setName(String name) { this.name = name; } /** * @return Returns the orderableChild. */ public boolean isOrderableChild() { return orderableChild; } /** * @param orderableChild The orderableChild to set. */ public void setOrderableChild(boolean orderableChild) { this.orderableChild = orderableChild; } /** * @return Returns the primaryItemName. */ public String getPrimaryItemName() { return primaryItemName; } /** * @param primaryItemName The primaryItemName to set. */ public void setPrimaryItemName(String primaryItemName) { this.primaryItemName = primaryItemName; } /** * @return Returns the declaredChildNodeDefinitionValues. */ public List<NodeDefinitionValue> getDeclaredChildNodeDefinitionValues() { return declaredChildNodeDefinitionValues; } /** * @param declaredChildNodeDefinitionValues The * declaredChildNodeDefinitionValues to set. */ public void setDeclaredChildNodeDefinitionValues(List<NodeDefinitionValue> declaredChildNodeDefinitionValues) { this.declaredChildNodeDefinitionValues = declaredChildNodeDefinitionValues; } /** * @return Returns the declaredPropertyDefinitionValues. */ public List<PropertyDefinitionValue> getDeclaredPropertyDefinitionValues() { return declaredPropertyDefinitionValues; } /** * @param declaredPropertyDefinitionValues The declaredPropertyDefinitionValues * to set. */ public void setDeclaredPropertyDefinitionValues(List<PropertyDefinitionValue> declaredPropertyDefinitionValues) { this.declaredPropertyDefinitionValues = declaredPropertyDefinitionValues; } /** * validateNodeType, method checks the value bean for each valid filed */ public boolean validateNodeType() { boolean hasValidated = false; if (primaryItemName != null) { if (primaryItemName.length() <= 0) { primaryItemName = null; hasValidated = true; } } if (declaredSupertypeNames == null) { declaredSupertypeNames = new ArrayList<String>(); hasValidated = true; } else { int prevSize = declaredSupertypeNames.size(); fixStringsList(declaredSupertypeNames); hasValidated = prevSize != declaredSupertypeNames.size(); } if (declaredPropertyDefinitionValues == null) { declaredPropertyDefinitionValues = new ArrayList<PropertyDefinitionValue>(); hasValidated = true; } else { int prevSize = declaredPropertyDefinitionValues.size(); fixPropertyDefinitionValuesList(declaredPropertyDefinitionValues); hasValidated = prevSize != declaredPropertyDefinitionValues.size(); } if (declaredChildNodeDefinitionValues == null) { declaredChildNodeDefinitionValues = new ArrayList<NodeDefinitionValue>(); hasValidated = true; } else { int prevSize = declaredChildNodeDefinitionValues.size(); fixNodeDefinitionValuesList(declaredChildNodeDefinitionValues); hasValidated = prevSize != declaredChildNodeDefinitionValues.size(); } return hasValidated; } private void fixStringsList(List<String> strList) { int i = 0; while (i < strList.size()) { if (strList.get(i) == null) { strList.remove(i); } else if (strList.get(i) != null) { String s = strList.get(i); s = s.trim(); if (s.length() <= 0) { strList.remove(i); } else { i++; } } } } private void fixPropertyDefinitionValuesList(List<PropertyDefinitionValue> pdvList) { int i = 0; while (i < pdvList.size()) { if (pdvList.get(i) == null) { pdvList.remove(i); } else { PropertyDefinitionValue p = pdvList.get(i++); if (p.getValueConstraints() != null) { fixStringsList(p.getValueConstraints()); } if (p.getDefaultValueStrings() != null) { fixStringsList(p.getDefaultValueStrings()); } } } } private void fixNodeDefinitionValuesList(List<NodeDefinitionValue> ndvList) { int i = 0; while (i < ndvList.size()) { if (ndvList.get(i) == null) { ndvList.remove(i); } else { NodeDefinitionValue p = (NodeDefinitionValue)ndvList.get(i++); if (p.getRequiredNodeTypeNames() != null) { fixStringsList(p.getRequiredNodeTypeNames()); if (p.getRequiredNodeTypeNames().size() == 0) { // Fixing field requiredNodeTypeNames according the specefication // (6.7.14) for // NodeDefinition List<String> defNotEmptyArray = new ArrayList<String>(); defNotEmptyArray.add("nt:base"); p.setRequiredNodeTypeNames(defNotEmptyArray); } } if (p.getDefaultNodeTypeName() != null) { if (p.getDefaultNodeTypeName().length() <= 0) { p.setDefaultNodeTypeName(null); } } } } } }