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.mavenplugins.car;
022
023 import java.io.File;
024 import java.io.FileInputStream;
025 import java.io.FileWriter;
026 import java.io.InputStream;
027 import java.io.Writer;
028 import java.util.Iterator;
029
030 import org.apache.geronimo.kernel.config.NoSuchStoreException;
031 import org.apache.geronimo.kernel.repository.Artifact;
032 import org.apache.geronimo.system.plugin.PluginInstallerGBean;
033 import org.apache.geronimo.system.plugin.PluginXmlUtil;
034 import org.apache.geronimo.system.plugin.model.PluginArtifactType;
035 import org.apache.geronimo.system.plugin.model.PluginListType;
036 import org.apache.geronimo.system.plugin.model.PluginType;
037
038 /**
039 * Maintain the geronimo-plugins.xml catalog in the local maven repository by merging in the geronimo-plugin.xml from the current project.
040 *
041 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
042 * @goal update-pluginlist
043 */
044 public class UpdatePluginListMojo extends AbstractCarMojo {
045
046 /**
047 * Location of the (just generated) plugin metadata file to merge into the geronimo-plugins.xml catalog in the local maven repository.
048 *
049 * @parameter expression="${project.build.directory}/resources/META-INF/geronimo-plugin.xml"
050 * @required
051 */
052 protected File targetFile;
053
054 protected void doExecute() throws Exception {
055
056 InputStream min = new FileInputStream(targetFile);
057 PluginType plugin;
058 try {
059 plugin = PluginXmlUtil.loadPluginMetadata(min);
060 } finally {
061 min.close();
062 }
063
064 String path = getArtifactRepository().getBasedir();
065 File baseDir = new File(path);
066
067 File outFile = new File(baseDir, "geronimo-plugins.xml");
068 PluginListType pluginList;
069 if (outFile.exists()) {
070 InputStream in = new FileInputStream(outFile);
071 try {
072 pluginList = PluginXmlUtil.loadPluginList(in);
073 } finally {
074 in.close();
075 }
076 } else {
077 pluginList = new PluginListType();
078 pluginList.getDefaultRepository().add(path);
079 }
080
081 updatePluginList(plugin, pluginList);
082 Writer out = new FileWriter(outFile, false);
083 try {
084 PluginXmlUtil.writePluginList(pluginList, out);
085 } finally {
086 out.close();
087 }
088 }
089
090 public void updatePluginList(PluginType plugin, PluginListType pluginList) throws NoSuchStoreException {
091 PluginType key = PluginInstallerGBean.toKey(plugin);
092 PluginArtifactType instance = plugin.getPluginArtifact().get(0);
093 Artifact id = PluginInstallerGBean.toArtifact(instance.getModuleId());
094 boolean foundKey = false;
095 for (PluginType test : pluginList.getPlugin()) {
096 for (Iterator<PluginArtifactType> it = test.getPluginArtifact().iterator(); it.hasNext();) {
097 PluginArtifactType testInstance = it.next();
098 Artifact testId = PluginInstallerGBean.toArtifact(testInstance.getModuleId());
099 if (id.equals(testId)) {
100 //if the module id appears anywhere, remove that instance
101 it.remove();
102 }
103 }
104 PluginType testKey = PluginInstallerGBean.toKey(test);
105 if (key.equals(testKey)) {
106 foundKey = true;
107 //if the name, group, author, licences, url match, then add this instance to current pluginType
108 test.getPluginArtifact().add(instance);
109 }
110 }
111 if (!foundKey) {
112 //did not find a matching key
113 pluginList.getPlugin().add(plugin);
114 }
115 }
116
117 }