001/**
002 * Copyright 2010-2014 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 */
016package org.kuali.common.util.execute;
017
018import java.io.File;
019import java.io.IOException;
020import java.util.ArrayList;
021import java.util.Arrays;
022import java.util.List;
023
024import org.apache.commons.io.FileUtils;
025import org.kuali.common.util.LocationUtils;
026import org.springframework.util.Assert;
027
028public class ConvertTableListingTextFileExecutable implements Executable {
029
030        private static String SQL = "sql";
031        private static String METAINF = "META-INF";
032
033        List<String> vendors = Arrays.asList("mysql", "oracle");
034        String suffix = SQL;
035        String prefix = SQL;
036        String artifactId;
037        File outputDir;
038        boolean skip;
039
040        @Override
041        public void execute() {
042                Assert.notNull(artifactId, "artifactId is null");
043                Assert.notNull(vendors, "vendors is null");
044                Assert.notNull(suffix, "suffix is null");
045                Assert.notNull(prefix, "prefix is null");
046                Assert.notNull(outputDir, "outputDir is null");
047
048                for (String vendor : vendors) {
049                        String tableListing = SQL + "/" + vendor + "/" + artifactId + "-tables.txt";
050                        List<String> tableNames = LocationUtils.readLines(tableListing);
051                        List<String> resources = getResources(tableNames, vendor, prefix, suffix);
052                        validateResources(resources);
053                        File outputFile = getOutputFile(outputDir, prefix, vendor, artifactId);
054                        writeLines(outputFile, resources);
055                }
056        }
057
058        protected void validateResources(List<String> resources) {
059                for (String resource : resources) {
060                        Assert.isTrue(LocationUtils.exists(resource), "[" + resource + "] does not exist");
061                }
062        }
063
064        protected void writeLines(File file, List<String> lines) {
065                try {
066                        FileUtils.writeLines(file, lines, "\n");
067                } catch (IOException e) {
068                        throw new IllegalArgumentException(e);
069                }
070        }
071
072        protected File getOutputFile(File outputDir, String prefix, String vendor, String artifactId) {
073                String filename = METAINF + "/" + prefix + "/" + vendor + "/" + artifactId + "-data.resources";
074                return new File(outputDir, filename);
075
076        }
077
078        protected List<String> getResources(List<String> tableNames, String vendor, String prefix, String suffix) {
079                List<String> resources = new ArrayList<String>();
080                for (String tableName : tableNames) {
081                        String resource = "classpath:" + prefix + "/" + vendor + "/" + tableName + "." + suffix;
082                        resources.add(resource);
083                }
084                return resources;
085        }
086
087        public List<String> getVendors() {
088                return vendors;
089        }
090
091        public void setVendors(List<String> vendors) {
092                this.vendors = vendors;
093        }
094
095        public String getSuffix() {
096                return suffix;
097        }
098
099        public void setSuffix(String suffix) {
100                this.suffix = suffix;
101        }
102
103        public String getPrefix() {
104                return prefix;
105        }
106
107        public void setPrefix(String prefix) {
108                this.prefix = prefix;
109        }
110
111        public String getArtifactId() {
112                return artifactId;
113        }
114
115        public void setArtifactId(String artifactId) {
116                this.artifactId = artifactId;
117        }
118
119        public File getOutputDir() {
120                return outputDir;
121        }
122
123        public void setOutputDir(File outputDir) {
124                this.outputDir = outputDir;
125        }
126
127        public boolean isSkip() {
128                return skip;
129        }
130
131        public void setSkip(boolean skip) {
132                this.skip = skip;
133        }
134
135}