001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *  http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing,
013     * software distributed under the License is distributed on an
014     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     * KIND, either express or implied.  See the License for the
016     * specific language governing permissions and limitations
017     * under the License.
018     */
019    
020    
021    package org.apache.geronimo.system.plugin;
022    
023    import java.io.IOException;
024    import java.util.Collections;
025    import java.util.Map;
026    
027    import org.apache.geronimo.gbean.GBeanInfo;
028    import org.apache.geronimo.gbean.GBeanInfoBuilder;
029    import org.apache.geronimo.kernel.repository.ArtifactManager;
030    import org.apache.geronimo.kernel.repository.ListableRepository;
031    import org.apache.geronimo.system.configuration.LocalAttributeManager;
032    import org.apache.geronimo.system.configuration.LocalPluginAttributeStore;
033    import org.apache.geronimo.system.resolver.ExplicitDefaultArtifactResolver;
034    import org.apache.geronimo.system.serverinfo.ServerInfo;
035    
036    /**
037     * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
038     */
039    public class ServerInstanceData {
040    
041        private String name;
042        private String attributeManagerFrom;
043        private String configFile = "var/config/config.xml";
044        private String configSubstitutionsFile = "var/config/config-substitutions.properties";
045        private String configSubstitutionsPrefix = "org.apache.geronimo.config.substitution.";
046        private String artifactAliasesFile = "var/config/artifact_aliases.properties";
047    
048    
049        public String getName() {
050            return name;
051        }
052    
053        public void setName(String name) {
054            this.name = name;
055        }
056    
057    
058        public String getAttributeManagerFrom() {
059            return attributeManagerFrom;
060        }
061    
062        public void setAttributeManagerFrom(String attributeManagerFrom) {
063            this.attributeManagerFrom = attributeManagerFrom;
064        }
065    
066        public String getConfigFile() {
067            return configFile;
068        }
069    
070        public void setConfigFile(String configFile) {
071            this.configFile = configFile;
072        }
073    
074        public String getConfigSubstitutionsFile() {
075            return configSubstitutionsFile;
076        }
077    
078        public void setConfigSubstitutionsFile(String configSubstitutionsFile) {
079            this.configSubstitutionsFile = configSubstitutionsFile;
080        }
081    
082        public String getConfigSubstitutionsPrefix() {
083            return configSubstitutionsPrefix;
084        }
085    
086        public void setConfigSubstitutionsPrefix(String configSubstitutionsPrefix) {
087            this.configSubstitutionsPrefix = configSubstitutionsPrefix;
088        }
089    
090        public String getArtifactAliasesFile() {
091            return artifactAliasesFile;
092        }
093    
094        public void setArtifactAliasesFile(String artifactAliasesFile) {
095            this.artifactAliasesFile = artifactAliasesFile;
096        }
097    
098        public ServerInstance getServerInstance(ArtifactManager artifactManager, ListableRepository targetRepo, ServerInfo serverInfo, Map<String, org.apache.geronimo.system.plugin.ServerInstance> serverInstances, boolean live) throws IOException {
099            ExplicitDefaultArtifactResolver geronimoArtifactResolver = new ExplicitDefaultArtifactResolver(
100                    getArtifactAliasesFile(),
101                    artifactManager,
102                    Collections.singleton(targetRepo),
103                    serverInfo);
104            LocalPluginAttributeStore attributeStore;
105            if (attributeManagerFrom == null) {
106                attributeStore = new LocalAttributeManager(getConfigFile(),
107                        getConfigSubstitutionsFile(),
108                        getConfigSubstitutionsPrefix(),
109                        false,
110                        serverInfo);
111                ((LocalAttributeManager)attributeStore).load();
112            } else {
113                ServerInstance shared = serverInstances.get(attributeManagerFrom);
114                if (shared == null) {
115                    throw new IllegalArgumentException("Incorrect configuration: no server instance named '" + attributeManagerFrom + "' defined before being shared from '" + name + "'");
116                }
117                attributeStore = (LocalPluginAttributeStore) shared.getAttributeStore();
118            }
119            return new ServerInstance(name, attributeStore, geronimoArtifactResolver);
120        }
121    
122        @Override
123        public String toString() {
124            StringBuffer buf = new StringBuffer();
125            buf.append("ServerInstanceData:\n");
126            buf.append("  Name: ").append(getName()).append("\n");
127            buf.append("  AttributeManagerFrom: ").append(getAttributeManagerFrom()).append("\n");
128            buf.append("  ConfigFile: ").append(getConfigFile()).append("\n");
129            buf.append("  ConfigSubstitutionsFile: ").append(getConfigSubstitutionsFile()).append("\n");
130            buf.append("  ConfigSubstitutionsPrefix: ").append(getConfigSubstitutionsPrefix()).append("\n");
131            buf.append("  ArtifactAliasesFile: ").append(getArtifactAliasesFile()).append("\n");
132            return buf.toString();
133        }
134    
135        public static final GBeanInfo GBEAN_INFO;
136    
137        static {
138            GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(ServerInstanceData.class, "ServerInstanceData");
139            infoFactory.addAttribute("name", String.class, true, true);
140            infoFactory.addAttribute("attributeManagerFrom", String.class, true, true);
141            infoFactory.addAttribute("configFile", String.class, true, true);
142            infoFactory.addAttribute("configSubstitutionsFile", String.class, true, true);
143            infoFactory.addAttribute("configSubstitutionsPrefix", String.class, true, true);
144            infoFactory.addAttribute("artifactAliasesFile", String.class, true, true);
145    
146            GBEAN_INFO = infoFactory.getBeanInfo();
147        }
148    
149        public static GBeanInfo getGBeanInfo() {
150            return GBEAN_INFO;
151        }
152    }