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 package org.apache.geronimo.mavenplugins.car; 021 022 import java.io.File; 023 import java.io.IOException; 024 import java.util.List; 025 026 import org.apache.geronimo.gbean.GBeanInfo; 027 import org.apache.geronimo.gbean.GBeanInfoBuilder; 028 import org.apache.geronimo.kernel.config.ConfigurationData; 029 import org.apache.geronimo.kernel.config.InvalidConfigException; 030 import org.apache.geronimo.kernel.config.NoSuchConfigException; 031 import org.apache.geronimo.kernel.config.ConfigurationInfo; 032 import org.apache.geronimo.kernel.repository.Artifact; 033 import org.apache.geronimo.kernel.repository.WritableListableRepository; 034 import org.apache.geronimo.kernel.Kernel; 035 import org.apache.geronimo.system.configuration.ExecutableConfigurationUtil; 036 import org.apache.geronimo.system.configuration.RepositoryConfigurationStore; 037 038 /** 039 * Implementation of ConfigurationStore that loads Configurations from a repository. 040 * This implementation is read-only on the assumption that a separate maven task will 041 * handle installation of a built package into the repository. 042 * 043 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $ 044 */ 045 public class MavenConfigStore 046 extends RepositoryConfigurationStore 047 { 048 public MavenConfigStore(Kernel kernel, String objectName, WritableListableRepository repository) { 049 super(kernel, objectName, null, repository); 050 } 051 052 public MavenConfigStore(WritableListableRepository repository) { 053 super(repository); 054 } 055 056 public File createNewConfigurationDir(Artifact configId) { 057 try { 058 File tmpFile = File.createTempFile("package", ".tmpdir"); 059 tmpFile.delete(); 060 tmpFile.mkdir(); 061 if (!tmpFile.isDirectory()) { 062 return null; 063 } 064 // create the meta-inf dir 065 File metaInf = new File(tmpFile, "META-INF"); 066 metaInf.mkdirs(); 067 return tmpFile; 068 } 069 catch (IOException e) { 070 // doh why can't I throw this? 071 return null; 072 } 073 } 074 075 public void install(ConfigurationData configurationData) throws IOException, InvalidConfigException { 076 File source = configurationData.getConfigurationDir(); 077 if (!source.isDirectory()) { 078 throw new InvalidConfigException("Source must be a directory: " + source); 079 } 080 081 Artifact configId = configurationData.getId(); 082 File targetFile = repository.getLocation(configId); 083 ExecutableConfigurationUtil.createExecutableConfiguration(configurationData, null, targetFile); 084 } 085 086 public void uninstall(Artifact configID) throws NoSuchConfigException, IOException { 087 File targetFile = repository.getLocation(configID); 088 targetFile.delete(); 089 } 090 091 public List<ConfigurationInfo> listConfigurations() { 092 throw new UnsupportedOperationException(); 093 } 094 095 public static final GBeanInfo GBEAN_INFO; 096 097 public static GBeanInfo getGBeanInfo() { 098 return GBEAN_INFO; 099 } 100 101 static { 102 GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic(MavenConfigStore.class, "ConfigurationStore"); 103 builder.addAttribute("kernel", Kernel.class, false); 104 builder.addAttribute("objectName", String.class, false); 105 builder.addReference("Repository", WritableListableRepository.class, "Repository"); 106 builder.setConstructor(new String[]{"kernel", "objectName", "Repository"}); 107 GBEAN_INFO = builder.getBeanInfo(); 108 } 109 }