001 /*
002 * Copyright 2005 Stephen J. McConnell.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
013 * implied.
014 *
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package net.dpml.test.composite;
020
021 import java.awt.Color;
022 import java.util.Map;
023
024 import net.dpml.logging.Logger;
025
026 import net.dpml.test.ColorManager;
027
028 /**
029 * This component declares an inner Parts interface through which
030 * it accesses a map of the context infomation of a subsidiary component
031 * named 'child'. The subsidiary component is defined and established
032 * within the component types definition (see build file for details).
033 *
034 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a>
035 * @version 1.2.0
036 */
037 public class CompositeComponent implements ColorManager
038 {
039 //------------------------------------------------------------------
040 // concerns
041 //------------------------------------------------------------------
042
043 /**
044 * The construction criteria.
045 */
046 public interface Context
047 {
048 /**
049 * Return the assigned color.
050 * @return the color value
051 */
052 Color getColor();
053 }
054
055 /**
056 * Internal part managmeent interface.
057 */
058 public interface Parts
059 {
060 /**
061 * Get the context map of the child component.
062 * @return the context map
063 */
064 Map getChildMap();
065
066 /**
067 * Return the child componet as a service instance.
068 * @return the color manager
069 */
070 ChildComponent getChild();
071 }
072
073 //------------------------------------------------------------------
074 // state
075 //------------------------------------------------------------------
076
077 /**
078 * The logging channel.
079 */
080 private final Logger m_logger;
081
082 /**
083 * The assigned context instance.
084 */
085 private final Context m_context;
086
087 /**
088 * The assigned part manager.
089 */
090 private final Parts m_parts;
091
092 //------------------------------------------------------------------
093 // constructor
094 //------------------------------------------------------------------
095
096 /**
097 * Creation of a new composite component instance.
098 * @param logger the assingned logging channel
099 * @param context a context implementation
100 * @param parts the parts manager
101 */
102 public CompositeComponent( final Logger logger, final Context context, final Parts parts )
103 {
104 logger.debug( "instantiation" );
105
106 m_context = context;
107 m_logger = logger;
108 m_parts = parts;
109 Map map = parts.getChildMap();
110 map.put( "color", context.getColor() );
111 }
112
113 //------------------------------------------------------------------
114 // Example
115 //------------------------------------------------------------------
116
117 /**
118 * Return the color value assigned to the component context.
119 * @return the color value
120 */
121 public Color getColor()
122 {
123 return m_context.getColor();
124 }
125
126 //------------------------------------------------------------------
127 // Validation
128 //------------------------------------------------------------------
129
130 /**
131 * Return the child component for evaluation by the testcase.
132 * @return ythe child
133 */
134 public ChildComponent getChild()
135 {
136 return m_parts.getChild();
137 }
138
139 //------------------------------------------------------------------
140 // internal
141 //------------------------------------------------------------------
142
143 /**
144 * Return the assigned logging channel.
145 * @return the logging channel
146 */
147 private Logger getLogger()
148 {
149 return m_logger;
150 }
151 }