blob: 58db4c5ad86b2c2eeef0de37364750a930146a03 [file] [log] [blame]
/*
* Copyright (c) 2003, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
*
* $Id: Classifier.java,v 1.5 2004/04/30 17:21:46 khussey Exp $
*/
package org.eclipse.uml2;
import java.util.Map;
import java.util.Set;
import org.eclipse.emf.common.util.DiagnosticChain;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
/**
* <!-- begin-user-doc -->
* A representation of the model object '<em><b>Classifier</b></em>'.
* <!-- end-user-doc -->
*
* <p>
* The following features are supported:
* <ul>
* <li>{@link org.eclipse.uml2.Classifier#getFeatures <em>Feature</em>}</li>
* <li>{@link org.eclipse.uml2.Classifier#isAbstract <em>Is Abstract</em>}</li>
* <li>{@link org.eclipse.uml2.Classifier#getInheritedMembers <em>Inherited Member</em>}</li>
* <li>{@link org.eclipse.uml2.Classifier#getGenerals <em>General</em>}</li>
* <li>{@link org.eclipse.uml2.Classifier#getGeneralizations <em>Generalization</em>}</li>
* <li>{@link org.eclipse.uml2.Classifier#getAttributes <em>Attribute</em>}</li>
* <li>{@link org.eclipse.uml2.Classifier#getRedefinedClassifiers <em>Redefined Classifier</em>}</li>
* <li>{@link org.eclipse.uml2.Classifier#getSubstitutions <em>Substitution</em>}</li>
* <li>{@link org.eclipse.uml2.Classifier#getPowertypeExtents <em>Powertype Extent</em>}</li>
* <li>{@link org.eclipse.uml2.Classifier#getOwnedUseCases <em>Owned Use Case</em>}</li>
* <li>{@link org.eclipse.uml2.Classifier#getRepresentation <em>Representation</em>}</li>
* <li>{@link org.eclipse.uml2.Classifier#getOccurrences <em>Occurrence</em>}</li>
* </ul>
* </p>
*
* @see org.eclipse.uml2.UML2Package#getClassifier()
* @model abstract="true"
* @generated
*/
public interface Classifier extends Namespace, Type, RedefinableElement{
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
String copyright = "Copyright (c) 2003, 2004 IBM Corporation and others."; //$NON-NLS-1$
/**
* Returns the value of the '<em><b>Is Abstract</b></em>' attribute.
* The default value is <code>"false"</code>.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Is Abstract</em>' attribute isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Is Abstract</em>' attribute.
* @see #setIsAbstract(boolean)
* @see org.eclipse.uml2.UML2Package#getClassifier_IsAbstract()
* @model default="false" dataType="org.eclipse.uml2.Boolean" volatile="true"
* @generated
*/
boolean isAbstract();
/**
* Sets the value of the '{@link org.eclipse.uml2.Classifier#isAbstract <em>Is Abstract</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param value the new value of the '<em>Is Abstract</em>' attribute.
* @see #isAbstract()
* @generated
*/
void setIsAbstract(boolean value);
/**
* Returns the value of the '<em><b>Feature</b></em>' reference list.
* The list contents are of type {@link org.eclipse.uml2.Feature}.
* It is bidirectional and its opposite is '{@link org.eclipse.uml2.Feature#getFeaturingClassifiers <em>Featuring Classifier</em>}'.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Feature</em>' reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Feature</em>' reference list.
* @see org.eclipse.uml2.UML2Package#getClassifier_Feature()
* @see org.eclipse.uml2.Feature#getFeaturingClassifiers
* @model type="org.eclipse.uml2.Feature" opposite="featuringClassifier" transient="true" changeable="false" volatile="true" derived="true"
* @generated
*/
EList getFeatures();
/**
* Retrieves the {@link org.eclipse.uml2.Feature} with the specified name from the '<em><b>Feature</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param unqualifiedName The unqualified name of the {@link org.eclipse.uml2.Feature} to retrieve.
* @return The {@link org.eclipse.uml2.Feature} with the specified name, or <code>null</code>.
* @see #getFeatures()
* @generated
*/
Feature getFeature(String unqualifiedName);
/**
* Returns the value of the '<em><b>Inherited Member</b></em>' reference list.
* The list contents are of type {@link org.eclipse.uml2.NamedElement}.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Inherited Member</em>' reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Inherited Member</em>' reference list.
* @see org.eclipse.uml2.UML2Package#getClassifier_InheritedMember()
* @model type="org.eclipse.uml2.NamedElement" transient="true" changeable="false" volatile="true" derived="true"
* @generated
*/
EList getInheritedMembers();
/**
* Retrieves the {@link org.eclipse.uml2.NamedElement} with the specified name from the '<em><b>Inherited Member</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param unqualifiedName The unqualified name of the {@link org.eclipse.uml2.NamedElement} to retrieve.
* @return The {@link org.eclipse.uml2.NamedElement} with the specified name, or <code>null</code>.
* @see #getInheritedMembers()
* @generated
*/
NamedElement getInheritedMember(String unqualifiedName);
/**
* Returns the value of the '<em><b>General</b></em>' reference list.
* The list contents are of type {@link org.eclipse.uml2.Classifier}.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>General</em>' reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>General</em>' reference list.
* @see org.eclipse.uml2.UML2Package#getClassifier_General()
* @model type="org.eclipse.uml2.Classifier" transient="true" changeable="false" volatile="true" derived="true"
* @generated
*/
EList getGenerals();
/**
* Retrieves the {@link org.eclipse.uml2.Classifier} with the specified name from the '<em><b>General</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param unqualifiedName The unqualified name of the {@link org.eclipse.uml2.Classifier} to retrieve.
* @return The {@link org.eclipse.uml2.Classifier} with the specified name, or <code>null</code>.
* @see #getGenerals()
* @generated
*/
Classifier getGeneral(String unqualifiedName);
/**
* Returns the value of the '<em><b>Generalization</b></em>' containment reference list.
* The list contents are of type {@link org.eclipse.uml2.Generalization}.
* It is bidirectional and its opposite is '{@link org.eclipse.uml2.Generalization#getSpecific <em>Specific</em>}'.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Generalization</em>' containment reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Generalization</em>' containment reference list.
* @see org.eclipse.uml2.UML2Package#getClassifier_Generalization()
* @see org.eclipse.uml2.Generalization#getSpecific
* @model type="org.eclipse.uml2.Generalization" opposite="specific" containment="true"
* @generated
*/
EList getGeneralizations();
/**
* Creates a {@link org.eclipse.uml2.Generalization} and appends it to the '<em><b>Generalization</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param eClass The Ecore class of the {@link org.eclipse.uml2.Generalization} to create.
* @return The new {@link org.eclipse.uml2.Generalization}.
* @see #getGeneralizations()
* @generated
*/
Generalization createGeneralization(EClass eClass);
/**
* Returns the value of the '<em><b>Attribute</b></em>' reference list.
* The list contents are of type {@link org.eclipse.uml2.Property}.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Attribute</em>' reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Attribute</em>' reference list.
* @see org.eclipse.uml2.UML2Package#getClassifier_Attribute()
* @model type="org.eclipse.uml2.Property" transient="true" changeable="false" volatile="true" derived="true"
* @generated
*/
EList getAttributes();
/**
* Retrieves the {@link org.eclipse.uml2.Property} with the specified name from the '<em><b>Attribute</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param unqualifiedName The unqualified name of the {@link org.eclipse.uml2.Property} to retrieve.
* @return The {@link org.eclipse.uml2.Property} with the specified name, or <code>null</code>.
* @see #getAttributes()
* @generated
*/
Property getAttribute(String unqualifiedName);
/**
* Returns the value of the '<em><b>Redefined Classifier</b></em>' reference list.
* The list contents are of type {@link org.eclipse.uml2.Classifier}.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Redefined Classifier</em>' reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Redefined Classifier</em>' reference list.
* @see org.eclipse.uml2.UML2Package#getClassifier_RedefinedClassifier()
* @model type="org.eclipse.uml2.Classifier"
* @generated
*/
EList getRedefinedClassifiers();
/**
* Retrieves the {@link org.eclipse.uml2.Classifier} with the specified name from the '<em><b>Redefined Classifier</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param unqualifiedName The unqualified name of the {@link org.eclipse.uml2.Classifier} to retrieve.
* @return The {@link org.eclipse.uml2.Classifier} with the specified name, or <code>null</code>.
* @see #getRedefinedClassifiers()
* @generated
*/
Classifier getRedefinedClassifier(String unqualifiedName);
/**
* Returns the value of the '<em><b>Substitution</b></em>' containment reference list.
* The list contents are of type {@link org.eclipse.uml2.Substitution}.
* It is bidirectional and its opposite is '{@link org.eclipse.uml2.Substitution#getSubstitutingClassifier <em>Substituting Classifier</em>}'.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Substitution</em>' containment reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Substitution</em>' containment reference list.
* @see org.eclipse.uml2.UML2Package#getClassifier_Substitution()
* @see org.eclipse.uml2.Substitution#getSubstitutingClassifier
* @model type="org.eclipse.uml2.Substitution" opposite="substitutingClassifier" containment="true" volatile="true"
* @generated
*/
EList getSubstitutions();
/**
* Retrieves the {@link org.eclipse.uml2.Substitution} with the specified name from the '<em><b>Substitution</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param unqualifiedName The unqualified name of the {@link org.eclipse.uml2.Substitution} to retrieve.
* @return The {@link org.eclipse.uml2.Substitution} with the specified name, or <code>null</code>.
* @see #getSubstitutions()
* @generated
*/
Substitution getSubstitution(String unqualifiedName);
/**
* Creates a {@link org.eclipse.uml2.Substitution} and appends it to the '<em><b>Substitution</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param eClass The Ecore class of the {@link org.eclipse.uml2.Substitution} to create.
* @return The new {@link org.eclipse.uml2.Substitution}.
* @see #getSubstitutions()
* @generated
*/
Substitution createSubstitution(EClass eClass);
/**
* Returns the value of the '<em><b>Powertype Extent</b></em>' reference list.
* The list contents are of type {@link org.eclipse.uml2.GeneralizationSet}.
* It is bidirectional and its opposite is '{@link org.eclipse.uml2.GeneralizationSet#getPowertype <em>Powertype</em>}'.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Powertype Extent</em>' reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Powertype Extent</em>' reference list.
* @see org.eclipse.uml2.UML2Package#getClassifier_PowertypeExtent()
* @see org.eclipse.uml2.GeneralizationSet#getPowertype
* @model type="org.eclipse.uml2.GeneralizationSet" opposite="powertype"
* @generated
*/
EList getPowertypeExtents();
/**
* Retrieves the {@link org.eclipse.uml2.GeneralizationSet} with the specified name from the '<em><b>Powertype Extent</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param unqualifiedName The unqualified name of the {@link org.eclipse.uml2.GeneralizationSet} to retrieve.
* @return The {@link org.eclipse.uml2.GeneralizationSet} with the specified name, or <code>null</code>.
* @see #getPowertypeExtents()
* @generated
*/
GeneralizationSet getPowertypeExtent(String unqualifiedName);
/**
* Returns the value of the '<em><b>Owned Use Case</b></em>' containment reference list.
* The list contents are of type {@link org.eclipse.uml2.UseCase}.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Owned Use Case</em>' containment reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Owned Use Case</em>' containment reference list.
* @see org.eclipse.uml2.UML2Package#getClassifier_OwnedUseCase()
* @model type="org.eclipse.uml2.UseCase" containment="true"
* @generated
*/
EList getOwnedUseCases();
/**
* Retrieves the {@link org.eclipse.uml2.UseCase} with the specified name from the '<em><b>Owned Use Case</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param unqualifiedName The unqualified name of the {@link org.eclipse.uml2.UseCase} to retrieve.
* @return The {@link org.eclipse.uml2.UseCase} with the specified name, or <code>null</code>.
* @see #getOwnedUseCases()
* @generated
*/
UseCase getOwnedUseCase(String unqualifiedName);
/**
* Creates a {@link org.eclipse.uml2.UseCase} and appends it to the '<em><b>Owned Use Case</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param eClass The Ecore class of the {@link org.eclipse.uml2.UseCase} to create.
* @return The new {@link org.eclipse.uml2.UseCase}.
* @see #getOwnedUseCases()
* @generated
*/
UseCase createOwnedUseCase(EClass eClass);
/**
* Returns the value of the '<em><b>Representation</b></em>' reference.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Representation</em>' reference isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Representation</em>' reference.
* @see #setRepresentation(CollaborationOccurrence)
* @see org.eclipse.uml2.UML2Package#getClassifier_Representation()
* @model resolveProxies="false" volatile="true"
* @generated
*/
CollaborationOccurrence getRepresentation();
/**
* Sets the value of the '{@link org.eclipse.uml2.Classifier#getRepresentation <em>Representation</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param value the new value of the '<em>Representation</em>' reference.
* @see #getRepresentation()
* @generated
*/
void setRepresentation(CollaborationOccurrence value);
/**
* Returns the value of the '<em><b>Occurrence</b></em>' containment reference list.
* The list contents are of type {@link org.eclipse.uml2.CollaborationOccurrence}.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Occurrence</em>' containment reference list isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Occurrence</em>' containment reference list.
* @see org.eclipse.uml2.UML2Package#getClassifier_Occurrence()
* @model type="org.eclipse.uml2.CollaborationOccurrence" containment="true" volatile="true"
* @generated
*/
EList getOccurrences();
/**
* Retrieves the {@link org.eclipse.uml2.CollaborationOccurrence} with the specified name from the '<em><b>Occurrence</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param unqualifiedName The unqualified name of the {@link org.eclipse.uml2.CollaborationOccurrence} to retrieve.
* @return The {@link org.eclipse.uml2.CollaborationOccurrence} with the specified name, or <code>null</code>.
* @see #getOccurrences()
* @generated
*/
CollaborationOccurrence getOccurrence(String unqualifiedName);
/**
* Creates a {@link org.eclipse.uml2.CollaborationOccurrence} and appends it to the '<em><b>Occurrence</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param eClass The Ecore class of the {@link org.eclipse.uml2.CollaborationOccurrence} to create.
* @return The new {@link org.eclipse.uml2.CollaborationOccurrence}.
* @see #getOccurrences()
* @generated
*/
CollaborationOccurrence createOccurrence(EClass eClass);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* A query based on the following OCL expression:
* <code>
* member->select(oclIsKindOf(Feature))
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Set"
* @generated
*/
Set allFeatures();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* An invariant constraint based on the following OCL expression:
* <code>
* not self.allParents()->includes(self)
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Boolean"
* @generated
*/
boolean validateNoCyclesInGeneralization(DiagnosticChain diagnostics, Map context);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* An invariant constraint based on the following OCL expression:
* <code>
* self.parents()->forAll(c | self.maySpecializeType(c))
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Boolean"
* @generated
*/
boolean validateSpecializeType(DiagnosticChain diagnostics, Map context);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* An invariant constraint based on the following OCL expression:
* <code>
* self.inheritedMember->includesAll(self.inherit(self.parents()->collect(p | p.inheritableMembers(self)))
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Boolean"
* @generated
*/
boolean validateInheritedMember(DiagnosticChain diagnostics, Map context);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* A query based on the following OCL expression:
* <code>
* self.inherit(self.parents()->collect(p | p.inheritableMembers(self))
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Set"
* @generated
*/
Set inheritedMember();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* A query based on the following OCL expression:
* <code>
* generalization.general
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Set"
* @generated
*/
Set parents();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* A query based on the following OCL expression:
* <code>
* self.parents()->union(self.parents()->collect(p | p.allParents())
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Set"
* @generated
*/
Set allParents();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* A query based on the following OCL expression:
* <code>
* member->select(m | c.hasVisibilityOf(m))
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Set"
* @generated
*/
Set inheritableMembers(Classifier c);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* A query based on the following OCL expression:
* <code>
* true
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Boolean"
* @generated
*/
boolean hasVisibilityOf(NamedElement n);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* A query based on the following OCL expression:
* <code>
* inhs
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Set" parameters="org.eclipse.uml2.Set"
* @generated
*/
Set inherit(Set inhs);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* A query based on the following OCL expression:
* <code>
* self.oclIsKindOf(c.oclType)
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Boolean"
* @generated
*/
boolean maySpecializeType(Classifier c);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* A query based on the following OCL expression:
* <code>
* self.parents()
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Set"
* @generated
*/
Set general();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* An invariant constraint based on the following OCL expression:
* <code>
* general = self.parents()
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Boolean"
* @generated
*/
boolean validateGeneralEqualsParents(DiagnosticChain diagnostics, Map context);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* A query based on the following OCL expression:
* <code>
* (self=other) or (self.allParents()->includes(other))
* </code>
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.Boolean"
* @generated
*/
boolean conformsTo(Classifier other);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model parameters=""
* @generated
*/
EList getMembers();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model parameters=""
* @generated
*/
EList getOwnedElements();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model parameters=""
* @generated
*/
EList getRedefinedElements();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model parameters=""
* @generated
*/
EList getClientDependencies();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model parameters=""
* @generated
*/
EList getOwnedMembers();
// <!-- begin-custom-operations -->
/**
* Creates a generalization between this classifier and the specified
* general classifier.
*
* @param generalClassifier
* The classifier to which to create a generalization.
* @return The new generalization.
* @exception IllegalArgumentException
* If this classifier is already a direct or indirect parent
* or child of the general classifier.
*/
Generalization createGeneralization(Classifier generalClassifier);
// <!-- end-custom-operations -->
} // Classifier