001: /*
002: * File : $Source: /usr/local/cvs/opencms/src/org/opencms/xml/types/CmsXmlNestedContentDefinition.java,v $
003: * Date : $Date: 2008-02-27 12:05:29 $
004: * Version: $Revision: 1.20 $
005: *
006: * This library is part of OpenCms -
007: * the Open Source Content Management System
008: *
009: * Copyright (c) 2002 - 2008 Alkacon Software GmbH (http://www.alkacon.com)
010: *
011: * This library is free software; you can redistribute it and/or
012: * modify it under the terms of the GNU Lesser General Public
013: * License as published by the Free Software Foundation; either
014: * version 2.1 of the License, or (at your option) any later version.
015: *
016: * This library is distributed in the hope that it will be useful,
017: * but WITHOUT ANY WARRANTY; without even the implied warranty of
018: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: * Lesser General Public License for more details.
020: *
021: * For further information about Alkacon Software GmbH, please see the
022: * company website: http://www.alkacon.com
023: *
024: * For further information about OpenCms, please see the
025: * project website: http://www.opencms.org
026: *
027: * You should have received a copy of the GNU Lesser General Public
028: * License along with this library; if not, write to the Free Software
029: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
030: */
031:
032: package org.opencms.xml.types;
033:
034: import org.opencms.file.CmsObject;
035: import org.opencms.main.CmsRuntimeException;
036: import org.opencms.xml.CmsXmlContentDefinition;
037: import org.opencms.xml.I_CmsXmlDocument;
038:
039: import java.util.Locale;
040:
041: import org.dom4j.Element;
042:
043: /**
044: * A nested content XML definition that is included by another XML content definition.<p>
045: *
046: * @author Alexander Kandzior
047: *
048: * @version $Revision: 1.20 $
049: *
050: * @since 6.0.0
051: */
052: public class CmsXmlNestedContentDefinition extends A_CmsXmlContentValue
053: implements I_CmsXmlSchemaType {
054:
055: /** The nested content definition. */
056: private CmsXmlContentDefinition m_nestedContentDefinition;
057:
058: /**
059: * Creates a new XML content value for the nested content definition.<p>
060: *
061: * @param document the XML content instance this value belongs to
062: * @param contentDefinition the nested XML content definition
063: * @param element the XML element that contains this value
064: * @param locale the locale this value is created for
065: * @param type the type instance to create the value for
066: */
067: public CmsXmlNestedContentDefinition(
068: CmsXmlContentDefinition contentDefinition,
069: I_CmsXmlDocument document, Element element, Locale locale,
070: I_CmsXmlSchemaType type) {
071:
072: super (document, element, locale, type);
073: m_nestedContentDefinition = contentDefinition;
074: }
075:
076: /**
077: * Creates a new nested content definition.<p>
078: *
079: * @param contentDefinition the content definition to nest
080: * @param name the name of the XML node containing the value according to the XML schema
081: * @param minOccurs minimum number of occurences of this type according to the XML schema
082: * @param maxOccurs maximum number of occurences of this type according to the XML schema
083: */
084: public CmsXmlNestedContentDefinition(
085: CmsXmlContentDefinition contentDefinition, String name,
086: String minOccurs, String maxOccurs) {
087:
088: super (name, minOccurs, maxOccurs);
089: m_nestedContentDefinition = contentDefinition;
090: }
091:
092: /**
093: * @see org.opencms.xml.types.I_CmsXmlSchemaType#createValue(I_CmsXmlDocument, org.dom4j.Element, Locale)
094: */
095: public I_CmsXmlContentValue createValue(I_CmsXmlDocument document,
096: Element element, Locale locale) {
097:
098: return new CmsXmlNestedContentDefinition(
099: m_nestedContentDefinition, document, element, locale,
100: this );
101: }
102:
103: /**
104: * @see org.opencms.xml.types.I_CmsXmlSchemaType#generateXml(org.opencms.file.CmsObject, org.opencms.xml.I_CmsXmlDocument, org.dom4j.Element, java.util.Locale)
105: */
106: public Element generateXml(CmsObject cms,
107: I_CmsXmlDocument document, Element root, Locale locale) {
108:
109: // create the XML base node for the nested content definition
110: Element element = root.addElement(getName());
111: // create a default XML element for the nested content definition
112: element = m_nestedContentDefinition.createDefaultXml(cms,
113: document, element, locale);
114: // return the generated element
115: return element;
116: }
117:
118: /**
119: * Returns the nested content definition.<p>
120: *
121: * @return the nested content definition
122: */
123: public CmsXmlContentDefinition getNestedContentDefinition() {
124:
125: return m_nestedContentDefinition;
126: }
127:
128: /**
129: * @see org.opencms.xml.types.I_CmsXmlSchemaType#getSchemaDefinition()
130: */
131: public String getSchemaDefinition() {
132:
133: throw new CmsRuntimeException(Messages.get().container(
134: Messages.ERR_NESTED_SCHEMA_0));
135: }
136:
137: /**
138: * @see org.opencms.xml.types.I_CmsXmlContentValue#getStringValue(org.opencms.file.CmsObject)
139: */
140: public String getStringValue(CmsObject cms)
141: throws CmsRuntimeException {
142:
143: throw new CmsRuntimeException(Messages.get().container(
144: Messages.ERR_NESTED_GETVALUE_0));
145: }
146:
147: /**
148: * @see org.opencms.xml.types.I_CmsXmlSchemaType#getTypeName()
149: */
150: public String getTypeName() {
151:
152: return m_nestedContentDefinition.getTypeName();
153: }
154:
155: /**
156: * Returns <code>false</code>, since nested content definitions are never simple.<p>
157: *
158: * @see org.opencms.xml.types.I_CmsXmlSchemaType#isSimpleType()
159: */
160: public boolean isSimpleType() {
161:
162: return false;
163: }
164:
165: /**
166: * @see org.opencms.xml.types.I_CmsXmlSchemaType#newInstance(java.lang.String, java.lang.String, java.lang.String)
167: */
168: public I_CmsXmlSchemaType newInstance(String name,
169: String minOccurs, String maxOccurs) {
170:
171: throw new CmsRuntimeException(Messages.get().container(
172: Messages.ERR_NESTED_NEWINSTANCE_0));
173: }
174:
175: /**
176: * @see org.opencms.xml.types.I_CmsXmlContentValue#setStringValue(org.opencms.file.CmsObject, java.lang.String)
177: */
178: public void setStringValue(CmsObject cms, String value) {
179:
180: throw new CmsRuntimeException(Messages.get().container(
181: Messages.ERR_NESTED_SETVALUE_0));
182: }
183: }
|