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    
018    
019    package org.apache.commons.modeler.ant;
020    
021    
022    import java.io.File;
023    import java.io.FileOutputStream;
024    import java.io.ObjectOutputStream;
025    import java.net.URL;
026    
027    import org.apache.commons.logging.Log;
028    import org.apache.commons.logging.LogFactory;
029    import org.apache.commons.modeler.ManagedBean;
030    import org.apache.commons.modeler.Registry;
031    import org.apache.tools.ant.BuildException;
032    
033    /**
034     * Load descriptors into registry.
035     *
036     * @author Costin Manolache
037     */
038    public final class RegistryTask  {
039        private static Log log = LogFactory.getLog(RegistryTask.class);
040    
041        public RegistryTask() {
042        }
043    
044        String resource;
045        String file;
046        String type="MbeansDescriptorsDOMSource";
047    
048        /** Set the resource type that will be loaded
049         *
050         * @param type
051         */
052        public void setType( String type ) {
053            this.type=type;
054        }
055    
056        public void setFile( String file ) {
057            this.file=file;
058        }
059    
060        public void setResource( String res ) {
061            this.resource=res;
062        }
063    
064        String outFile;
065    
066        public void setOut( String outFile ) {
067            this.outFile=outFile;
068        }
069    
070        public void execute() throws Exception {
071            URL url=null;
072    
073            if( resource != null ) {
074                url=this.getClass().getClassLoader().getResource(resource);
075            } else if( file != null ) {
076                File f=new File(file);
077                url=new URL("file", null, f.getAbsolutePath());
078            } else {
079                throw new BuildException( "Resource or file attribute required");
080            }
081    
082            Registry.getRegistry().loadDescriptors( type, url, null);
083    
084            if( outFile !=null ) {
085                FileOutputStream fos=new FileOutputStream(outFile);
086                ObjectOutputStream oos=new ObjectOutputStream(fos);
087                Registry reg=Registry.getRegistry();
088                String beans[]=reg.findManagedBeans();
089                ManagedBean mbeans[]=new ManagedBean[beans.length];
090                for( int i=0; i<beans.length; i++ ) {
091                    mbeans[i]=reg.findManagedBean(beans[i]);
092                }
093                oos.writeObject( mbeans );
094                oos.flush();
095                oos.close();
096                fos.close();
097            }
098        }
099    }
100