001    /**
002     * Copyright 2010-2012 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.codehaus.mojo.license.model;
017    
018    import org.apache.commons.lang.builder.ToStringBuilder;
019    import org.apache.commons.lang.builder.ToStringStyle;
020    import org.codehaus.mojo.license.MojoHelper;
021    import org.codehaus.plexus.util.IOUtil;
022    
023    import java.io.BufferedReader;
024    import java.io.IOException;
025    import java.io.InputStreamReader;
026    import java.io.Reader;
027    import java.net.URL;
028    
029    /**
030     * The model of a license.
031     *
032     * @author tchemit <chemit@codelutin.com>
033     * @since 1.0
034     */
035    public class License
036    {
037    
038        public static final String LICENSE_HEADER_FILE = "header.txt";
039    
040        public static final String LICENSE_CONTENT_FILE = "license.txt";
041    
042        /**
043         * base url of license (directory where to find license files)
044         */
045        protected URL baseURL;
046    
047        /**
048         * the name of the licenses (ex lgpl-3.0)
049         */
050        protected String name;
051    
052        /**
053         * the description of the license
054         */
055        protected String description;
056    
057        /**
058         * url of the license's content
059         */
060        protected URL licenseURL;
061    
062        /**
063         * url of the license header's content
064         */
065        protected URL headerURL;
066    
067        public License()
068        {
069        }
070    
071        public String getName()
072        {
073            return name;
074        }
075    
076        public URL getLicenseURL()
077        {
078            if ( licenseURL == null )
079            {
080                licenseURL = MojoHelper.getUrl( getBaseURL(), LICENSE_CONTENT_FILE );
081            }
082            return licenseURL;
083        }
084    
085        public URL getHeaderURL()
086        {
087            if ( headerURL == null )
088            {
089                headerURL = MojoHelper.getUrl( getBaseURL(), LICENSE_HEADER_FILE );
090            }
091            return headerURL;
092        }
093    
094        public String getDescription()
095        {
096            return description;
097        }
098    
099        public URL getBaseURL()
100        {
101            return baseURL;
102        }
103    
104        public String getLicenseContent( String encoding )
105            throws IOException
106        {
107            if ( baseURL == null )
108            {
109                throw new IllegalStateException( "no baseURL defined, can not obtain license content in " + this );
110            }
111    
112            Reader r = new BufferedReader( new InputStreamReader( getLicenseURL().openStream(), encoding ) );
113            try
114            {
115                return IOUtil.toString( r );
116            }
117            finally
118            {
119                r.close();
120            }
121        }
122    
123        public String getHeaderContent( String encoding )
124            throws IOException
125        {
126            if ( baseURL == null )
127            {
128                throw new IllegalStateException( "no baseURL defined, can not obtain header content in " + this );
129            }
130            Reader r = new BufferedReader( new InputStreamReader( getHeaderURL().openStream(), encoding ) );
131            try
132            {
133                return IOUtil.toString( r );
134            }
135            finally
136            {
137                r.close();
138            }
139        }
140    
141        public void setName( String name )
142        {
143            this.name = name;
144        }
145    
146        public void setDescription( String description )
147        {
148            this.description = description;
149        }
150    
151        public void setBaseURL( URL baseURL )
152        {
153            this.baseURL = baseURL;
154        }
155    
156        public void setLicenseURL( URL licenseURL )
157        {
158            this.licenseURL = licenseURL;
159        }
160    
161        public void setHeaderURL( URL headerURL )
162        {
163            this.headerURL = headerURL;
164        }
165    
166        @Override
167        public String toString()
168        {
169            ToStringBuilder builder = new ToStringBuilder( this, ToStringStyle.MULTI_LINE_STYLE );
170            builder.append( "name", name );
171            builder.append( "description", description );
172            builder.append( "licenseURL", licenseURL );
173            builder.append( "headerURL", headerURL );
174            return builder.toString();
175        }
176    }