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;
017    
018    import org.apache.commons.lang.StringUtils;
019    import org.codehaus.mojo.license.model.License;
020    import org.codehaus.mojo.license.model.LicenseStore;
021    
022    import java.util.Arrays;
023    
024    /**
025     * Abstract mojo which using a {@link #licenseName} and owns a
026     * {@link #licenseStore}.
027     *
028     * @author tchemit <chemit@codelutin.com>
029     * @since 1.0
030     */
031    public abstract class AbstractLicenseNameMojo
032        extends AbstractLicenseMojo
033    {
034    
035        /**
036         * To specify an external extra licenses repository resolver (says the base
037         * url of the repository where the {@code license.properties} is present).
038         *
039         * @parameter expression="${license.licenseResolver}"
040         * @since 1.0
041         */
042        private String licenseResolver;
043    
044        /**
045         * A flag to keep a backup of every modified file.
046         *
047         * @parameter expression="${license.keepBackup}"  default-value="false"
048         * @since 1.0
049         */
050        private boolean keepBackup;
051    
052        /**
053         * Name of the license to use in the project.
054         *
055         * @parameter expression="${license.licenseName}"
056         * @since 1.0
057         */
058        private String licenseName;
059    
060        /**
061         * License loaded from the {@link #licenseName}.
062         */
063        private License license;
064    
065        /**
066         * Store of available licenses.
067         */
068        private LicenseStore licenseStore;
069    
070        /**
071         * When is sets to {@code true}, will skip execution.
072         * <p/>
073         * This will take effects in method {@link #checkSkip()}.
074         * So the method {@link #doAction()} will never be invoked.
075         *
076         * @return {@code true} if goal will not be executed
077         */
078        public abstract boolean isSkip();
079    
080        /**
081         * Changes internal state {@code skip} to execute (or not) goal.
082         *
083         * @param skip new state value
084         */
085        public abstract void setSkip( boolean skip );
086    
087        @Override
088        protected boolean checkSkip()
089        {
090            if ( isSkip() )
091            {
092                getLog().info( "skip flag is on, will skip goal." );
093                return false;
094            }
095            return super.checkSkip();
096        }
097    
098        @Override
099        protected void init()
100            throws Exception
101        {
102    
103            if ( isSkip() )
104            {
105                return;
106            }
107    
108            // init licenses store
109            licenseStore = LicenseStore.createLicenseStore( getLog(), getLicenseResolver() );
110    
111            // check licenseName exists
112            license = getLicense( licenseName, true );
113        }
114    
115        public License getLicense( String licenseName, boolean checkIfExists )
116            throws IllegalArgumentException, IllegalStateException
117        {
118            if ( StringUtils.isEmpty( licenseName ) )
119            {
120                throw new IllegalArgumentException( "licenseName can not be null, nor empty" );
121            }
122            LicenseStore licenseStore = getLicenseStore();
123            if ( licenseStore == null )
124            {
125                throw new IllegalStateException( "No license store initialized!" );
126            }
127            License license = licenseStore.getLicense( licenseName );
128            if ( checkIfExists && license == null )
129            {
130                throw new IllegalArgumentException( "License named '" + licenseName + "' is unknown, use one of " +
131                                                        Arrays.toString( licenseStore.getLicenseNames() ) );
132            }
133            return license;
134        }
135    
136        public boolean isKeepBackup()
137        {
138            return keepBackup;
139        }
140    
141        public String getLicenseName()
142        {
143            return licenseName;
144        }
145    
146        public String getLicenseResolver()
147        {
148            return licenseResolver;
149        }
150    
151        public LicenseStore getLicenseStore()
152        {
153            return licenseStore;
154        }
155    
156        public License getLicense()
157        {
158            return license;
159        }
160    
161        public void setKeepBackup( boolean keepBackup )
162        {
163            this.keepBackup = keepBackup;
164        }
165    
166        public void setLicenseResolver( String licenseResolver )
167        {
168            this.licenseResolver = licenseResolver;
169        }
170    
171        public void setLicenseName( String licenseName )
172        {
173            this.licenseName = licenseName;
174        }
175    
176        public void setLicenseStore( LicenseStore licenseStore )
177        {
178            this.licenseStore = licenseStore;
179        }
180    
181    }