diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java index 5c99325f6e9edc65925a6fa91c3f86c266e8227a..75016e933f373029e526b055c9297bbec1d777e4 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java @@ -41,7 +41,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSe import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; -import ch.systemsx.cisd.openbis.generic.shared.basic.annotation.Unescape; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Attachment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AttachmentHolderKind; @@ -416,7 +415,6 @@ public interface ICommonClientService extends IClientService * or {@link #prepareExportExperiments(TableExportCriteria)} has been invoked before and * returned with an exportDataKey passed here as a parameter. */ - @Unescape public String getExportTable(String exportDataKey, String lineSeparator) throws UserFailureException; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java index fbfa272b79e3b3eb5c7b887742b3c4e00ba3da83..9851945577bc6e6adfeb8714086f6718b4f2f23f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java @@ -54,6 +54,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IOriginalDat import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IResultSet; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IResultSetManager; import ch.systemsx.cisd.openbis.generic.client.web.server.translator.ResultSetTranslator; +import ch.systemsx.cisd.openbis.generic.client.web.server.translator.ResultSetTranslator.Escape; import ch.systemsx.cisd.openbis.generic.client.web.server.translator.UserFailureExceptionTranslator; import ch.systemsx.cisd.openbis.generic.client.web.server.util.TableModelUtils; import ch.systemsx.cisd.openbis.generic.client.web.server.util.XMLPropertyTransformer; @@ -182,7 +183,7 @@ public abstract class AbstractClientService implements IClientService, try { final IResultSet<String, T> result = getResultSet(criteria, dataProvider); - return ResultSetTranslator.translate(result); + return ResultSetTranslator.translate(result, Escape.YES); } catch (final UserFailureException e) { throw UserFailureExceptionTranslator.translate(e); 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 d8675e5f5d05e841dfa4f5fe2c29fb85406a17f1..39c6ed35c575f211480172ba48019f826a62b054 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 @@ -72,6 +72,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.SpacesProvid import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.TableDataProviderFactory; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.VocabularyTermsProvider; import ch.systemsx.cisd.openbis.generic.client.web.server.translator.ResultSetTranslator; +import ch.systemsx.cisd.openbis.generic.client.web.server.translator.ResultSetTranslator.Escape; import ch.systemsx.cisd.openbis.generic.client.web.server.translator.SearchableEntityTranslator; import ch.systemsx.cisd.openbis.generic.client.web.server.translator.UserFailureExceptionTranslator; import ch.systemsx.cisd.openbis.generic.client.web.server.util.TSVRenderer; @@ -198,11 +199,17 @@ public final class CommonClientService extends AbstractClientService implements protected final <T> GridRowModels<T> fetchCachedEntities( final TableExportCriteria<T> exportCriteria) + { + return fetchCachedEntities(exportCriteria, Escape.NO); + } + + protected final <T> GridRowModels<T> fetchCachedEntities( + final TableExportCriteria<T> exportCriteria, Escape escape) { IResultSetConfig<String, T> resultSetConfig = createExportListCriteria(exportCriteria); IOriginalDataProvider<T> dummyDataProvider = createDummyDataProvider(); final IResultSet<String, T> result = getResultSet(resultSetConfig, dummyDataProvider); - final ResultSet<T> entities = ResultSetTranslator.translate(result); + final ResultSet<T> entities = ResultSetTranslator.translate(result, escape); return entities.getList(); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/StringHtmlEscapingPointcutAdvisor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/StringHtmlEscapingPointcutAdvisor.java index 80b5e99b9cee4d1b5425182dc825d11fd45a51f5..2300d9a064a6c1e7b807ea6dafe7d1754f95b416 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/StringHtmlEscapingPointcutAdvisor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/StringHtmlEscapingPointcutAdvisor.java @@ -20,7 +20,6 @@ import java.lang.reflect.Method; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; -import org.apache.commons.lang.StringEscapeUtils; import org.apache.log4j.Logger; import org.springframework.aop.ClassFilter; import org.springframework.aop.support.DefaultPointcutAdvisor; @@ -31,7 +30,6 @@ import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.utilities.ReflectingStringEscaper; import ch.systemsx.cisd.openbis.generic.client.web.client.IClientService; import ch.systemsx.cisd.openbis.generic.shared.basic.annotation.DoNotEscape; -import ch.systemsx.cisd.openbis.generic.shared.basic.annotation.Unescape; /** * The advisor for automatically escaping HTML strings in the values returned by implementations of @@ -132,14 +130,12 @@ public class StringHtmlEscapingPointcutAdvisor extends DefaultPointcutAdvisor + originalResult); if (originalResult instanceof String) { - if (methodInvocation.getMethod().isAnnotationPresent(Unescape.class)) - { - result = StringEscapeUtils.unescapeHtml((String) originalResult); - } else - { - // TODO 2010-11-15, CR: Do we need to escape strings in general? - // StringEscapeUtils.escapeHtml((String) unescapedResult); - } + // TODO 2010-11-15, CR: Do we need to escape strings in general? + // need to handle prepareExport then, e.g.: + // if (methodInvocation.getMethod().isAnnotationPresent(DoNotEscape.class) == false) + // { + // result = StringEscapeUtils.escapeHtml((String) originalResult); + // } } else { // Escape the result objects diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java index b10ca83610a3dccb4dc137c515008fafd054fbe4..fbc4b215c4fca83c9d76f6439be8a9db5a59f5df 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java @@ -36,7 +36,6 @@ import ch.rinn.restrictions.Private; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.shared.basic.AlternativesStringFilter; -import ch.systemsx.cisd.common.utilities.ReflectingStringEscaper; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ColumnDistinctValues; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.CustomFilterInfo; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridColumnFilterInfo; @@ -689,9 +688,6 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se List<TableModelColumnHeader> headers = dataProvider.getHeaders(); TableData<T> tableData = new TableData<T>(rows, headers, customColumnsProvider, columnCalculator); - - ReflectingStringEscaper.escapeDeep(rows); - // transformation is performed after escaping not to escape transformed values xmlPropertyTransformer.transformXMLProperties(rows); addToCache(dataKey, tableData); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/ResultSetTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/ResultSetTranslator.java index 0678f5f15a3ba37198ef7d1bcd1bcd52602e060f..2c79db268303ca321f7bed7fc2437d055b4cf763 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/ResultSetTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/translator/ResultSetTranslator.java @@ -16,6 +16,8 @@ package ch.systemsx.cisd.openbis.generic.client.web.server.translator; +import ch.systemsx.cisd.common.utilities.ReflectingStringEscaper; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridRowModels; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet; import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IResultSet; @@ -26,15 +28,24 @@ import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IResultSet; */ public final class ResultSetTranslator { + public enum Escape + { + YES, NO + } + private ResultSetTranslator() { // Can not be instantiated. } - public final static <K, T> ResultSet<T> translate(final IResultSet<String, T> result) + public final static <K, T> ResultSet<T> translate(final IResultSet<String, T> result, + Escape escape) { final ResultSet<T> resultSet = new ResultSet<T>(); - resultSet.setList(result.getList()); + final GridRowModels<T> resultSetList = + escape == Escape.YES ? ReflectingStringEscaper.escapeDeepWithCopy(result.getList()) + : result.getList(); + resultSet.setList(resultSetList); resultSet.setTotalLength(result.getTotalLength()); resultSet.setResultSetKey(result.getResultSetKey()); return resultSet; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/annotation/Unescape.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/annotation/Unescape.java deleted file mode 100644 index 7abb92071e29e201adb98d0882da5e7574cceebe..0000000000000000000000000000000000000000 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/annotation/Unescape.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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.openbis.generic.shared.basic.annotation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * An annotation for marking a method on client service interface that should have its return value - * unescaped. - * - * @author Piotr Buczek - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.METHOD) -@Inherited -public @interface Unescape -{ -}