001package org.kuali.common.util.properties;
002
003import java.util.ArrayList;
004import java.util.Arrays;
005import java.util.List;
006
007import org.kuali.common.util.project.ProjectService;
008import org.kuali.common.util.project.ProjectUtils;
009import org.kuali.common.util.project.model.Project;
010import org.kuali.common.util.project.model.ProjectIdentifier;
011import org.kuali.common.util.project.model.ProjectResource;
012
013import com.google.common.base.Preconditions;
014import com.google.common.collect.ImmutableList;
015
016public class DefaultPropertiesLocationService implements PropertiesLocationService {
017
018        public DefaultPropertiesLocationService(ProjectService projectService) {
019                this(projectService, DEFAULT_CACHE_PROPERTIES_VALUE);
020        }
021
022        public DefaultPropertiesLocationService(ProjectService projectService, boolean cache) {
023                Preconditions.checkNotNull(projectService, "'projectService' cannot be null");
024                this.projectService = projectService;
025                this.cache = cache;
026        }
027
028        private static final boolean DEFAULT_CACHE_PROPERTIES_VALUE = true;
029
030        private final ProjectService projectService;
031        private final boolean cache;
032
033        @Override
034        public List<Location> getLocations(ProjectIdentifier identifier, List<String> filenames) {
035                List<Location> locations = new ArrayList<Location>();
036                for (String filename : filenames) {
037                        locations.add(getLocation(identifier, filename));
038                }
039                return locations;
040        }
041
042        @Override
043        public List<Location> getLocations(ProjectIdentifier identifier, String... filenames) {
044                return getLocations(identifier, Arrays.asList(filenames));
045        }
046
047        @Override
048        public Location getLocation(ProjectIdentifier identifier, String filename) {
049                Project project = projectService.getProject(identifier);
050                String value = ProjectUtils.getClasspathPrefix(identifier) + "/" + filename;
051                String encoding = ProjectUtils.getEncoding(project);
052                return new Location(value, encoding, cache);
053        }
054
055        /**
056         * @deprecated
057         */
058        @Deprecated
059        @Override
060        public List<Location> getLocations(org.kuali.common.util.project.model.FeatureIdentifier identifier, String... filenames) {
061                return getLocations(identifier, ImmutableList.copyOf(filenames));
062        }
063
064        /**
065         * @deprecated
066         */
067        @Deprecated
068        @Override
069        public List<Location> getLocations(org.kuali.common.util.project.model.FeatureIdentifier identifier, List<String> filenames) {
070                List<Location> locations = new ArrayList<Location>();
071                for (String filename : filenames) {
072                        locations.add(getLocation(identifier, filename));
073                }
074                return locations;
075        }
076
077        /**
078         * @deprecated
079         */
080        @Deprecated
081        @Override
082        public Location getLocation(org.kuali.common.util.project.model.FeatureIdentifier identifier, String filename) {
083                Project project = projectService.getProject(identifier.getProject());
084                String value = ProjectUtils.getClasspathPrefix(identifier) + "/" + filename;
085                String encoding = ProjectUtils.getEncoding(project);
086                return new Location(value, encoding, cache);
087        }
088
089        @Override
090        public Location getLocation(ProjectResource resource) {
091                return getLocation(resource.getProject(), resource.getPath());
092        }
093}