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