001    /**
002     * <copyright>
003     * </copyright>
004     *
005     * $Id$
006     */
007    package com.hammurapi.config;
008    
009    import org.eclipse.emf.common.util.EList;
010    import org.eclipse.emf.ecore.EObject;
011    
012    import com.hammurapi.config.bootstrap.ConfigurationException;
013    import com.hammurapi.config.runtime.InjectionConfig;
014    
015    /**
016     * <!-- begin-user-doc -->
017     * A representation of the model object '<em><b>Property Source</b></em>'.
018     * <!-- end-user-doc -->
019     *
020     * <!-- begin-model-doc -->
021     * Source of properties, i.e. named objects.
022     * <!-- end-model-doc -->
023     *
024     * <p>
025     * The following features are supported:
026     * <ul>
027     *   <li>{@link com.hammurapi.config.PropertySource#getProperty <em>Property</em>}</li>
028     *   <li>{@link com.hammurapi.config.PropertySource#getProfile <em>Profile</em>}</li>
029     *   <li>{@link com.hammurapi.config.PropertySource#getClassPath <em>Class Path</em>}</li>
030     * </ul>
031     * </p>
032     *
033     * @see com.hammurapi.config.ConfigPackage#getPropertySource()
034     * @model interface="true" abstract="true"
035     * @generated
036     */
037    public interface PropertySource extends EObject {
038            /**
039             * Returns the value of the '<em><b>Property</b></em>' containment reference list.
040             * The list contents are of type {@link com.hammurapi.config.Named}.
041             * <!-- begin-user-doc -->
042             * <!-- end-user-doc -->
043             * <!-- begin-model-doc -->
044             * Collection of named objects.
045             * <!-- end-model-doc -->
046             * @return the value of the '<em>Property</em>' containment reference list.
047             * @see com.hammurapi.config.ConfigPackage#getPropertySource_Property()
048             * @model containment="true"
049             * @generated
050             */
051            EList<Named> getProperty();
052    
053            /**
054             * Returns the value of the '<em><b>Profile</b></em>' containment reference list.
055             * The list contents are of type {@link com.hammurapi.config.Profile}.
056             * It is bidirectional and its opposite is '{@link com.hammurapi.config.Profile#getOwner <em>Owner</em>}'.
057             * <!-- begin-user-doc -->
058             * <!-- end-user-doc -->
059             * <!-- begin-model-doc -->
060             * Profiles to customize properties for different environmetns.
061             * <!-- end-model-doc -->
062             * @return the value of the '<em>Profile</em>' containment reference list.
063             * @see com.hammurapi.config.ConfigPackage#getPropertySource_Profile()
064             * @see com.hammurapi.config.Profile#getOwner
065             * @model opposite="owner" containment="true"
066             * @generated
067             */
068            EList<Profile> getProfile();
069    
070            /**
071             * Returns the value of the '<em><b>Class Path</b></em>' containment reference list.
072             * The list contents are of type {@link com.hammurapi.config.Path}.
073             * <!-- begin-user-doc -->
074             * <!-- end-user-doc -->
075             * <!-- begin-model-doc -->
076             * Each profile can have its own classpath. Profile classloader is constructed with the profile's path entries and parent profile or object definition classloader. It allows to have different qualities of bytecode in different environments. E.g. in DEV the code can be compiled with debug information, in load test it can be instrumented to collect performance metrics, and in PROD it can be compiled with debug information off to improve performance.
077             * <!-- end-model-doc -->
078             * @return the value of the '<em>Class Path</em>' containment reference list.
079             * @see com.hammurapi.config.ConfigPackage#getPropertySource_ClassPath()
080             * @model containment="true"
081             * @generated
082             */
083            EList<Path> getClassPath();
084    
085            void injectProperties(InjectionConfig injectionConfig) throws ConfigurationException;
086    
087    } // PropertySource