001    /**
002     *  Licensed to the Apache Software Foundation (ASF) under one or more
003     *  contributor license agreements.  See the NOTICE file distributed with
004     *  this work for additional information regarding copyright ownership.
005     *  The ASF licenses this file to You under the Apache License, Version 2.0
006     *  (the "License"); you may not use this file except in compliance with
007     *  the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     *  Unless required by applicable law or agreed to in writing, software
012     *  distributed under the License is distributed on an "AS IS" BASIS,
013     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     *  See the License for the specific language governing permissions and
015     *  limitations under the License.
016     */
017    package org.apache.geronimo.management.geronimo;
018    
019    import java.util.List;
020    import java.util.ArrayList;
021    import java.beans.PropertyEditor;
022    
023    import org.apache.geronimo.gbean.AbstractName;
024    import org.apache.geronimo.common.propertyeditor.PropertyEditors;
025    
026    /**
027     * Specialization of NetworkManager for web containers.
028     *
029     * @version $Rev: 562301 $ $Date: 2007-08-02 20:28:32 -0400 (Thu, 02 Aug 2007) $
030     */
031    public interface WebManager extends NetworkManager {
032        public final static String PROTOCOL_HTTP = "HTTP";
033        public final static String PROTOCOL_HTTPS = "HTTPS";
034        public final static String PROTOCOL_AJP = "AJP";
035    
036        /**
037         * Gets the WebAccessLog implementation for a web container.
038         * May be null if the access log cannot be managed.
039         *
040         * @param container The container whose access log is interesting
041         *
042         */
043        public WebAccessLog getAccessLog(WebContainer container);
044    
045        List<ConnectorType> getConnectorTypes();
046    
047        List<ConnectorAttribute> getConnectorAttributes(ConnectorType connectorType);
048    
049        AbstractName getConnectorConfiguration(ConnectorType connectorType, List<ConnectorAttribute> connectorAttributes, WebContainer container, String uniqueName);
050    
051        ConnectorType getConnectorType(AbstractName connectorName);
052    
053        public class ConnectorType {
054            private final String description;
055    
056    
057            public ConnectorType(String description) {
058                this.description = description;
059            }
060    
061    
062            public String getDescription() {
063                return description;
064            }
065    
066    
067            @Override
068            public int hashCode() {
069                final int PRIME = 31;
070                int result = 1;
071                result = PRIME * result + ((description == null) ? 0 : description.hashCode());
072                return result;
073            }
074    
075    
076            @Override
077            public boolean equals(Object obj) {
078                if (this == obj)
079                    return true;
080                if (obj == null)
081                    return false;
082                if (getClass() != obj.getClass())
083                    return false;
084                final ConnectorType other = (ConnectorType) obj;
085                if (description == null) {
086                    if (other.description != null)
087                        return false;
088                } else if (!description.equals(other.description))
089                    return false;
090                return true;
091            }
092        }
093    
094        public class ConnectorAttribute<T> {
095            private final String attributeName;
096            private String stringValue;
097            private final Class<T> clazz;
098            private T value;
099            private final String description;
100            private boolean required;
101    
102            public ConnectorAttribute(String attributeName, T value, String description, Class<T> clazz, boolean required) {
103                this.attributeName = attributeName;
104                this.value = value;
105                this.description = description;
106                this.clazz = clazz;
107                this.required = required;
108            }
109            
110            public ConnectorAttribute(String attributeName, T value, String description, Class<T> clazz) {
111                this(attributeName, value, description, clazz, false);
112            }
113    
114            public ConnectorAttribute(ConnectorAttribute<T> connectorAttribute) {
115                this.attributeName = connectorAttribute.attributeName;
116                this.value = connectorAttribute.value;
117                this.description = connectorAttribute.description;
118                this.clazz = connectorAttribute.clazz;
119                this.required = connectorAttribute.required;
120            }
121    
122            public String getAttributeName() {
123                return attributeName;
124            }
125    
126            public String getStringValue() {
127    //            Class<T> clazz = getClass().getTypeParameters();
128                if (value == null) return null;
129                PropertyEditor propertyEditor = PropertyEditors.getEditor(clazz);
130                propertyEditor.setValue(value);
131                return propertyEditor.getAsText();
132            }
133    
134            public void setStringValue(String stringValue) {
135                PropertyEditor propertyEditor = PropertyEditors.getEditor(clazz);
136                propertyEditor.setAsText(stringValue);
137                this.value = (T) propertyEditor.getValue();
138            }
139    
140            public T getValue() {
141                return value;
142            }
143    
144            public void setValue(T value) {
145                this.value = value;
146            }
147    
148            public String getDescription() {
149                return description;
150            }
151    
152            public static List<ConnectorAttribute> copy(List<ConnectorAttribute> source) {
153                List<ConnectorAttribute> copy = new ArrayList<ConnectorAttribute>(source.size());
154                for (ConnectorAttribute connectorAttribute: source) {
155                    copy.add(new ConnectorAttribute(connectorAttribute));
156                }
157                return copy;
158            }
159    
160            public Class<T> getAttributeClass() {
161                return clazz;
162            }
163            
164            public boolean isRequired() {
165                return required;
166            }
167    
168            public void setRequired(boolean required) {
169                this.required = required;
170            }
171    
172        }
173    }