001package org.hl7.fhir.r5.openehr;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.r5.openehr.Enumerations.*;
038import org.hl7.fhir.exceptions.FHIRException;
039import org.hl7.fhir.r5.model.*;
040import org.hl7.fhir.instance.model.api.ICompositeType;
041import ca.uhn.fhir.model.api.annotation.Child;
042import ca.uhn.fhir.model.api.annotation.ChildOrder;
043import ca.uhn.fhir.model.api.annotation.DatatypeDef;
044import ca.uhn.fhir.model.api.annotation.Description;
045import ca.uhn.fhir.model.api.annotation.Block;
046
047/**
048 * Content of one version in a VERSIONED_COMPOSITION. A Composition is considered the unit of modification of the record, the unit of transmission in record Extracts, and the unit of attestation by authorising clinicians. In this latter sense, it may be considered equivalent to a signed document. NOTE: It is strongly recommended that the inherited attribute uid be populated in Compositions, using the UID copied from the object_id() of the uid field of the enclosing VERSION object. For example, the ORIGINAL_VERSION.uid 87284370-2D4B-4e3d-A3F3-F303D2F4F34B::uk.nhs.ehr1::2 would be copied to the uid field of the Composition.
049 */
050@DatatypeDef(name="COMPOSITION")
051public class COMPOSITION extends LOCATABLE implements ICompositeType {
052
053    /**
054     * Mandatory indicator of the localised language in which this Composition is written. Coded from openEHR Code Set languages. The language of an Entry if different from the Composition is indicated in ENTRY.language.
055     */
056    @Child(name = "language", type = {CODE_PHRASE.class}, order=0, min=1, max=1, modifier=false, summary=false)
057    @Description(shortDefinition="Mandatory indicator of the localised language in which this Composition is written. Coded from openEHR Code Set languages", formalDefinition="Mandatory indicator of the localised language in which this Composition is written. Coded from openEHR Code Set languages. The language of an Entry if different from the Composition is indicated in ENTRY.language." )
058    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/all-languages")
059    protected CODE_PHRASE language;
060
061    /**
062     * Name of territory in which this Composition was written. Coded from openEHR countries code set, which is an expression of the ISO 3166 standard.
063     */
064    @Child(name = "territory", type = {CODE_PHRASE.class}, order=1, min=1, max=1, modifier=false, summary=false)
065    @Description(shortDefinition="Name of territory in which this Composition was written. Coded from the ISO 3166 standard", formalDefinition="Name of territory in which this Composition was written. Coded from openEHR countries code set, which is an expression of the ISO 3166 standard." )
066    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="https://specifications.openehr.org/fhir/valueset-territories")
067    protected CODE_PHRASE territory;
068
069    /**
070     * Temporal category of this Composition, i.e.
071
072* 431|persistent| - of potential life-time validity;* 451|episodic| - valid over the life of a care episode;* 433|event| - valid at the time of recording (long-term validity requires subsequent clinical assessment).
073
074or any other code defined in the openEHR terminology group 'category'.
075     */
076    @Child(name = "category", type = {DV_CODED_TEXT.class}, order=2, min=1, max=1, modifier=false, summary=false)
077    @Description(shortDefinition="Temporal category of this Composition, e.g. * 431|persistent|, 451|episodic|, or 433|event|", formalDefinition="Temporal category of this Composition, i.e.\r\n\r\n* 431|persistent| - of potential life-time validity;* 451|episodic| - valid over the life of a care episode;* 433|event| - valid at the time of recording (long-term validity requires subsequent clinical assessment).\r\n\r\nor any other code defined in the openEHR terminology group 'category'." )
078    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="https://specifications.openehr.org/fhir/valueset-composition_category")
079    protected DV_CODED_TEXT category;
080
081    /**
082     * The clinical session context of this Composition, i.e. the contextual attributes of the clinical session.
083     */
084    @Child(name = "context", type = {EVENT_CONTEXT.class}, order=3, min=0, max=1, modifier=false, summary=false)
085    @Description(shortDefinition="The clinical session context of this Composition, i.e. the contextual attributes of the clinical session", formalDefinition="The clinical session context of this Composition, i.e. the contextual attributes of the clinical session." )
086    protected EVENT_CONTEXT context;
087
088    /**
089     * The person primarily responsible for the content of the Composition (but not necessarily its committal into the EHR system). This is the identifier which should appear on the screen. It may or may not be the person who entered the data. When it is the patient, the special self instance of PARTY_PROXY will be used.
090     */
091    @Child(name = "composer", type = {PARTY_PROXY.class}, order=4, min=1, max=1, modifier=false, summary=false)
092    @Description(shortDefinition="The person primarily responsible for the content of the Composition. This is the identifier which should appear on the screen", formalDefinition="The person primarily responsible for the content of the Composition (but not necessarily its committal into the EHR system). This is the identifier which should appear on the screen. It may or may not be the person who entered the data. When it is the patient, the special self instance of PARTY_PROXY will be used." )
093    protected PARTY_PROXY composer;
094
095    /**
096     * The content of this Composition.
097     */
098    @Child(name = "content", type = {CONTENT_ITEM.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
099    @Description(shortDefinition="The content of this Composition", formalDefinition="The content of this Composition." )
100    protected List<CONTENT_ITEM> contentList;
101
102    private static final long serialVersionUID = -520355958L;
103
104  /**
105   * Constructor
106   */
107    public COMPOSITION() {
108      super();
109    }
110
111  /**
112   * Constructor
113   */
114    public COMPOSITION(CODE_PHRASE language, CODE_PHRASE territory, DV_CODED_TEXT category, PARTY_PROXY composer) {
115      super();
116      this.setLanguage(language);
117      this.setTerritory(territory);
118      this.setCategory(category);
119      this.setComposer(composer);
120    }
121
122    /**
123     * @return {@link #language} (Mandatory indicator of the localised language in which this Composition is written. Coded from openEHR Code Set languages. The language of an Entry if different from the Composition is indicated in ENTRY.language.)
124     */
125    public CODE_PHRASE getLanguage() { 
126      if (this.language == null)
127        if (Configuration.errorOnAutoCreate())
128          throw new Error("Attempt to auto-create COMPOSITION.language");
129        else if (Configuration.doAutoCreate())
130          this.language = new CODE_PHRASE(); // cc
131      return this.language;
132    }
133
134    public boolean hasLanguage() { 
135      return this.language != null && !this.language.isEmpty();
136    }
137
138    /**
139     * @param value {@link #language} (Mandatory indicator of the localised language in which this Composition is written. Coded from openEHR Code Set languages. The language of an Entry if different from the Composition is indicated in ENTRY.language.)
140     */
141    public COMPOSITION setLanguage(CODE_PHRASE value) { 
142      this.language = value;
143      return this;
144    }
145
146    /**
147     * @return {@link #territory} (Name of territory in which this Composition was written. Coded from openEHR countries code set, which is an expression of the ISO 3166 standard.)
148     */
149    public CODE_PHRASE getTerritory() { 
150      if (this.territory == null)
151        if (Configuration.errorOnAutoCreate())
152          throw new Error("Attempt to auto-create COMPOSITION.territory");
153        else if (Configuration.doAutoCreate())
154          this.territory = new CODE_PHRASE(); // cc
155      return this.territory;
156    }
157
158    public boolean hasTerritory() { 
159      return this.territory != null && !this.territory.isEmpty();
160    }
161
162    /**
163     * @param value {@link #territory} (Name of territory in which this Composition was written. Coded from openEHR countries code set, which is an expression of the ISO 3166 standard.)
164     */
165    public COMPOSITION setTerritory(CODE_PHRASE value) { 
166      this.territory = value;
167      return this;
168    }
169
170    /**
171     * @return {@link #category} (Temporal category of this Composition, i.e.
172
173* 431|persistent| - of potential life-time validity;* 451|episodic| - valid over the life of a care episode;* 433|event| - valid at the time of recording (long-term validity requires subsequent clinical assessment).
174
175or any other code defined in the openEHR terminology group 'category'.)
176     */
177    public DV_CODED_TEXT getCategory() { 
178      if (this.category == null)
179        if (Configuration.errorOnAutoCreate())
180          throw new Error("Attempt to auto-create COMPOSITION.category");
181        else if (Configuration.doAutoCreate())
182          this.category = new DV_CODED_TEXT(); // cc
183      return this.category;
184    }
185
186    public boolean hasCategory() { 
187      return this.category != null && !this.category.isEmpty();
188    }
189
190    /**
191     * @param value {@link #category} (Temporal category of this Composition, i.e.
192
193* 431|persistent| - of potential life-time validity;* 451|episodic| - valid over the life of a care episode;* 433|event| - valid at the time of recording (long-term validity requires subsequent clinical assessment).
194
195or any other code defined in the openEHR terminology group 'category'.)
196     */
197    public COMPOSITION setCategory(DV_CODED_TEXT value) { 
198      this.category = value;
199      return this;
200    }
201
202    /**
203     * @return {@link #context} (The clinical session context of this Composition, i.e. the contextual attributes of the clinical session.)
204     */
205    public EVENT_CONTEXT getContext() { 
206      if (this.context == null)
207        if (Configuration.errorOnAutoCreate())
208          throw new Error("Attempt to auto-create COMPOSITION.context");
209        else if (Configuration.doAutoCreate())
210          this.context = new EVENT_CONTEXT(); // cc
211      return this.context;
212    }
213
214    public boolean hasContext() { 
215      return this.context != null && !this.context.isEmpty();
216    }
217
218    /**
219     * @param value {@link #context} (The clinical session context of this Composition, i.e. the contextual attributes of the clinical session.)
220     */
221    public COMPOSITION setContext(EVENT_CONTEXT value) { 
222      this.context = value;
223      return this;
224    }
225
226    /**
227     * @return {@link #composer} (The person primarily responsible for the content of the Composition (but not necessarily its committal into the EHR system). This is the identifier which should appear on the screen. It may or may not be the person who entered the data. When it is the patient, the special self instance of PARTY_PROXY will be used.)
228     */
229    public PARTY_PROXY getComposer() { 
230      return this.composer;
231    }
232
233    public boolean hasComposer() { 
234      return this.composer != null && !this.composer.isEmpty();
235    }
236
237    /**
238     * @param value {@link #composer} (The person primarily responsible for the content of the Composition (but not necessarily its committal into the EHR system). This is the identifier which should appear on the screen. It may or may not be the person who entered the data. When it is the patient, the special self instance of PARTY_PROXY will be used.)
239     */
240    public COMPOSITION setComposer(PARTY_PROXY value) { 
241      this.composer = value;
242      return this;
243    }
244
245    /**
246     * @return {@link #content} (The content of this Composition.)
247     */
248    public List<CONTENT_ITEM> getContentList() { 
249      if (this.contentList == null)
250        this.contentList = new ArrayList<CONTENT_ITEM>();
251      return this.contentList;
252    }
253
254    /**
255     * @return Returns a reference to <code>this</code> for easy method chaining
256     */
257    public COMPOSITION setContentList(List<CONTENT_ITEM> theContent) { 
258      this.contentList = theContent;
259      return this;
260    }
261
262    public boolean hasContent() { 
263      if (this.contentList == null)
264        return false;
265      for (CONTENT_ITEM item : this.contentList)
266        if (!item.isEmpty())
267          return true;
268      return false;
269    }
270
271    public COMPOSITION addContent(CONTENT_ITEM t) { //3b
272      if (t == null)
273        return this;
274      if (this.contentList == null)
275        this.contentList = new ArrayList<CONTENT_ITEM>();
276      this.contentList.add(t);
277      return this;
278    }
279
280      protected void listChildren(List<Property> children) {
281        super.listChildren(children);
282        children.add(new Property("language", "http://openehr.org/fhir/StructureDefinition/CODE-PHRASE", "Mandatory indicator of the localised language in which this Composition is written. Coded from openEHR Code Set languages. The language of an Entry if different from the Composition is indicated in ENTRY.language.", 0, 1, language));
283        children.add(new Property("territory", "http://openehr.org/fhir/StructureDefinition/CODE-PHRASE", "Name of territory in which this Composition was written. Coded from openEHR countries code set, which is an expression of the ISO 3166 standard.", 0, 1, territory));
284        children.add(new Property("category", "http://openehr.org/fhir/StructureDefinition/DV-CODED-TEXT", "Temporal category of this Composition, i.e.\r\n\r\n* 431|persistent| - of potential life-time validity;* 451|episodic| - valid over the life of a care episode;* 433|event| - valid at the time of recording (long-term validity requires subsequent clinical assessment).\r\n\r\nor any other code defined in the openEHR terminology group 'category'.", 0, 1, category));
285        children.add(new Property("context", "http://openehr.org/fhir/StructureDefinition/EVENT-CONTEXT", "The clinical session context of this Composition, i.e. the contextual attributes of the clinical session.", 0, 1, context));
286        children.add(new Property("composer", "http://openehr.org/fhir/StructureDefinition/PARTY-PROXY", "The person primarily responsible for the content of the Composition (but not necessarily its committal into the EHR system). This is the identifier which should appear on the screen. It may or may not be the person who entered the data. When it is the patient, the special self instance of PARTY_PROXY will be used.", 0, 1, composer));
287        children.add(new Property("content", "http://openehr.org/fhir/StructureDefinition/CONTENT-ITEM", "The content of this Composition.", 0, java.lang.Integer.MAX_VALUE, contentList));
288      }
289
290      @Override
291      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
292        switch (_hash) {
293        case -1613589672: /*language*/  return new Property("language", "http://openehr.org/fhir/StructureDefinition/CODE-PHRASE", "Mandatory indicator of the localised language in which this Composition is written. Coded from openEHR Code Set languages. The language of an Entry if different from the Composition is indicated in ENTRY.language.", 0, 1, language);
294        case -2115639270: /*territory*/  return new Property("territory", "http://openehr.org/fhir/StructureDefinition/CODE-PHRASE", "Name of territory in which this Composition was written. Coded from openEHR countries code set, which is an expression of the ISO 3166 standard.", 0, 1, territory);
295        case 50511102: /*category*/  return new Property("category", "http://openehr.org/fhir/StructureDefinition/DV-CODED-TEXT", "Temporal category of this Composition, i.e.\r\n\r\n* 431|persistent| - of potential life-time validity;* 451|episodic| - valid over the life of a care episode;* 433|event| - valid at the time of recording (long-term validity requires subsequent clinical assessment).\r\n\r\nor any other code defined in the openEHR terminology group 'category'.", 0, 1, category);
296        case 951530927: /*context*/  return new Property("context", "http://openehr.org/fhir/StructureDefinition/EVENT-CONTEXT", "The clinical session context of this Composition, i.e. the contextual attributes of the clinical session.", 0, 1, context);
297        case -599342816: /*composer*/  return new Property("composer", "http://openehr.org/fhir/StructureDefinition/PARTY-PROXY", "The person primarily responsible for the content of the Composition (but not necessarily its committal into the EHR system). This is the identifier which should appear on the screen. It may or may not be the person who entered the data. When it is the patient, the special self instance of PARTY_PROXY will be used.", 0, 1, composer);
298        case 951530617: /*content*/  return new Property("content", "http://openehr.org/fhir/StructureDefinition/CONTENT-ITEM", "The content of this Composition.", 0, java.lang.Integer.MAX_VALUE, contentList);
299        default: return super.getNamedProperty(_hash, _name, _checkValid);
300        }
301
302      }
303
304      @Override
305      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
306        switch (hash) {
307        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CODE_PHRASE
308        case -2115639270: /*territory*/ return this.territory == null ? new Base[0] : new Base[] {this.territory}; // CODE_PHRASE
309        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // DV_CODED_TEXT
310        case 951530927: /*context*/ return this.context == null ? new Base[0] : new Base[] {this.context}; // EVENT_CONTEXT
311        case -599342816: /*composer*/ return this.composer == null ? new Base[0] : new Base[] {this.composer}; // PARTY_PROXY
312        case 951530617: /*content*/ return this.contentList == null ? new Base[0] : this.contentList.toArray(new Base[this.contentList.size()]); // CONTENT_ITEM
313        default: return super.getProperty(hash, name, checkValid);
314        }
315
316      }
317
318      @Override
319      public Base setProperty(int hash, String name, Base value) throws FHIRException {
320        switch (hash) {
321        case -1613589672: // language
322          this.language = (CODE_PHRASE) value; // CODE_PHRASE
323          return value;
324        case -2115639270: // territory
325          this.territory = (CODE_PHRASE) value; // CODE_PHRASE
326          return value;
327        case 50511102: // category
328          this.category = (DV_CODED_TEXT) value; // DV_CODED_TEXT
329          return value;
330        case 951530927: // context
331          this.context = (EVENT_CONTEXT) value; // EVENT_CONTEXT
332          return value;
333        case -599342816: // composer
334          this.composer = (PARTY_PROXY) value; // PARTY_PROXY
335          return value;
336        case 951530617: // content
337          this.getContentList().add((CONTENT_ITEM) value); // CONTENT_ITEM
338          return value;
339        default: return super.setProperty(hash, name, value);
340        }
341
342      }
343
344      @Override
345      public Base setProperty(String name, Base value) throws FHIRException {
346        if (name.equals("language")) {
347          this.language = (CODE_PHRASE) value; // CODE_PHRASE
348        } else if (name.equals("territory")) {
349          this.territory = (CODE_PHRASE) value; // CODE_PHRASE
350        } else if (name.equals("category")) {
351          this.category = (DV_CODED_TEXT) value; // DV_CODED_TEXT
352        } else if (name.equals("context")) {
353          this.context = (EVENT_CONTEXT) value; // EVENT_CONTEXT
354        } else if (name.equals("composer")) {
355          this.composer = (PARTY_PROXY) value; // PARTY_PROXY
356        } else if (name.equals("content")) {
357          this.getContentList().add((CONTENT_ITEM) value); // CONTENT_ITEM
358        } else
359          return super.setProperty(name, value);
360        return value;
361      }
362
363      @Override
364      public Base makeProperty(int hash, String name) throws FHIRException {
365        switch (hash) {
366        case -1613589672:  return getLanguage();
367        case -2115639270:  return getTerritory();
368        case 50511102:  return getCategory();
369        case 951530927:  return getContext();
370        case -599342816: /*div*/
371          throw new Error("Unable to make an instance of the abstract property 'composer'");
372        case 951530617: /*div*/
373          throw new Error("Unable to make an instance of the abstract property 'content'");
374        default: return super.makeProperty(hash, name);
375        }
376
377      }
378
379      @Override
380      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
381        switch (hash) {
382        case -1613589672: /*language*/ return new String[] {"http://openehr.org/fhir/StructureDefinition/CODE-PHRASE"};
383        case -2115639270: /*territory*/ return new String[] {"http://openehr.org/fhir/StructureDefinition/CODE-PHRASE"};
384        case 50511102: /*category*/ return new String[] {"http://openehr.org/fhir/StructureDefinition/DV-CODED-TEXT"};
385        case 951530927: /*context*/ return new String[] {"http://openehr.org/fhir/StructureDefinition/EVENT-CONTEXT"};
386        case -599342816: /*composer*/ return new String[] {"http://openehr.org/fhir/StructureDefinition/PARTY-PROXY"};
387        case 951530617: /*content*/ return new String[] {"http://openehr.org/fhir/StructureDefinition/CONTENT-ITEM"};
388        default: return super.getTypesForProperty(hash, name);
389        }
390
391      }
392
393      @Override
394      public Base addChild(String name) throws FHIRException {
395        if (name.equals("language")) {
396          this.language = new CODE_PHRASE();
397          return this.language;
398        }
399        else if (name.equals("territory")) {
400          this.territory = new CODE_PHRASE();
401          return this.territory;
402        }
403        else if (name.equals("category")) {
404          this.category = new DV_CODED_TEXT();
405          return this.category;
406        }
407        else if (name.equals("context")) {
408          this.context = new EVENT_CONTEXT();
409          return this.context;
410        }
411        else if (name.equals("composer")) {
412          throw new FHIRException("Cannot call addChild on an abstract type COMPOSITION.composer");
413        }
414        else if (name.equals("content")) {
415          throw new FHIRException("Cannot call addChild on an abstract type COMPOSITION.content");
416        }
417        else
418          return super.addChild(name);
419      }
420
421  public String fhirType() {
422    return "COMPOSITION";
423
424  }
425
426      public COMPOSITION copy() {
427        COMPOSITION dst = new COMPOSITION();
428        copyValues(dst);
429        return dst;
430      }
431
432      public void copyValues(COMPOSITION dst) {
433        super.copyValues(dst);
434        dst.language = language == null ? null : language.copy();
435        dst.territory = territory == null ? null : territory.copy();
436        dst.category = category == null ? null : category.copy();
437        dst.context = context == null ? null : context.copy();
438        dst.composer = composer == null ? null : composer.copy();
439        if (contentList != null) {
440          dst.contentList = new ArrayList<CONTENT_ITEM>();
441          for (CONTENT_ITEM i : contentList)
442            dst.contentList.add(i.copy());
443        };
444      }
445
446      protected COMPOSITION typedCopy() {
447        return copy();
448      }
449
450      @Override
451      public boolean equalsDeep(Base other_) {
452        if (!super.equalsDeep(other_))
453          return false;
454        if (!(other_ instanceof COMPOSITION))
455          return false;
456        COMPOSITION o = (COMPOSITION) other_;
457        return compareDeep(language, o.language, true) && compareDeep(territory, o.territory, true) && compareDeep(category, o.category, true)
458           && compareDeep(context, o.context, true) && compareDeep(composer, o.composer, true) && compareDeep(contentList, o.contentList, true)
459          ;
460      }
461
462      @Override
463      public boolean equalsShallow(Base other_) {
464        if (!super.equalsShallow(other_))
465          return false;
466        if (!(other_ instanceof COMPOSITION))
467          return false;
468        COMPOSITION o = (COMPOSITION) other_;
469        return true;
470      }
471
472      public boolean isEmpty() {
473        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(language, territory, category
474          , context, composer, contentList);
475      }
476
477
478}
479