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.kuali.common.util.spring;
017    
018    import java.io.File;
019    
020    import org.kuali.common.util.Artifact;
021    import org.kuali.common.util.Assert;
022    import org.kuali.common.util.LocationUtils;
023    import org.kuali.common.util.RepositoryUtils;
024    import org.springframework.beans.factory.FactoryBean;
025    
026    public class ArtifactPathFactoryBean extends Artifact implements FactoryBean<String> {
027    
028            File localRepositoryDir = RepositoryUtils.getDefaultLocalRepositoryDir();
029            boolean mustExist;
030    
031            @Override
032            public String getObject() throws Exception {
033    
034                    Assert.notNull(localRepositoryDir);
035                    Assert.hasText(getGroupId());
036                    Assert.hasText(getArtifactId());
037                    Assert.hasText(getVersion());
038                    Assert.hasText(getPackaging());
039    
040                    File file = RepositoryUtils.getFile(localRepositoryDir, this);
041                    validate(file);
042                    return LocationUtils.getCanonicalPath(file);
043            }
044    
045            protected void validate(File file) {
046                    if (!file.exists() && mustExist) {
047                            throw new IllegalStateException(file + " does not exist");
048                    }
049            }
050    
051            @Override
052            public Class<String> getObjectType() {
053                    return String.class;
054            }
055    
056            @Override
057            public boolean isSingleton() {
058                    return false;
059            }
060    
061            public File getLocalRepositoryDir() {
062                    return localRepositoryDir;
063            }
064    
065            public void setLocalRepositoryDir(File localRepositoryDir) {
066                    this.localRepositoryDir = localRepositoryDir;
067            }
068    
069            public boolean isMustExist() {
070                    return mustExist;
071            }
072    
073            public void setMustExist(boolean mustExist) {
074                    this.mustExist = mustExist;
075            }
076    
077    }