Java tutorial
/******************************************************************************* * Copyright 2011 Danny Kunz * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package org.omnaest.i18nbinder; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Pattern; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.FileSet; import org.omnaest.i18nbinder.internal.FacadeCreatorHelper; import org.omnaest.i18nbinder.internal.LocaleFilter; import org.omnaest.i18nbinder.internal.Logger; import org.omnaest.i18nbinder.internal.ModifierHelper; import org.omnaest.i18nbinder.internal.XLSFile; public class I18nBinder extends Task { /* ********************************************** Variables ********************************************** */ private List<FileSet> fileSetList = new ArrayList<FileSet>(); private boolean createXLSFile = false; private String xlsFileName = null; private String javaFileEncoding = "utf-8";; private Boolean logInfo = false; private LocaleFilter localeFilter = new LocaleFilter(); private boolean deletePropertiesWithBlankValue = true; private String fileNameLocaleGroupPattern = null; private List<Integer> fileNameLocaleGroupPatternGroupIndexList = null; private boolean createJavaFacade = false; private String javaFacadeFileName = FacadeCreatorHelper.DEFAULT_JAVA_FACADE_FILENAME_I18N_FACADE; private String baseNameInTargetPlattform = ""; private String baseFolderIgnoredPath = ""; private String packageName = ""; private boolean externalizeTypes; private String propertyFileEncoding = "utf-8"; private boolean useJavaStyleUnicodeEscaping = false; /* ********************************************** Methods ********************************************** */ @Override public void execute() throws BuildException { // super.execute(); // this.run(); } public void run() { // if (this.logInfo) { ModifierHelper.logger = new Logger() { @Override public void info(String message) { I18nBinder.this.log(message, Project.MSG_INFO); } }; } // if (this.fileSetList.size() > 0) { // if (this.createJavaFacade) { this.createJavaFaceFromFiles(); } // if (this.createXLSFile) { this.createXLSFileFromFiles(); } } else { this.writeXLSFileBackToFiles(); } } protected void writeXLSFileBackToFiles() { // if (this.xlsFileName != null) { // this.log("Write properties from XLS file back to property files..."); // File file = new File(this.xlsFileName); if (file.exists()) { ModifierHelper.writeXLSFileContentToPropertyFiles(file, this.propertyFileEncoding, this.localeFilter, this.deletePropertiesWithBlankValue, this.useJavaStyleUnicodeEscaping); } // this.log("...done"); } } /** * Parses the property files and creates the xls file. */ protected void createXLSFileFromFiles() { // if (this.xlsFileName != null && this.fileSetList.size() > 0) { // this.log("Create XLS file from property files..."); // Set<File> propertyFileSet = this.resolveFilesFromFileSetList(this.fileSetList); // XLSFile xlsFile = ModifierHelper.createXLSFileFromPropertyFiles(propertyFileSet, this.propertyFileEncoding, this.localeFilter, this.fileNameLocaleGroupPattern, this.fileNameLocaleGroupPatternGroupIndexList, this.useJavaStyleUnicodeEscaping); // File file = new File(this.xlsFileName); xlsFile.setFile(file); xlsFile.store(); // this.log("...done"); } else { this.log( "No xls file name specified. Please provide a file name for the xls file which should be created.", Project.MSG_ERR); } } /** * Parses the property files and creates a Java facade source code file */ protected void createJavaFaceFromFiles() { // this.log("Create Java source code facade file from property files..."); // Set<File> propertyFileSet = this.resolveFilesFromFileSetList(this.fileSetList); try { // final String i18nFacadeName = StringUtils .defaultString(this.javaFacadeFileName, FacadeCreatorHelper.DEFAULT_JAVA_FACADE_FILENAME_I18N_FACADE) .replaceAll("\\.java$", ""); final Map<String, String> facadeFromPropertyFiles = FacadeCreatorHelper .createI18nInterfaceFacadeFromPropertyFiles(propertyFileSet, this.localeFilter, this.fileNameLocaleGroupPattern, this.fileNameLocaleGroupPatternGroupIndexList, this.baseNameInTargetPlattform, this.baseFolderIgnoredPath, this.packageName, i18nFacadeName, this.externalizeTypes, this.propertyFileEncoding); for (String fileName : facadeFromPropertyFiles.keySet()) { // final String fileContent = facadeFromPropertyFiles.get(fileName); final boolean isRootFacadeType = StringUtils.equals(this.packageName + "." + i18nFacadeName, fileName); // if (!isRootFacadeType && fileName.contains(".")) { fileName = reduceFileNameAndCreateDirectoryPath(fileName); } // final File file = isRootFacadeType ? new File(this.javaFacadeFileName) : new File(fileName + ".java"); FileUtils.writeStringToFile(file, fileContent, this.javaFileEncoding); } } catch (Exception e) { this.log("Could not write Java facade to file", e, Project.MSG_ERR); } // this.log("...done"); } private String reduceFileNameAndCreateDirectoryPath(String fileName) { fileName = StringUtils.removeStart(fileName, this.packageName + "."); File directory = new File(this.baseNameInTargetPlattform); String[] tokens = fileName.split("\\."); for (int ii = 0; ii < tokens.length - 1; ii++) { String directoryName = tokens[ii]; directory = new File(directory, directoryName); if (!directory.exists()) { directory.mkdir(); } } fileName = StringUtils.join(Arrays.copyOf(tokens, tokens.length - 1), "/") + (tokens.length > 1 ? "/" : "") + tokens[tokens.length - 1]; return fileName; } /** * @see #resolveFilesFromFileSet(FileSet) * @param fileSetList * @return */ protected Set<File> resolveFilesFromFileSetList(List<FileSet> fileSetList) { // Set<File> retset = new HashSet<File>(); // if (fileSetList != null) { for (FileSet fileSet : fileSetList) { retset.addAll(this.resolveFilesFromFileSet(fileSet)); } } // return retset; } /** * @see #resolveFilesFromFileSetList(List) * @param fileSet * @return */ protected List<File> resolveFilesFromFileSet(FileSet fileSet) { // List<File> retlist = new ArrayList<File>(); // if (fileSet != null) { // DirectoryScanner directoryScanner = fileSet.getDirectoryScanner(); String[] includedFileNames = directoryScanner.getIncludedFiles(); // if (includedFileNames != null) { // File basedir = directoryScanner.getBasedir(); // for (String fileNameUnnormalized : includedFileNames) { // String fileName = fileNameUnnormalized.replaceAll(Pattern.quote("\\"), "/"); // File file = new File(basedir, fileName); if (file.exists()) { retlist.add(file); } } } } // return retlist; } public void addFileset(FileSet fileset) { if (fileset != null) { this.fileSetList.add(fileset); } } public String getXlsFileName() { return this.xlsFileName; } public void setXlsFileName(String xlsFileName) { this.log("xlsFileName=" + xlsFileName); this.xlsFileName = xlsFileName; } public void setFileEncoding(String fileEncoding) { this.log("fileEncoding=" + fileEncoding); this.propertyFileEncoding = fileEncoding; this.javaFileEncoding = fileEncoding; } public Boolean getLogInfo() { return this.logInfo; } public void setLogInfo(Boolean logInfo) { this.log("logInfo=" + logInfo); this.logInfo = logInfo; } public String getLocaleFilterRegex() { return this.localeFilter.getPattern().pattern(); } public void setLocaleFilterRegex(String localeFilterRegex) { this.log("localeFilterRegex=" + localeFilterRegex); this.localeFilter.setPattern(Pattern.compile(localeFilterRegex)); } public String getFileNameLocaleGroupPattern() { return this.fileNameLocaleGroupPattern; } public void setFileNameLocaleGroupPattern(String fileNameLocaleGroupPattern) { // this.log("fileNameLocaleGroupPattern=" + fileNameLocaleGroupPattern); // this.fileNameLocaleGroupPattern = fileNameLocaleGroupPattern; // if (this.fileNameLocaleGroupPatternGroupIndexList == null) { this.fileNameLocaleGroupPatternGroupIndexList = Arrays.asList(1); } } public boolean isDeletePropertiesWithBlankValue() { return this.deletePropertiesWithBlankValue; } public void setDeletePropertiesWithBlankValue(boolean deletePropertiesWithBlankValue) { this.log("deletePropertiesWithBlankValue=" + deletePropertiesWithBlankValue); this.deletePropertiesWithBlankValue = deletePropertiesWithBlankValue; } public String getFileNameLocaleGroupPatternGroupIndexList() { return StringUtils.join(this.fileNameLocaleGroupPatternGroupIndexList, ","); } public void setFileNameLocaleGroupPatternGroupIndexList(String fileNameLocaleGroupPatternGroupIndexStringList) { // this.log("fileNameLocaleGroupPatternGroupIndexList=" + fileNameLocaleGroupPatternGroupIndexStringList); String[] tokens = StringUtils.split(fileNameLocaleGroupPatternGroupIndexStringList.replaceAll(";", ","), ","); // List<Integer> fileNameLocaleGroupPatternGroupIndexList = new ArrayList<Integer>(); for (String token : tokens) { fileNameLocaleGroupPatternGroupIndexList.add(Integer.valueOf(token)); } // this.fileNameLocaleGroupPatternGroupIndexList = fileNameLocaleGroupPatternGroupIndexList; } public void setCreateXLSFile(boolean createXLSFile) { this.log("createXLSFile=" + createXLSFile); this.createXLSFile = createXLSFile; } public void setCreateJavaFacade(boolean createJavaFacade) { this.log("createJavaFacade=" + createJavaFacade); this.createJavaFacade = createJavaFacade; } public void setJavaFacadeFileName(String javaFacadeFileName) { this.log("javaFacadeFileName=" + javaFacadeFileName); this.javaFacadeFileName = javaFacadeFileName; } public void setBaseNameInTargetPlattform(String baseNameInTargetPlattform) { this.log("baseNameInTargetPlattform=" + baseNameInTargetPlattform); this.baseNameInTargetPlattform = baseNameInTargetPlattform; } public void setBaseFolderIgnoredPath(String baseFolderIgnoredPath) { this.log("baseFolderIgnoredPath=" + baseFolderIgnoredPath); this.baseFolderIgnoredPath = baseFolderIgnoredPath; } public void setPackageName(String packageName) { this.log("packageName=" + packageName); this.packageName = packageName; } public void setExternalizeTypes(boolean externalizeTypes) { this.log("externalizeTypes=" + externalizeTypes); this.externalizeTypes = externalizeTypes; } public void setPropertyFileEncoding(String propertyFileEncoding) { this.log("propertyFileEncoding=" + propertyFileEncoding); this.propertyFileEncoding = propertyFileEncoding; } public void setJavaFileEncoding(String javaFileEncoding) { this.log("javaFileEncoding=" + javaFileEncoding); this.javaFileEncoding = javaFileEncoding; } public void setUseJavaStyleUnicodeEscaping(boolean useJavaStyleUnicodeEscaping) { this.useJavaStyleUnicodeEscaping = useJavaStyleUnicodeEscaping; } }