From 577928e37ab537ea78ff5f5b1fd933189738941c Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Mon, 6 Dec 2010 13:34:11 +0000 Subject: [PATCH] [LMS-1907] introduced UnicodeUtils and used it e.g. in all loaders SVN: 19014 --- .../cisd/common/parser/TabFileLoader.java | 14 ++-- .../cisd/common/utilities/UnicodeUtils.java | 67 +++++++++++++++++++ .../web/server/CommonClientService.java | 19 ++---- .../web/server/FileExportServiceServlet.java | 3 +- .../generic/shared/basic/BasicConstant.java | 3 - .../shared/parser/BisTabFileLoader.java | 4 +- .../parser/SampleUploadSectionsParser.java | 9 +-- .../client/web/server/DataSetLoader.java | 4 +- .../client/web/server/ExperimentLoader.java | 4 +- .../client/web/server/MaterialLoader.java | 4 +- .../web/server/UpdatedExperimentLoader.java | 4 +- 11 files changed, 97 insertions(+), 38 deletions(-) create mode 100644 common/source/java/ch/systemsx/cisd/common/utilities/UnicodeUtils.java diff --git a/common/source/java/ch/systemsx/cisd/common/parser/TabFileLoader.java b/common/source/java/ch/systemsx/cisd/common/parser/TabFileLoader.java index 922dd9be2e6..069b8686ddc 100644 --- a/common/source/java/ch/systemsx/cisd/common/parser/TabFileLoader.java +++ b/common/source/java/ch/systemsx/cisd/common/parser/TabFileLoader.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.common.parser; import java.io.File; +import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; @@ -28,6 +29,7 @@ import java.util.List; import java.util.NoSuchElementException; import java.util.Set; +import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator; import org.apache.commons.lang.StringUtils; @@ -36,6 +38,7 @@ import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked; import ch.systemsx.cisd.common.exceptions.NotImplementedException; import ch.systemsx.cisd.common.parser.filter.AlwaysAcceptLineFilter; import ch.systemsx.cisd.common.parser.filter.ILineFilter; +import ch.systemsx.cisd.common.utilities.UnicodeUtils; /** * Convenient class to load (or iterate over) a tab file, a reader or a stream. The loader delivers @@ -143,17 +146,17 @@ public class TabFileLoader<T> assert file != null : "Given file must not be null"; assert file.isFile() : "Given file '" + file.getAbsolutePath() + "' is not a file."; - FileReader reader = null; + FileInputStream inputStream = null; try { - reader = new FileReader(file); - return load(reader); + inputStream = FileUtils.openInputStream(file); + return load(inputStream); } catch (final IOException ex) { throw new IOExceptionUnchecked(ex); } finally { - IOUtils.closeQuietly(reader); + IOUtils.closeQuietly(inputStream); } } @@ -476,7 +479,8 @@ public class TabFileLoader<T> private Iterator<Line> createLineIterator(final InputStream stream) throws IOException { - final LineIterator lineIterator = IOUtils.lineIterator(stream, "UTF-8"); + final LineIterator lineIterator = + IOUtils.lineIterator(stream, UnicodeUtils.DEFAULT_UNICODE_CHARSET); final Iterator<Line> iterator = new TabFileLineIterator(lineIterator); return iterator; } diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/UnicodeUtils.java b/common/source/java/ch/systemsx/cisd/common/utilities/UnicodeUtils.java new file mode 100644 index 00000000000..5bf5236b4ad --- /dev/null +++ b/common/source/java/ch/systemsx/cisd/common/utilities/UnicodeUtils.java @@ -0,0 +1,67 @@ +/* + * Copyright 2007 ETH Zuerich, CISD + * + * 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 ch.systemsx.cisd.common.utilities; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.UnsupportedEncodingException; + +import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; + +/** + * Utilities for dealing with file encoding. + * + * @author Piotr Buczek + */ +public final class UnicodeUtils +{ + /** default Unicode encoding used for strings - UTF-8 */ + public static final String DEFAULT_UNICODE_CHARSET = "UTF-8"; + + private UnicodeUtils() + { + // Can not be instantiated. + } + + /** + * @return {@link Reader} that uses the default Unicode encoding. + * @throws EnvironmentFailureException if the encoding is not supported (shouldn't happen). + * @see #DEFAULT_UNICODE_CHARSET + */ + public final static Reader createReader(InputStream inputStream) + throws EnvironmentFailureException + { + return createReader(inputStream, DEFAULT_UNICODE_CHARSET); + } + + /** + * @return {@link Reader} that uses the given encoding. + * @throws EnvironmentFailureException if the encoding is not supported. + */ + public final static Reader createReader(InputStream inputStream, String encoding) + throws EnvironmentFailureException + { + try + { + return new InputStreamReader(inputStream, encoding); + } catch (UnsupportedEncodingException ex) + { + throw new EnvironmentFailureException(ex.getMessage()); + } + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java index 3d76de87ee2..31e3619b9f0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java @@ -16,8 +16,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.server; -import java.io.StringReader; -import java.io.UnsupportedEncodingException; +import java.io.Reader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -41,6 +40,7 @@ import ch.systemsx.cisd.common.parser.ParserException; import ch.systemsx.cisd.common.servlet.IRequestContextProvider; import ch.systemsx.cisd.common.spring.IUncheckedMultipartFile; import ch.systemsx.cisd.common.utilities.BeanUtils; +import ch.systemsx.cisd.common.utilities.UnicodeUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientService; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ArchivingResult; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.AttachmentVersions; @@ -79,7 +79,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.server.translator.UserFailure import ch.systemsx.cisd.openbis.generic.client.web.server.util.TSVRenderer; import ch.systemsx.cisd.openbis.generic.shared.ICommonServer; import ch.systemsx.cisd.openbis.generic.shared.IServer; -import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder; @@ -1288,18 +1287,9 @@ public final class CommonClientService extends AbstractClientService implements final List<VocabularyTerm> results = new ArrayList<VocabularyTerm>(); for (final IUncheckedMultipartFile multipartFile : uploadedFiles.iterable()) { - StringReader stringReader; - try - { - stringReader = - new StringReader(new String(multipartFile.getBytes(), - BasicConstant.UTF_ENCODING)); - } catch (UnsupportedEncodingException ex) - { - throw new UserFailureException(ex.getMessage()); - } + Reader reader = UnicodeUtils.createReader(multipartFile.getInputStream()); final List<VocabularyTerm> loadedTerms = - tabFileLoader.load(new DelegatedReader(stringReader, multipartFile + tabFileLoader.load(new DelegatedReader(reader, multipartFile .getOriginalFilename())); results.addAll(loadedTerms); } @@ -1311,7 +1301,6 @@ public final class CommonClientService extends AbstractClientService implements } return results; } - } public void addVocabularyTerms(TechId vocabularyId, List<String> vocabularyTerms, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/FileExportServiceServlet.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/FileExportServiceServlet.java index 38b6a1a6dbd..989f6f3934e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/FileExportServiceServlet.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/FileExportServiceServlet.java @@ -23,6 +23,7 @@ import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; +import ch.systemsx.cisd.common.utilities.UnicodeUtils; import ch.systemsx.cisd.common.utilities.OSKind; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientService; import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; @@ -51,7 +52,7 @@ public class FileExportServiceServlet extends AbstractFileDownloadServlet OSKind osKind = HttpUtils.figureOperatingSystemKind(request); String lineSeparator = osKind.getLineSeparator(); String fileContent = service.getExportTable(exportDataKey, lineSeparator); - byte[] value = fileContent.getBytes(); + byte[] value = fileContent.getBytes(UnicodeUtils.DEFAULT_UNICODE_CHARSET); String fileName = "exportedData.txt"; return new FileContent(value, fileName); } else diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/BasicConstant.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/BasicConstant.java index 4d12959e56a..ac26dc4a7bf 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/BasicConstant.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/BasicConstant.java @@ -23,9 +23,6 @@ package ch.systemsx.cisd.openbis.generic.shared.basic; */ public class BasicConstant { - /** default encoding used for strings - UTF-8 */ - public static final String UTF_ENCODING = "UTF-8"; - /** Maximum length of a file name for uploading data sets to CIFEX. */ public static final int MAX_LENGTH_OF_FILE_NAME = 250; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/BisTabFileLoader.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/BisTabFileLoader.java index ea470420dc6..675bf2e929e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/BisTabFileLoader.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/BisTabFileLoader.java @@ -67,8 +67,8 @@ public final class BisTabFileLoader<T> extends TabFileLoader<T> final NamedReader namedReader) { final String message = ex.getMessage(); - throw UserFailureException.fromTemplate(ERROR_IN_FILE_MESSAGE_FORMAT, namedReader - .getReaderName(), message); + throw UserFailureException.fromTemplate(ERROR_IN_FILE_MESSAGE_FORMAT, + namedReader.getReaderName(), message); } // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java index 39828304027..c96860d8869 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java @@ -17,7 +17,7 @@ package ch.systemsx.cisd.openbis.generic.shared.parser; import java.io.InputStream; -import java.io.InputStreamReader; +import java.io.Reader; import java.io.StringReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; @@ -33,7 +33,7 @@ import ch.systemsx.cisd.common.parser.IParserObjectFactory; import ch.systemsx.cisd.common.parser.IParserObjectFactoryFactory; import ch.systemsx.cisd.common.parser.IPropertyMapper; import ch.systemsx.cisd.common.parser.ParserException; -import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant; +import ch.systemsx.cisd.common.utilities.UnicodeUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchOperationKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchRegistrationResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; @@ -191,9 +191,10 @@ public class SampleUploadSectionsParser private static List<FileSection> extractSections(InputStream stream) { List<FileSection> sections = new ArrayList<FileSection>(); - InputStreamReader reader = new InputStreamReader(stream); + Reader reader = null; try { + reader = UnicodeUtils.createReader(stream); LineIterator it = IOUtils.lineIterator(reader); StringBuilder sb = null; String sectionName = null; @@ -267,7 +268,7 @@ public class SampleUploadSectionsParser } else { sampleSections.add(new FileSection(new String(multipartFile.getBytes(), - BasicConstant.UTF_ENCODING), sampleType.getCode())); + UnicodeUtils.DEFAULT_UNICODE_CHARSET), sampleType.getCode())); } int sampleCounter = 0; for (FileSection fs : sampleSections) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/DataSetLoader.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/DataSetLoader.java index 9b9c6367a81..84427112c89 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/DataSetLoader.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/DataSetLoader.java @@ -15,7 +15,6 @@ */ package ch.systemsx.cisd.openbis.plugin.generic.client.web.server; -import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; import java.util.Collection; @@ -26,6 +25,7 @@ import ch.systemsx.cisd.common.parser.IParserObjectFactory; import ch.systemsx.cisd.common.parser.IParserObjectFactoryFactory; import ch.systemsx.cisd.common.parser.IPropertyMapper; import ch.systemsx.cisd.common.parser.ParserException; +import ch.systemsx.cisd.common.utilities.UnicodeUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchRegistrationResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewDataSet; import ch.systemsx.cisd.openbis.generic.shared.parser.BisTabFileLoader; @@ -61,7 +61,7 @@ public class DataSetLoader results = new ArrayList<BatchRegistrationResult>(files.size()); for (final NamedInputStream file : files) { - final Reader reader = new InputStreamReader(file.getInputStream()); + final Reader reader = UnicodeUtils.createReader(file.getInputStream()); final List<NewDataSet> loadedMaterials = tabFileLoader.load(new DelegatedReader(reader, file.getOriginalFilename())); newObjects.addAll(loadedMaterials); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/ExperimentLoader.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/ExperimentLoader.java index 7a2ce897af5..23b9e0b945f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/ExperimentLoader.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/ExperimentLoader.java @@ -16,7 +16,6 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.server; -import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; import java.util.Collection; @@ -27,6 +26,7 @@ import ch.systemsx.cisd.common.parser.IParserObjectFactory; import ch.systemsx.cisd.common.parser.IParserObjectFactoryFactory; import ch.systemsx.cisd.common.parser.IPropertyMapper; import ch.systemsx.cisd.common.parser.ParserException; +import ch.systemsx.cisd.common.utilities.UnicodeUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchRegistrationResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewBasicExperiment; import ch.systemsx.cisd.openbis.generic.shared.parser.BisTabFileLoader; @@ -64,7 +64,7 @@ public class ExperimentLoader results = new ArrayList<BatchRegistrationResult>(files.size()); for (final NamedInputStream file : files) { - final Reader reader = new InputStreamReader(file.getInputStream()); + final Reader reader = UnicodeUtils.createReader(file.getInputStream()); final List<NewBasicExperiment> loadedExperiments = tabFileLoader.load(new DelegatedReader(reader, file.getOriginalFilename())); newExperiments.addAll(loadedExperiments); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/MaterialLoader.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/MaterialLoader.java index ea7f61fc61d..613a18dd227 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/MaterialLoader.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/MaterialLoader.java @@ -1,6 +1,5 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.server; -import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; import java.util.Collection; @@ -11,6 +10,7 @@ import ch.systemsx.cisd.common.parser.IParserObjectFactory; import ch.systemsx.cisd.common.parser.IParserObjectFactoryFactory; import ch.systemsx.cisd.common.parser.IPropertyMapper; import ch.systemsx.cisd.common.parser.ParserException; +import ch.systemsx.cisd.common.utilities.UnicodeUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchRegistrationResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewMaterial; import ch.systemsx.cisd.openbis.generic.shared.parser.BisTabFileLoader; @@ -41,7 +41,7 @@ public class MaterialLoader results = new ArrayList<BatchRegistrationResult>(files.size()); for (final NamedInputStream file : files) { - final Reader reader = new InputStreamReader(file.getInputStream()); + final Reader reader = UnicodeUtils.createReader(file.getInputStream()); final List<NewMaterial> loadedMaterials = tabFileLoader.load(new DelegatedReader(reader, file.getOriginalFilename())); newMaterials.addAll(loadedMaterials); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/UpdatedExperimentLoader.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/UpdatedExperimentLoader.java index abc6eeff314..a5ef23ae77a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/UpdatedExperimentLoader.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/UpdatedExperimentLoader.java @@ -16,7 +16,6 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.server; -import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; import java.util.Collection; @@ -27,6 +26,7 @@ import ch.systemsx.cisd.common.parser.IParserObjectFactory; import ch.systemsx.cisd.common.parser.IParserObjectFactoryFactory; import ch.systemsx.cisd.common.parser.IPropertyMapper; import ch.systemsx.cisd.common.parser.ParserException; +import ch.systemsx.cisd.common.utilities.UnicodeUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchRegistrationResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.UpdatedBasicExperiment; import ch.systemsx.cisd.openbis.generic.shared.parser.BisTabFileLoader; @@ -64,7 +64,7 @@ public class UpdatedExperimentLoader results = new ArrayList<BatchRegistrationResult>(files.size()); for (final NamedInputStream file : files) { - final Reader reader = new InputStreamReader(file.getInputStream()); + final Reader reader = UnicodeUtils.createReader(file.getInputStream()); final List<UpdatedBasicExperiment> loadedExperiments = tabFileLoader.load(new DelegatedReader(reader, file.getOriginalFilename())); newExperiments.addAll(loadedExperiments); -- GitLab