Modified: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/htmlreport/util/ReportStringUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/htmlreport/util/ReportStringUtil.java?rev=1774165&r1=1774164&r2=1774165&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/htmlreport/util/ReportStringUtil.java (original) +++ ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/htmlreport/util/ReportStringUtil.java Wed Dec 14 10:16:04 2016 @@ -1,570 +1,570 @@ -/******************************************************************************* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ofbiz.htmlreport.util; - -import java.util.Collection; -import java.util.Iterator; - -/** - * Provides String utility functions.<p> - * - */ -public final class ReportStringUtil { - - /** Constant for <code>"false"</code>. */ - public static final String FALSE = Boolean.toString(false); - - /** a convenient shorthand to the line separator constant. */ - public static final String LINE_SEPARATOR = System.getProperty("line.separator"); - - /** Contains all chars that end a sentence in the {@link #trimToSize(String, int, int, String)} method. */ - public static final char[] SENTENCE_ENDING_CHARS = {'.', '!', '?'}; - - /** a convenient shorthand for tabulations. */ - public static final String TABULATOR = " "; - - /** Constant for <code>"true"</code>. */ - public static final String TRUE = Boolean.toString(true); - - /** Day constant. */ - private static final long DAYS = 1000 * 60 * 60 * 24; - - /** Hour constant. */ - private static final long HOURS = 1000 * 60 * 60; - - /** Minute constant. */ - private static final long MINUTES = 1000 * 60; - - /** Second constant. */ - private static final long SECONDS = 1000; - - /** - * Default constructor (empty), private because this class has only - * static methods.<p> - */ - private ReportStringUtil() { - // empty - } - - /** - * Changes the filename suffix. - * - * @param filename the filename to be changed - * @param suffix the new suffix of the file - * - * @return the filename with the replaced suffix - */ - public static String changeFileNameSuffixTo(String filename, String suffix) { - - int dotPos = filename.lastIndexOf('.'); - if (dotPos != -1) { - return filename.substring(0, dotPos + 1) + suffix; - } else { - // the string has no suffix - return filename; - } - } - - /** - * Returns a string representation for the given collection using the given separator.<p> - * - * @param collection the collection to print - * @param separator the item separator - * - * @return the string representation for the given collection - */ - public static String collectionAsString(Collection<String> collection, String separator) { - - StringBuffer string = new StringBuffer(128); - Iterator<String> it = collection.iterator(); - while (it.hasNext()) { - string.append(it.next()); - if (it.hasNext()) { - string.append(separator); - } - } - return string.toString(); - } - - /** - * Replaces occurrences of special control characters in the given input with - * a HTML representation.<p> - * - * This method currently replaces line breaks to <code><br/></code> and special HTML chars - * like <code>< > & "</code> with their HTML entity representation.<p> - * - * @param source the String to escape - * - * @return the escaped String - */ - public static String escapeHtml(String source) { - - if (source == null) { - return null; - } - source = ReportEncoder.escapeXml(source); - source = substitute(source, "\r", ""); - source = substitute(source, "\n", "<br/>\n"); - return source; - } - - /** - * Escapes a String so it may be used in JavaScript String definitions.<p> - * - * This method replaces line breaks, quotation marks and \ characters.<p> - * - * @param source the String to escape - * - * @return the escaped String - */ - public static String escapeJavaScript(String source) { - - source = substitute(source, "\\", "\\\\"); - source = substitute(source, "\"", "\\\""); - source = substitute(source, "\'", "\\\'"); - source = substitute(source, "\r\n", "\\n"); - source = substitute(source, "\n", "\\n"); - return source; - } - - /** - * Escapes a String so it may be used as a Perl5 regular expression.<p> - * - * This method replaces the following characters in a String:<br> - * <code>{}[]()\$^.*+/</code><p> - * - * @param source the string to escape - * - * @return the escaped string - */ - public static String escapePattern(String source) { - - if (source == null) { - return null; - } - StringBuffer result = new StringBuffer(source.length() * 2); - for (int i = 0; i < source.length(); ++i) { - char ch = source.charAt(i); - switch (ch) { - case '\\': - result.append("\\\\"); - break; - case '/': - result.append("\\/"); - break; - case '$': - result.append("\\$"); - break; - case '^': - result.append("\\^"); - break; - case '.': - result.append("\\."); - break; - case '*': - result.append("\\*"); - break; - case '+': - result.append("\\+"); - break; - case '|': - result.append("\\|"); - break; - case '?': - result.append("\\?"); - break; - case '{': - result.append("\\{"); - break; - case '}': - result.append("\\}"); - break; - case '[': - result.append("\\["); - break; - case ']': - result.append("\\]"); - break; - case '(': - result.append("\\("); - break; - case ')': - result.append("\\)"); - break; - default: - result.append(ch); - } - } - return new String(result); - } - - /** - * Formats a runtime in the format hh:mm:ss, to be used e.g. in reports.<p> - * - * If the runtime is greater then 24 hours, the format dd:hh:mm:ss is used.<p> - * - * @param runtime the time to format - * - * @return the formatted runtime - */ - public static String formatRuntime(long runtime) { - - long seconds = (runtime / SECONDS) % 60; - long minutes = (runtime / MINUTES) % 60; - long hours = (runtime / HOURS) % 24; - long days = runtime / DAYS; - StringBuffer strBuf = new StringBuffer(); - - if (days > 0) { - if (days < 10) { - strBuf.append('0'); - } - strBuf.append(days); - strBuf.append(':'); - } - - if (hours < 10) { - strBuf.append('0'); - } - strBuf.append(hours); - strBuf.append(':'); - - if (minutes < 10) { - strBuf.append('0'); - } - strBuf.append(minutes); - strBuf.append(':'); - - if (seconds < 10) { - strBuf.append('0'); - } - strBuf.append(seconds); - - return strBuf.toString(); - } - - /** - * Returns <code>true</code> if the provided String is either <code>null</code> - * or the empty String <code>""</code>.<p> - * - * @param value the value to check - * - * @return true, if the provided value is null or the empty String, false otherwise - */ - public static boolean isEmpty(String value) { - - return (value == null) || (value.length() == 0); - } - - /** - * Returns <code>true</code> if the provided String is either <code>null</code> - * or contains only white spaces.<p> - * - * @param value the value to check - * - * @return true, if the provided value is null or contains only white spaces, false otherwise - */ - public static boolean isEmptyOrWhitespaceOnly(String value) { - - return isEmpty(value) || (value.trim().length() == 0); - } - - /** - * Returns <code>true</code> if the provided Objects are either both <code>null</code> - * or equal according to {@link Object#equals(Object)}.<p> - * - * @param value1 the first object to compare - * @param value2 the second object to compare - * - * @return <code>true</code> if the provided Objects are either both <code>null</code> - * or equal according to {@link Object#equals(Object)} - */ - public static boolean isEqual(Object value1, Object value2) { - - if (value1 == null) { - return (value2 == null); - } - return value1.equals(value2); - } - - /** - * Returns <code>true</code> if the provided String is neither <code>null</code> - * nor the empty String <code>""</code>.<p> - * - * @param value the value to check - * - * @return true, if the provided value is not null and not the empty String, false otherwise - */ - public static boolean isNotEmpty(String value) { - - return (value != null) && (value.length() != 0); - } - - /** - * Returns <code>true</code> if the provided String is neither <code>null</code> - * nor contains only white spaces.<p> - * - * @param value the value to check - * - * @return <code>true</code>, if the provided value is <code>null</code> - * or contains only white spaces, <code>false</code> otherwise - */ - public static boolean isNotEmptyOrWhitespaceOnly(String value) { - - return (value != null) && (value.trim().length() > 0); - } - - /** - * Returns the last index of any of the given chars in the given source.<p> - * - * If no char is found, -1 is returned.<p> - * - * @param source the source to check - * @param chars the chars to find - * - * @return the last index of any of the given chars in the given source, or -1 - */ - public static int lastIndexOf(String source, char[] chars) { - - // now try to find an "sentence ending" char in the text in the "findPointArea" - int result = -1; - for (int i = 0; i < chars.length; i++) { - int pos = source.lastIndexOf(chars[i]); - if (pos > result) { - // found new last char - result = pos; - } - } - return result; - } - - /** - * Returns the last index a whitespace char the given source.<p> - * - * If no whitespace char is found, -1 is returned.<p> - * - * @param source the source to check - * - * @return the last index a whitespace char the given source, or -1 - */ - public static int lastWhitespaceIn(String source) { - - if (isEmpty(source)) { - return -1; - } - int pos = -1; - for (int i = source.length() - 1; i >= 0; i--) { - if (Character.isWhitespace(source.charAt(i))) { - pos = i; - break; - } - } - return pos; - } - - /** - * Substitutes <code>searchString</code> in the given source String with <code>replaceString</code>.<p> - * - * This is a high-performance implementation which should be used as a replacement for - * <code>{@link String#replaceAll(java.lang.String, java.lang.String)}</code> in case no - * regular expression evaluation is required.<p> - * - * @param source the content which is scanned - * @param searchString the String which is searched in content - * @param replaceString the String which replaces <code>searchString</code> - * - * @return the substituted String - */ - public static String substitute(String source, String searchString, String replaceString) { - - if (source == null) { - return null; - } - - if (isEmpty(searchString)) { - return source; - } - - if (replaceString == null) { - replaceString = ""; - } - int len = source.length(); - int sl = searchString.length(); - int rl = replaceString.length(); - int length; - if (sl == rl) { - length = len; - } else { - int c = 0; - int s = 0; - int e; - while ((e = source.indexOf(searchString, s)) != -1) { - c++; - s = e + sl; - } - if (c == 0) { - return source; - } - length = len - (c * (sl - rl)); - } - - int s = 0; - int e = source.indexOf(searchString, s); - if (e == -1) { - return source; - } - StringBuffer sb = new StringBuffer(length); - while (e != -1) { - sb.append(source.substring(s, e)); - sb.append(replaceString); - s = e + sl; - e = source.indexOf(searchString, s); - } - e = len; - sb.append(source.substring(s, e)); - return sb.toString(); - } - - /** - * Returns the java String literal for the given String. <p> - * - * This is the form of the String that had to be written into source code - * using the unicode escape sequence for special characters. <p> - * - * Example: "�" would be transformed to "\\u00C4".<p> - * - * @param s a string that may contain non-ascii characters - * - * @return the java unicode escaped string Literal of the given input string - */ - public static String toUnicodeLiteral(String s) { - - StringBuffer result = new StringBuffer(); - char[] carr = s.toCharArray(); - - String unicode; - for (int i = 0; i < carr.length; i++) { - result.append("\\u"); - // append leading zeros - unicode = Integer.toHexString(carr[i]).toUpperCase(); - for (int j = 4 - unicode.length(); j > 0; j--) { - result.append("0"); - } - result.append(unicode); - } - return result.toString(); - } - - /** - * Returns a substring of the source, which is at most length characters long.<p> - * - * This is the same as calling {@link #trimToSize(String, int, String)} with the - * parameters <code>(source, length, " ...")</code>.<p> - * - * @param source the string to trim - * @param length the maximum length of the string to be returned - * - * @return a substring of the source, which is at most length characters long - */ - public static String trimToSize(String source, int length) { - - return trimToSize(source, length, length, " ..."); - } - - /** - * Returns a substring of the source, which is at most length characters long.<p> - * - * If a char is cut, the given <code>suffix</code> is appended to the result.<p> - * - * This is almost the same as calling {@link #trimToSize(String, int, int, String)} with the - * parameters <code>(source, length, length*, suffix)</code>. If <code>length</code> - * if larger then 100, then <code>length* = length / 2</code>, - * otherwise <code>length* = length</code>.<p> - * - * @param source the string to trim - * @param length the maximum length of the string to be returned - * @param suffix the suffix to append in case the String was trimmed - * - * @return a substring of the source, which is at most length characters long - */ - public static String trimToSize(String source, int length, String suffix) { - - int area = (length > 100) ? length / 2 : length; - return trimToSize(source, length, area, suffix); - } - - /** - * Returns a substring of the source, which is at most length characters long, cut - * in the last <code>area</code> chars in the source at a sentence ending char or whitespace.<p> - * - * If a char is cut, the given <code>suffix</code> is appended to the result.<p> - * - * @param source the string to trim - * @param length the maximum length of the string to be returned - * @param area the area at the end of the string in which to find a sentence ender or whitespace - * @param suffix the suffix to append in case the String was trimmed - * - * @return a substring of the source, which is at most length characters long - */ - public static String trimToSize(String source, int length, int area, String suffix) { - - if ((source == null) || (source.length() <= length)) { - // no operation is required - return source; - } - if (isEmpty(suffix)) { - // we need an empty suffix - suffix = ""; - } - // must remove the length from the after sequence chars since these are always added in the end - int modLength = length - suffix.length(); - if (modLength <= 0) { - // we are to short, return beginning of the suffix - return suffix.substring(0, length); - } - int modArea = area + suffix.length(); - if ((modArea > modLength) || (modArea < 0)) { - // area must not be longer then max length - modArea = modLength; - } - - // first reduce the String to the maximum allowed length - String findPointSource = source.substring(modLength - modArea, modLength); - - String result; - // try to find an "sentence ending" char in the text - int pos = lastIndexOf(findPointSource, SENTENCE_ENDING_CHARS); - if (pos >= 0) { - // found a sentence ender in the lookup area, keep the sentence ender - result = source.substring(0, modLength - modArea + pos + 1) + suffix; - } else { - // no sentence ender was found, try to find a whitespace - pos = lastWhitespaceIn(findPointSource); - if (pos >= 0) { - // found a whitespace, don't keep the whitespace - result = source.substring(0, modLength - modArea + pos) + suffix; - } else { - // not even a whitespace was found, just cut away what's to long - result = source.substring(0, modLength) + suffix; - } - } - - return result; - } +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.ofbiz.htmlreport.util; + +import java.util.Collection; +import java.util.Iterator; + +/** + * Provides String utility functions.<p> + * + */ +public final class ReportStringUtil { + + /** Constant for <code>"false"</code>. */ + public static final String FALSE = Boolean.toString(false); + + /** a convenient shorthand to the line separator constant. */ + public static final String LINE_SEPARATOR = System.getProperty("line.separator"); + + /** Contains all chars that end a sentence in the {@link #trimToSize(String, int, int, String)} method. */ + public static final char[] SENTENCE_ENDING_CHARS = {'.', '!', '?'}; + + /** a convenient shorthand for tabulations. */ + public static final String TABULATOR = " "; + + /** Constant for <code>"true"</code>. */ + public static final String TRUE = Boolean.toString(true); + + /** Day constant. */ + private static final long DAYS = 1000 * 60 * 60 * 24; + + /** Hour constant. */ + private static final long HOURS = 1000 * 60 * 60; + + /** Minute constant. */ + private static final long MINUTES = 1000 * 60; + + /** Second constant. */ + private static final long SECONDS = 1000; + + /** + * Default constructor (empty), private because this class has only + * static methods.<p> + */ + private ReportStringUtil() { + // empty + } + + /** + * Changes the filename suffix. + * + * @param filename the filename to be changed + * @param suffix the new suffix of the file + * + * @return the filename with the replaced suffix + */ + public static String changeFileNameSuffixTo(String filename, String suffix) { + + int dotPos = filename.lastIndexOf('.'); + if (dotPos != -1) { + return filename.substring(0, dotPos + 1) + suffix; + } else { + // the string has no suffix + return filename; + } + } + + /** + * Returns a string representation for the given collection using the given separator.<p> + * + * @param collection the collection to print + * @param separator the item separator + * + * @return the string representation for the given collection + */ + public static String collectionAsString(Collection<String> collection, String separator) { + + StringBuffer string = new StringBuffer(128); + Iterator<String> it = collection.iterator(); + while (it.hasNext()) { + string.append(it.next()); + if (it.hasNext()) { + string.append(separator); + } + } + return string.toString(); + } + + /** + * Replaces occurrences of special control characters in the given input with + * a HTML representation.<p> + * + * This method currently replaces line breaks to <code><br/></code> and special HTML chars + * like <code>< > & "</code> with their HTML entity representation.<p> + * + * @param source the String to escape + * + * @return the escaped String + */ + public static String escapeHtml(String source) { + + if (source == null) { + return null; + } + source = ReportEncoder.escapeXml(source); + source = substitute(source, "\r", ""); + source = substitute(source, "\n", "<br/>\n"); + return source; + } + + /** + * Escapes a String so it may be used in JavaScript String definitions.<p> + * + * This method replaces line breaks, quotation marks and \ characters.<p> + * + * @param source the String to escape + * + * @return the escaped String + */ + public static String escapeJavaScript(String source) { + + source = substitute(source, "\\", "\\\\"); + source = substitute(source, "\"", "\\\""); + source = substitute(source, "\'", "\\\'"); + source = substitute(source, "\r\n", "\\n"); + source = substitute(source, "\n", "\\n"); + return source; + } + + /** + * Escapes a String so it may be used as a Perl5 regular expression.<p> + * + * This method replaces the following characters in a String:<br> + * <code>{}[]()\$^.*+/</code><p> + * + * @param source the string to escape + * + * @return the escaped string + */ + public static String escapePattern(String source) { + + if (source == null) { + return null; + } + StringBuffer result = new StringBuffer(source.length() * 2); + for (int i = 0; i < source.length(); ++i) { + char ch = source.charAt(i); + switch (ch) { + case '\\': + result.append("\\\\"); + break; + case '/': + result.append("\\/"); + break; + case '$': + result.append("\\$"); + break; + case '^': + result.append("\\^"); + break; + case '.': + result.append("\\."); + break; + case '*': + result.append("\\*"); + break; + case '+': + result.append("\\+"); + break; + case '|': + result.append("\\|"); + break; + case '?': + result.append("\\?"); + break; + case '{': + result.append("\\{"); + break; + case '}': + result.append("\\}"); + break; + case '[': + result.append("\\["); + break; + case ']': + result.append("\\]"); + break; + case '(': + result.append("\\("); + break; + case ')': + result.append("\\)"); + break; + default: + result.append(ch); + } + } + return new String(result); + } + + /** + * Formats a runtime in the format hh:mm:ss, to be used e.g. in reports.<p> + * + * If the runtime is greater then 24 hours, the format dd:hh:mm:ss is used.<p> + * + * @param runtime the time to format + * + * @return the formatted runtime + */ + public static String formatRuntime(long runtime) { + + long seconds = (runtime / SECONDS) % 60; + long minutes = (runtime / MINUTES) % 60; + long hours = (runtime / HOURS) % 24; + long days = runtime / DAYS; + StringBuffer strBuf = new StringBuffer(); + + if (days > 0) { + if (days < 10) { + strBuf.append('0'); + } + strBuf.append(days); + strBuf.append(':'); + } + + if (hours < 10) { + strBuf.append('0'); + } + strBuf.append(hours); + strBuf.append(':'); + + if (minutes < 10) { + strBuf.append('0'); + } + strBuf.append(minutes); + strBuf.append(':'); + + if (seconds < 10) { + strBuf.append('0'); + } + strBuf.append(seconds); + + return strBuf.toString(); + } + + /** + * Returns <code>true</code> if the provided String is either <code>null</code> + * or the empty String <code>""</code>.<p> + * + * @param value the value to check + * + * @return true, if the provided value is null or the empty String, false otherwise + */ + public static boolean isEmpty(String value) { + + return (value == null) || (value.length() == 0); + } + + /** + * Returns <code>true</code> if the provided String is either <code>null</code> + * or contains only white spaces.<p> + * + * @param value the value to check + * + * @return true, if the provided value is null or contains only white spaces, false otherwise + */ + public static boolean isEmptyOrWhitespaceOnly(String value) { + + return isEmpty(value) || (value.trim().length() == 0); + } + + /** + * Returns <code>true</code> if the provided Objects are either both <code>null</code> + * or equal according to {@link Object#equals(Object)}.<p> + * + * @param value1 the first object to compare + * @param value2 the second object to compare + * + * @return <code>true</code> if the provided Objects are either both <code>null</code> + * or equal according to {@link Object#equals(Object)} + */ + public static boolean isEqual(Object value1, Object value2) { + + if (value1 == null) { + return (value2 == null); + } + return value1.equals(value2); + } + + /** + * Returns <code>true</code> if the provided String is neither <code>null</code> + * nor the empty String <code>""</code>.<p> + * + * @param value the value to check + * + * @return true, if the provided value is not null and not the empty String, false otherwise + */ + public static boolean isNotEmpty(String value) { + + return (value != null) && (value.length() != 0); + } + + /** + * Returns <code>true</code> if the provided String is neither <code>null</code> + * nor contains only white spaces.<p> + * + * @param value the value to check + * + * @return <code>true</code>, if the provided value is <code>null</code> + * or contains only white spaces, <code>false</code> otherwise + */ + public static boolean isNotEmptyOrWhitespaceOnly(String value) { + + return (value != null) && (value.trim().length() > 0); + } + + /** + * Returns the last index of any of the given chars in the given source.<p> + * + * If no char is found, -1 is returned.<p> + * + * @param source the source to check + * @param chars the chars to find + * + * @return the last index of any of the given chars in the given source, or -1 + */ + public static int lastIndexOf(String source, char[] chars) { + + // now try to find an "sentence ending" char in the text in the "findPointArea" + int result = -1; + for (int i = 0; i < chars.length; i++) { + int pos = source.lastIndexOf(chars[i]); + if (pos > result) { + // found new last char + result = pos; + } + } + return result; + } + + /** + * Returns the last index a whitespace char the given source.<p> + * + * If no whitespace char is found, -1 is returned.<p> + * + * @param source the source to check + * + * @return the last index a whitespace char the given source, or -1 + */ + public static int lastWhitespaceIn(String source) { + + if (isEmpty(source)) { + return -1; + } + int pos = -1; + for (int i = source.length() - 1; i >= 0; i--) { + if (Character.isWhitespace(source.charAt(i))) { + pos = i; + break; + } + } + return pos; + } + + /** + * Substitutes <code>searchString</code> in the given source String with <code>replaceString</code>.<p> + * + * This is a high-performance implementation which should be used as a replacement for + * <code>{@link String#replaceAll(java.lang.String, java.lang.String)}</code> in case no + * regular expression evaluation is required.<p> + * + * @param source the content which is scanned + * @param searchString the String which is searched in content + * @param replaceString the String which replaces <code>searchString</code> + * + * @return the substituted String + */ + public static String substitute(String source, String searchString, String replaceString) { + + if (source == null) { + return null; + } + + if (isEmpty(searchString)) { + return source; + } + + if (replaceString == null) { + replaceString = ""; + } + int len = source.length(); + int sl = searchString.length(); + int rl = replaceString.length(); + int length; + if (sl == rl) { + length = len; + } else { + int c = 0; + int s = 0; + int e; + while ((e = source.indexOf(searchString, s)) != -1) { + c++; + s = e + sl; + } + if (c == 0) { + return source; + } + length = len - (c * (sl - rl)); + } + + int s = 0; + int e = source.indexOf(searchString, s); + if (e == -1) { + return source; + } + StringBuffer sb = new StringBuffer(length); + while (e != -1) { + sb.append(source.substring(s, e)); + sb.append(replaceString); + s = e + sl; + e = source.indexOf(searchString, s); + } + e = len; + sb.append(source.substring(s, e)); + return sb.toString(); + } + + /** + * Returns the java String literal for the given String. <p> + * + * This is the form of the String that had to be written into source code + * using the unicode escape sequence for special characters. <p> + * + * Example: "�" would be transformed to "\\u00C4".<p> + * + * @param s a string that may contain non-ascii characters + * + * @return the java unicode escaped string Literal of the given input string + */ + public static String toUnicodeLiteral(String s) { + + StringBuffer result = new StringBuffer(); + char[] carr = s.toCharArray(); + + String unicode; + for (int i = 0; i < carr.length; i++) { + result.append("\\u"); + // append leading zeros + unicode = Integer.toHexString(carr[i]).toUpperCase(); + for (int j = 4 - unicode.length(); j > 0; j--) { + result.append("0"); + } + result.append(unicode); + } + return result.toString(); + } + + /** + * Returns a substring of the source, which is at most length characters long.<p> + * + * This is the same as calling {@link #trimToSize(String, int, String)} with the + * parameters <code>(source, length, " ...")</code>.<p> + * + * @param source the string to trim + * @param length the maximum length of the string to be returned + * + * @return a substring of the source, which is at most length characters long + */ + public static String trimToSize(String source, int length) { + + return trimToSize(source, length, length, " ..."); + } + + /** + * Returns a substring of the source, which is at most length characters long.<p> + * + * If a char is cut, the given <code>suffix</code> is appended to the result.<p> + * + * This is almost the same as calling {@link #trimToSize(String, int, int, String)} with the + * parameters <code>(source, length, length*, suffix)</code>. If <code>length</code> + * if larger then 100, then <code>length* = length / 2</code>, + * otherwise <code>length* = length</code>.<p> + * + * @param source the string to trim + * @param length the maximum length of the string to be returned + * @param suffix the suffix to append in case the String was trimmed + * + * @return a substring of the source, which is at most length characters long + */ + public static String trimToSize(String source, int length, String suffix) { + + int area = (length > 100) ? length / 2 : length; + return trimToSize(source, length, area, suffix); + } + + /** + * Returns a substring of the source, which is at most length characters long, cut + * in the last <code>area</code> chars in the source at a sentence ending char or whitespace.<p> + * + * If a char is cut, the given <code>suffix</code> is appended to the result.<p> + * + * @param source the string to trim + * @param length the maximum length of the string to be returned + * @param area the area at the end of the string in which to find a sentence ender or whitespace + * @param suffix the suffix to append in case the String was trimmed + * + * @return a substring of the source, which is at most length characters long + */ + public static String trimToSize(String source, int length, int area, String suffix) { + + if ((source == null) || (source.length() <= length)) { + // no operation is required + return source; + } + if (isEmpty(suffix)) { + // we need an empty suffix + suffix = ""; + } + // must remove the length from the after sequence chars since these are always added in the end + int modLength = length - suffix.length(); + if (modLength <= 0) { + // we are to short, return beginning of the suffix + return suffix.substring(0, length); + } + int modArea = area + suffix.length(); + if ((modArea > modLength) || (modArea < 0)) { + // area must not be longer then max length + modArea = modLength; + } + + // first reduce the String to the maximum allowed length + String findPointSource = source.substring(modLength - modArea, modLength); + + String result; + // try to find an "sentence ending" char in the text + int pos = lastIndexOf(findPointSource, SENTENCE_ENDING_CHARS); + if (pos >= 0) { + // found a sentence ender in the lookup area, keep the sentence ender + result = source.substring(0, modLength - modArea + pos + 1) + suffix; + } else { + // no sentence ender was found, try to find a whitespace + pos = lastWhitespaceIn(findPointSource); + if (pos >= 0) { + // found a whitespace, don't keep the whitespace + result = source.substring(0, modLength - modArea + pos) + suffix; + } else { + // not even a whitespace was found, just cut away what's to long + result = source.substring(0, modLength) + suffix; + } + } + + return result; + } } \ No newline at end of file Propchange: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/htmlreport/util/ReportStringUtil.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/AbstractPricatParser.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/InterfacePricatParser.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/PricatEvents.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/PricatEvents.java?rev=1774165&r1=1774164&r2=1774165&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/PricatEvents.java (original) +++ ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/PricatEvents.java Wed Dec 14 10:16:04 2016 @@ -1,193 +1,193 @@ -/******************************************************************************* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ofbiz.pricat; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URLEncoder; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.jdom.JDOMException; -import org.apache.ofbiz.base.location.ComponentLocationResolver; -import org.apache.ofbiz.base.util.Debug; -import org.apache.ofbiz.base.util.FileUtil; -import org.apache.ofbiz.base.util.UtilHttp; -import org.apache.ofbiz.base.util.UtilMisc; -import org.apache.ofbiz.base.util.UtilProperties; -import org.apache.ofbiz.base.util.UtilValidate; -import org.apache.ofbiz.entity.Delegator; -import org.apache.ofbiz.entity.GenericEntityException; -import org.apache.ofbiz.entity.GenericValue; -import org.apache.ofbiz.pricat.AbstractPricatParser; -import org.apache.ofbiz.pricat.InterfacePricatParser; -import org.apache.ofbiz.pricat.PricatParseExcelHtmlThread; - -public class PricatEvents { - - public static final String module = PricatEvents.class.getName(); - - public static final String PricatLatestVersion = UtilProperties.getPropertyValue("pricat", "pricat.latest.version", "V1.1"); - - public static final String PricatFileName = "PricatTemplate_" + PricatLatestVersion + ".xlsx"; - - public static final String PricatPath = "component://pricat/webapp/pricat/downloads/"; - - /** - * Download excel template. - * - * @param request - * @param response - * @return - * @throws IOException - * @throws JDOMException - */ - public static String downloadExcelTemplate(HttpServletRequest request, HttpServletResponse response) { - String templateType = request.getParameter("templateType"); - if (UtilValidate.isEmpty(templateType)) { - return "error"; - } - try { - String path = ComponentLocationResolver.getBaseLocation(PricatPath).toString(); - String fileName = null; - if ("pricatExcelTemplate".equals(templateType)) { - fileName = PricatFileName; - } - if (UtilValidate.isEmpty(fileName)) { - return "error"; - } - Path file = Paths.get(path + fileName); - byte[] bytes = Files.readAllBytes(file); - UtilHttp.streamContentToBrowser(response, bytes, "application/octet-stream", URLEncoder.encode(fileName, "UTF-8")); - } catch (MalformedURLException e) { - Debug.logError(e.getMessage(), module); - return "error"; - } catch (IOException e) { - Debug.logError(e.getMessage(), module); - return "error"; - } - return "success"; - } - - /** - * Upload a pricat. - */ - public static String pricatUpload(HttpServletRequest request, HttpServletResponse response) { - boolean isMultiPart = ServletFileUpload.isMultipartContent(request); - if (isMultiPart) { - return "parse_pricat"; - } else { - String action = request.getParameter("action"); - if (UtilValidate.isNotEmpty(action) && "downloadPricat".equals(action)) { - String sequenceNumString = (String) request.getParameter("sequenceNum"); - long sequenceNum = -1; - if (UtilValidate.isNotEmpty(sequenceNumString)) { - try { - sequenceNum = Long.valueOf(sequenceNumString); - } catch (NumberFormatException e) { - // do nothing - } - } - String originalPricatFileName = (String) request.getSession().getAttribute(PricatParseExcelHtmlThread.PRICAT_FILE); - String pricatFileName = originalPricatFileName; - if (sequenceNum > 0 && AbstractPricatParser.isCommentedExcelExists(request, sequenceNum)) { - GenericValue userLogin = (GenericValue) request.getSession().getAttribute("userLogin"); - String userLoginId = userLogin.getString("userLoginId"); - pricatFileName = InterfacePricatParser.tempFilesFolder + userLoginId + "/" + sequenceNum + ".xlsx"; - } - if (UtilValidate.isNotEmpty(pricatFileName) && UtilValidate.isNotEmpty(originalPricatFileName)) { - try { - Path path = Paths.get(pricatFileName); - byte[] bytes = Files.readAllBytes(path); - path = Paths.get(originalPricatFileName); - UtilHttp.streamContentToBrowser(response, bytes, "application/octet-stream", URLEncoder.encode(path.getName(path.getNameCount() - 1).toString(), "UTF-8")); - } catch (MalformedURLException e) { - Debug.logError(e.getMessage(), module); - return "error"; - } catch (IOException e) { - Debug.logError(e.getMessage(), module); - return "error"; - } - request.getSession().removeAttribute(PricatParseExcelHtmlThread.PRICAT_FILE); - return "download"; - } - } - } - return "success"; - } - - /** - * Download commented excel file after it's parsed. - * - * @param request - * @param response - * @return - * @throws IOException - * @throws JDOMException - */ - public static String downloadCommentedExcel(HttpServletRequest request, HttpServletResponse response) { - String sequenceNum = request.getParameter("sequenceNum"); - GenericValue userLogin = (GenericValue) request.getSession().getAttribute("userLogin"); - if (UtilValidate.isEmpty(sequenceNum) || UtilValidate.isEmpty(userLogin)) { - Debug.logError("sequenceNum[" + sequenceNum + "] or userLogin is empty", module); - return "error"; - } - String userLoginId = userLogin.getString("userLoginId"); - Delegator delegator = (Delegator) request.getAttribute("delegator"); - GenericValue historyValue = null; - try { - historyValue = delegator.findOne("ExcelImportHistory", UtilMisc.toMap("userLoginId", userLoginId, "sequenceNum", Long.valueOf(sequenceNum)), false); - } catch (NumberFormatException e) { - Debug.logError(e.getMessage(), module); - return "error"; - } catch (GenericEntityException e) { - Debug.logError(e.getMessage(), module); - return "error"; - } - if (UtilValidate.isEmpty(historyValue)) { - Debug.logError("No ExcelImportHistory value found by sequenceNum[" + sequenceNum + "] and userLoginId[" + userLoginId + "].", module); - return "error"; - } - String fileName = historyValue.getString("fileName"); - if (UtilValidate.isEmpty(fileName)) { - fileName = sequenceNum + ".xlsx"; - } - try { - File file = FileUtil.getFile(InterfacePricatParser.tempFilesFolder + userLoginId + "/" + sequenceNum + ".xlsx"); - if (file.exists()) { - Path path = Paths.get(file.getPath()); - byte[] bytes = Files.readAllBytes(path); - UtilHttp.streamContentToBrowser(response, bytes, "application/octet-stream", URLEncoder.encode(fileName, "UTF-8")); - } - } catch (MalformedURLException e) { - Debug.logError(e.getMessage(), module); - return "error"; - } catch (IOException e) { - Debug.logError(e.getMessage(), module); - return "error"; - } - return "success"; - } -} +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.ofbiz.pricat; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.jdom.JDOMException; +import org.apache.ofbiz.base.location.ComponentLocationResolver; +import org.apache.ofbiz.base.util.Debug; +import org.apache.ofbiz.base.util.FileUtil; +import org.apache.ofbiz.base.util.UtilHttp; +import org.apache.ofbiz.base.util.UtilMisc; +import org.apache.ofbiz.base.util.UtilProperties; +import org.apache.ofbiz.base.util.UtilValidate; +import org.apache.ofbiz.entity.Delegator; +import org.apache.ofbiz.entity.GenericEntityException; +import org.apache.ofbiz.entity.GenericValue; +import org.apache.ofbiz.pricat.AbstractPricatParser; +import org.apache.ofbiz.pricat.InterfacePricatParser; +import org.apache.ofbiz.pricat.PricatParseExcelHtmlThread; + +public class PricatEvents { + + public static final String module = PricatEvents.class.getName(); + + public static final String PricatLatestVersion = UtilProperties.getPropertyValue("pricat", "pricat.latest.version", "V1.1"); + + public static final String PricatFileName = "PricatTemplate_" + PricatLatestVersion + ".xlsx"; + + public static final String PricatPath = "component://pricat/webapp/pricat/downloads/"; + + /** + * Download excel template. + * + * @param request + * @param response + * @return + * @throws IOException + * @throws JDOMException + */ + public static String downloadExcelTemplate(HttpServletRequest request, HttpServletResponse response) { + String templateType = request.getParameter("templateType"); + if (UtilValidate.isEmpty(templateType)) { + return "error"; + } + try { + String path = ComponentLocationResolver.getBaseLocation(PricatPath).toString(); + String fileName = null; + if ("pricatExcelTemplate".equals(templateType)) { + fileName = PricatFileName; + } + if (UtilValidate.isEmpty(fileName)) { + return "error"; + } + Path file = Paths.get(path + fileName); + byte[] bytes = Files.readAllBytes(file); + UtilHttp.streamContentToBrowser(response, bytes, "application/octet-stream", URLEncoder.encode(fileName, "UTF-8")); + } catch (MalformedURLException e) { + Debug.logError(e.getMessage(), module); + return "error"; + } catch (IOException e) { + Debug.logError(e.getMessage(), module); + return "error"; + } + return "success"; + } + + /** + * Upload a pricat. + */ + public static String pricatUpload(HttpServletRequest request, HttpServletResponse response) { + boolean isMultiPart = ServletFileUpload.isMultipartContent(request); + if (isMultiPart) { + return "parse_pricat"; + } else { + String action = request.getParameter("action"); + if (UtilValidate.isNotEmpty(action) && "downloadPricat".equals(action)) { + String sequenceNumString = (String) request.getParameter("sequenceNum"); + long sequenceNum = -1; + if (UtilValidate.isNotEmpty(sequenceNumString)) { + try { + sequenceNum = Long.valueOf(sequenceNumString); + } catch (NumberFormatException e) { + // do nothing + } + } + String originalPricatFileName = (String) request.getSession().getAttribute(PricatParseExcelHtmlThread.PRICAT_FILE); + String pricatFileName = originalPricatFileName; + if (sequenceNum > 0 && AbstractPricatParser.isCommentedExcelExists(request, sequenceNum)) { + GenericValue userLogin = (GenericValue) request.getSession().getAttribute("userLogin"); + String userLoginId = userLogin.getString("userLoginId"); + pricatFileName = InterfacePricatParser.tempFilesFolder + userLoginId + "/" + sequenceNum + ".xlsx"; + } + if (UtilValidate.isNotEmpty(pricatFileName) && UtilValidate.isNotEmpty(originalPricatFileName)) { + try { + Path path = Paths.get(pricatFileName); + byte[] bytes = Files.readAllBytes(path); + path = Paths.get(originalPricatFileName); + UtilHttp.streamContentToBrowser(response, bytes, "application/octet-stream", URLEncoder.encode(path.getName(path.getNameCount() - 1).toString(), "UTF-8")); + } catch (MalformedURLException e) { + Debug.logError(e.getMessage(), module); + return "error"; + } catch (IOException e) { + Debug.logError(e.getMessage(), module); + return "error"; + } + request.getSession().removeAttribute(PricatParseExcelHtmlThread.PRICAT_FILE); + return "download"; + } + } + } + return "success"; + } + + /** + * Download commented excel file after it's parsed. + * + * @param request + * @param response + * @return + * @throws IOException + * @throws JDOMException + */ + public static String downloadCommentedExcel(HttpServletRequest request, HttpServletResponse response) { + String sequenceNum = request.getParameter("sequenceNum"); + GenericValue userLogin = (GenericValue) request.getSession().getAttribute("userLogin"); + if (UtilValidate.isEmpty(sequenceNum) || UtilValidate.isEmpty(userLogin)) { + Debug.logError("sequenceNum[" + sequenceNum + "] or userLogin is empty", module); + return "error"; + } + String userLoginId = userLogin.getString("userLoginId"); + Delegator delegator = (Delegator) request.getAttribute("delegator"); + GenericValue historyValue = null; + try { + historyValue = delegator.findOne("ExcelImportHistory", UtilMisc.toMap("userLoginId", userLoginId, "sequenceNum", Long.valueOf(sequenceNum)), false); + } catch (NumberFormatException e) { + Debug.logError(e.getMessage(), module); + return "error"; + } catch (GenericEntityException e) { + Debug.logError(e.getMessage(), module); + return "error"; + } + if (UtilValidate.isEmpty(historyValue)) { + Debug.logError("No ExcelImportHistory value found by sequenceNum[" + sequenceNum + "] and userLoginId[" + userLoginId + "].", module); + return "error"; + } + String fileName = historyValue.getString("fileName"); + if (UtilValidate.isEmpty(fileName)) { + fileName = sequenceNum + ".xlsx"; + } + try { + File file = FileUtil.getFile(InterfacePricatParser.tempFilesFolder + userLoginId + "/" + sequenceNum + ".xlsx"); + if (file.exists()) { + Path path = Paths.get(file.getPath()); + byte[] bytes = Files.readAllBytes(path); + UtilHttp.streamContentToBrowser(response, bytes, "application/octet-stream", URLEncoder.encode(fileName, "UTF-8")); + } + } catch (MalformedURLException e) { + Debug.logError(e.getMessage(), module); + return "error"; + } catch (IOException e) { + Debug.logError(e.getMessage(), module); + return "error"; + } + return "success"; + } +} Propchange: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/PricatEvents.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/PricatParseExcelHtmlReport.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/PricatParseExcelHtmlThread.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/sample/SamplePricatEvents.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/sample/SamplePricatEvents.java?rev=1774165&r1=1774164&r2=1774165&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/sample/SamplePricatEvents.java (original) +++ ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/sample/SamplePricatEvents.java Wed Dec 14 10:16:04 2016 @@ -1,84 +1,84 @@ -/******************************************************************************* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ofbiz.pricat.sample; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URLEncoder; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.jdom.JDOMException; -import org.apache.ofbiz.base.location.ComponentLocationResolver; -import org.apache.ofbiz.base.util.Debug; -import org.apache.ofbiz.base.util.UtilHttp; -import org.apache.ofbiz.base.util.UtilProperties; -import org.apache.ofbiz.base.util.UtilValidate; -import org.apache.ofbiz.pricat.PricatEvents; - -public class SamplePricatEvents extends PricatEvents { - - public static final String module = SamplePricatEvents.class.getName(); - - public static final String PricatLatestVersion = UtilProperties.getPropertyValue("pricat", "pricat.latest.version", "V1.1"); - - public static final String DemoPricatFileName = "SamplePricatTemplate_" + PricatLatestVersion + ".xlsx"; - - public static final String DemoPricatPath = "component://pricat/webapp/pricatdemo/downloads/"; - - /** - * Download excel template. - * - * @param request - * @param response - * @return - * @throws IOException - * @throws JDOMException - */ - public static String downloadExcelTemplate(HttpServletRequest request, HttpServletResponse response) { - String templateType = request.getParameter("templateType"); - if (UtilValidate.isEmpty(templateType)) { - return "error"; - } - try { - String path = ComponentLocationResolver.getBaseLocation(DemoPricatPath).toString(); - String fileName = null; - if ("pricatExcelTemplate".equals(templateType)) { - fileName = DemoPricatFileName; - } - if (UtilValidate.isEmpty(fileName)) { - return "error"; - } - Path file = Paths.get(path + fileName); - byte[] bytes = Files.readAllBytes(file); - UtilHttp.streamContentToBrowser(response, bytes, "application/octet-stream", URLEncoder.encode(fileName, "UTF-8")); - } catch (MalformedURLException e) { - Debug.logError(e.getMessage(), module); - return "error"; - } catch (IOException e) { - Debug.logError(e.getMessage(), module); - return "error"; - } - return "success"; - } -} +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.ofbiz.pricat.sample; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.jdom.JDOMException; +import org.apache.ofbiz.base.location.ComponentLocationResolver; +import org.apache.ofbiz.base.util.Debug; +import org.apache.ofbiz.base.util.UtilHttp; +import org.apache.ofbiz.base.util.UtilProperties; +import org.apache.ofbiz.base.util.UtilValidate; +import org.apache.ofbiz.pricat.PricatEvents; + +public class SamplePricatEvents extends PricatEvents { + + public static final String module = SamplePricatEvents.class.getName(); + + public static final String PricatLatestVersion = UtilProperties.getPropertyValue("pricat", "pricat.latest.version", "V1.1"); + + public static final String DemoPricatFileName = "SamplePricatTemplate_" + PricatLatestVersion + ".xlsx"; + + public static final String DemoPricatPath = "component://pricat/webapp/pricatdemo/downloads/"; + + /** + * Download excel template. + * + * @param request + * @param response + * @return + * @throws IOException + * @throws JDOMException + */ + public static String downloadExcelTemplate(HttpServletRequest request, HttpServletResponse response) { + String templateType = request.getParameter("templateType"); + if (UtilValidate.isEmpty(templateType)) { + return "error"; + } + try { + String path = ComponentLocationResolver.getBaseLocation(DemoPricatPath).toString(); + String fileName = null; + if ("pricatExcelTemplate".equals(templateType)) { + fileName = DemoPricatFileName; + } + if (UtilValidate.isEmpty(fileName)) { + return "error"; + } + Path file = Paths.get(path + fileName); + byte[] bytes = Files.readAllBytes(file); + UtilHttp.streamContentToBrowser(response, bytes, "application/octet-stream", URLEncoder.encode(fileName, "UTF-8")); + } catch (MalformedURLException e) { + Debug.logError(e.getMessage(), module); + return "error"; + } catch (IOException e) { + Debug.logError(e.getMessage(), module); + return "error"; + } + return "success"; + } +} Propchange: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/sample/SamplePricatEvents.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/ofbiz/pricat/sample/SamplePricatParser.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/poi/xssf/usermodel/OFBizPricatUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/poi/xssf/usermodel/OFBizPricatUtil.java?rev=1774165&r1=1774164&r2=1774165&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/poi/xssf/usermodel/OFBizPricatUtil.java (original) +++ ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/poi/xssf/usermodel/OFBizPricatUtil.java Wed Dec 14 10:16:04 2016 @@ -1,36 +1,36 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.poi.xssf.usermodel; - -import org.apache.poi.ss.util.CellReference; -import com.microsoft.schemas.vml.CTShape; - -public final class OFBizPricatUtil { - public static void formatCommentShape(XSSFSheet sheet, CellReference cell) { - XSSFVMLDrawing vml = sheet.getVMLDrawing(true); - CTShape ctshape = vml.findCommentShape(cell.getRow(), cell.getCol()); - ctshape.setType("#_x0000_t202"); - } - - public static void formatCommentShape(XSSFSheet sheet, int rowNum, short colNum) { - XSSFVMLDrawing vml = sheet.getVMLDrawing(true); - CTShape ctshape = vml.findCommentShape(rowNum, colNum); - ctshape.setType("#_x0000_t202"); - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.poi.xssf.usermodel; + +import org.apache.poi.ss.util.CellReference; +import com.microsoft.schemas.vml.CTShape; + +public final class OFBizPricatUtil { + public static void formatCommentShape(XSSFSheet sheet, CellReference cell) { + XSSFVMLDrawing vml = sheet.getVMLDrawing(true); + CTShape ctshape = vml.findCommentShape(cell.getRow(), cell.getCol()); + ctshape.setType("#_x0000_t202"); + } + + public static void formatCommentShape(XSSFSheet sheet, int rowNum, short colNum) { + XSSFVMLDrawing vml = sheet.getVMLDrawing(true); + CTShape ctshape = vml.findCommentShape(rowNum, colNum); + ctshape.setType("#_x0000_t202"); + } +} Propchange: ofbiz/trunk/specialpurpose/pricat/src/main/java/org/apache/poi/xssf/usermodel/OFBizPricatUtil.java ------------------------------------------------------------------------------ svn:eol-style = native |
Free forum by Nabble | Edit this page |