001
014
015 package com.liferay.portal.tools.sourceformatter;
016
017 import com.liferay.portal.kernel.util.GetterUtil;
018 import com.liferay.portal.kernel.util.ListUtil;
019 import com.liferay.portal.kernel.util.PropertiesUtil;
020 import com.liferay.portal.kernel.util.StringPool;
021 import com.liferay.portal.kernel.util.StringUtil;
022 import com.liferay.portal.util.FileImpl;
023
024 import java.io.File;
025 import java.io.IOException;
026
027 import java.util.ArrayList;
028 import java.util.List;
029 import java.util.Properties;
030
031 import org.apache.tools.ant.DirectoryScanner;
032
033
037 public class SourceFormatterHelper {
038
039 public SourceFormatterHelper(boolean useProperties) {
040 _useProperties = useProperties;
041 }
042
043 public void close() throws IOException {
044 if (!_useProperties) {
045 return;
046 }
047
048 String newPropertiesContent = PropertiesUtil.toString(_properties);
049
050 if (!_propertiesContent.equals(newPropertiesContent)) {
051 _fileUtil.write(_propertiesFile, newPropertiesContent);
052 }
053 }
054
055 public void init() throws IOException {
056 if (!_useProperties) {
057 return;
058 }
059
060 File basedirFile = new File("./");
061
062 String basedirAbsolutePath = StringUtil.replace(
063 basedirFile.getAbsolutePath(), new String[] {".", ":", "/", "\\"},
064 new String[] {"_", "_", "_", "_"});
065
066 String propertiesFileName =
067 System.getProperty("java.io.tmpdir") + "/SourceFormatter." +
068 basedirAbsolutePath;
069
070 _propertiesFile = new File(propertiesFileName);
071
072 if (_propertiesFile.exists()) {
073 _propertiesContent = _fileUtil.read(_propertiesFile);
074
075 PropertiesUtil.load(_properties, _propertiesContent);
076 }
077 }
078
079 public void printError(String fileName, File file) {
080 printError(fileName, file.toString());
081 }
082
083 public void printError(String fileName, String message) {
084 if (_useProperties) {
085 String encodedFileName = StringUtil.replace(
086 fileName, StringPool.BACK_SLASH, StringPool.SLASH);
087
088 _properties.remove(encodedFileName);
089 }
090
091 System.out.println(message);
092 }
093
094 public List<String> scanForFiles(DirectoryScanner directoryScanner) {
095 directoryScanner.scan();
096
097 String[] fileNamesArray = directoryScanner.getIncludedFiles();
098
099 if (!_useProperties) {
100 return ListUtil.toList(fileNamesArray);
101 }
102
103 List<String> fileNames = new ArrayList<String>(fileNamesArray.length);
104
105 for (String fileName : fileNamesArray) {
106 File file = new File(fileName);
107
108 String encodedFileName = StringUtil.replace(
109 fileName, StringPool.BACK_SLASH, StringPool.SLASH);
110
111 long timestamp = GetterUtil.getLong(
112 _properties.getProperty(encodedFileName));
113
114 if (timestamp < file.lastModified()) {
115 fileNames.add(fileName);
116
117 _properties.setProperty(
118 encodedFileName, String.valueOf(file.lastModified()));
119 }
120 }
121
122 return fileNames;
123 }
124
125 private static FileImpl _fileUtil = FileImpl.getInstance();
126
127 private Properties _properties = new Properties();
128 private String _propertiesContent = StringPool.BLANK;
129 private File _propertiesFile;
130 private boolean _useProperties;
131
132 }