Create a new DeprecationWarning service for tracking deprecated parameters, etc., in components Move CompatibilityImpl to the correct package
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/749fbf9e Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/749fbf9e Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/749fbf9e Branch: refs/heads/5.4-js-rewrite Commit: 749fbf9ec6aca260635c9ffdd4f2cae0ddd50c85 Parents: 4ea77f4 Author: Howard M. Lewis Ship <[email protected]> Authored: Mon Aug 13 10:25:16 2012 -0700 Committer: Howard M. Lewis Ship <[email protected]> Committed: Mon Aug 13 10:25:16 2012 -0700 ---------------------------------------------------------------------- .../internal/compatibility/CompatibilityImpl.java | 41 ----- .../services/compatibility/CompatibilityImpl.java | 41 +++++ .../compatibility/DeprecationWarningImpl.java | 115 +++++++++++++++ .../compatibility/CompatibilityModule.java | 4 +- .../services/compatibility/DeprecationWarning.java | 44 ++++++ 5 files changed, 203 insertions(+), 42 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/749fbf9e/tapestry-core/src/main/java/org/apache/tapestry5/internal/compatibility/CompatibilityImpl.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/compatibility/CompatibilityImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/compatibility/CompatibilityImpl.java deleted file mode 100644 index be70f99..0000000 --- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/compatibility/CompatibilityImpl.java +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2012 The Apache Software Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package org.apache.tapestry5.internal.compatibility; - -import org.apache.tapestry5.services.compatibility.Compatibility; -import org.apache.tapestry5.services.compatibility.Trait; - -import java.util.Collection; -import java.util.EnumSet; - -public class CompatibilityImpl implements Compatibility -{ - private final EnumSet<Trait> traits; - - public CompatibilityImpl(Collection<Trait> configuration) - { - traits = EnumSet.noneOf(Trait.class); - - traits.addAll(configuration); - } - - @Override - public boolean enabled(Trait trait) - { - assert trait != null; - - return traits.contains(trait); - } -} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/749fbf9e/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/compatibility/CompatibilityImpl.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/compatibility/CompatibilityImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/compatibility/CompatibilityImpl.java new file mode 100644 index 0000000..296dd82 --- /dev/null +++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/compatibility/CompatibilityImpl.java @@ -0,0 +1,41 @@ +// Copyright 2012 The Apache Software Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package org.apache.tapestry5.internal.services.compatibility; + +import org.apache.tapestry5.services.compatibility.Compatibility; +import org.apache.tapestry5.services.compatibility.Trait; + +import java.util.Collection; +import java.util.EnumSet; + +public class CompatibilityImpl implements Compatibility +{ + private final EnumSet<Trait> traits; + + public CompatibilityImpl(Collection<Trait> configuration) + { + traits = EnumSet.noneOf(Trait.class); + + traits.addAll(configuration); + } + + @Override + public boolean enabled(Trait trait) + { + assert trait != null; + + return traits.contains(trait); + } +} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/749fbf9e/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/compatibility/DeprecationWarningImpl.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/compatibility/DeprecationWarningImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/compatibility/DeprecationWarningImpl.java new file mode 100644 index 0000000..aeb6b22 --- /dev/null +++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/compatibility/DeprecationWarningImpl.java @@ -0,0 +1,115 @@ +// Copyright 2012 The Apache Software Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package org.apache.tapestry5.internal.services.compatibility; + +import org.apache.tapestry5.ComponentResources; +import org.apache.tapestry5.ioc.internal.util.CollectionFactory; +import org.apache.tapestry5.ioc.internal.util.InternalUtils; +import org.apache.tapestry5.services.ComponentClasses; +import org.apache.tapestry5.services.ComponentMessages; +import org.apache.tapestry5.services.ComponentTemplates; +import org.apache.tapestry5.services.InvalidationEventHub; +import org.apache.tapestry5.services.compatibility.DeprecationWarning; +import org.slf4j.Logger; + +import java.util.Map; + +public class DeprecationWarningImpl implements DeprecationWarning +{ + private final Logger logger; + + static class ParameterValueDeprecationKey + { + final String completeId, parameterName; + final Object value; + + ParameterValueDeprecationKey(String completeId, String parameterName, Object value) + { + this.completeId = completeId; + this.parameterName = parameterName; + this.value = value; + } + + @Override + public boolean equals(Object o) + { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + ParameterValueDeprecationKey that = (ParameterValueDeprecationKey) o; + + if (!completeId.equals(that.completeId)) return false; + if (!parameterName.equals(that.parameterName)) return false; + if (value != null ? !value.equals(that.value) : that.value != null) return false; + + return true; + } + + @Override + public int hashCode() + { + int result = completeId.hashCode(); + result = 31 * result + parameterName.hashCode(); + result = 31 * result + (value != null ? value.hashCode() : 0); + return result; + } + } + + // Really used as a set. + private final Map<Object, Boolean> deprecations = CollectionFactory.newConcurrentMap(); + + public DeprecationWarningImpl(Logger logger) + { + this.logger = logger; + } + + @Override + public void componentParameterValue(ComponentResources resources, String parameterName, Object parameterValue, String message) + { + assert resources != null; + assert InternalUtils.isNonBlank(parameterName); + assert InternalUtils.isNonBlank(message); + + ParameterValueDeprecationKey key = new ParameterValueDeprecationKey(resources.getCompleteId(), parameterName, parameterValue); + + if (deprecations.containsKey(key)) + { + return; + } + + deprecations.put(key, true); + + logger.error(String.format("Component %s, parameter %s. %s\n(at %s)", + key.completeId, + parameterName, + message, + resources.getLocation()); + } + + public void setupClearDeprecationsWhenInvalidated( + @ComponentClasses + InvalidationEventHub componentClassesHub, + @ComponentMessages + InvalidationEventHub messagesHub, + @ComponentTemplates + InvalidationEventHub templatesHub) + { + componentClassesHub.clearOnInvalidation(deprecations); + messagesHub.clearOnInvalidation(deprecations); + templatesHub.clearOnInvalidation(deprecations); + } + + +} http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/749fbf9e/tapestry-core/src/main/java/org/apache/tapestry5/services/compatibility/CompatibilityModule.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/compatibility/CompatibilityModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/compatibility/CompatibilityModule.java index 29eb254..0070ff9 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/services/compatibility/CompatibilityModule.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/compatibility/CompatibilityModule.java @@ -14,7 +14,8 @@ package org.apache.tapestry5.services.compatibility; -import org.apache.tapestry5.internal.compatibility.CompatibilityImpl; +import org.apache.tapestry5.internal.services.compatibility.CompatibilityImpl; +import org.apache.tapestry5.internal.services.compatibility.DeprecationWarningImpl; import org.apache.tapestry5.ioc.Configuration; import org.apache.tapestry5.ioc.ServiceBinder; import org.apache.tapestry5.ioc.annotations.Contribute; @@ -29,6 +30,7 @@ public class CompatibilityModule public static void bind(ServiceBinder binder) { binder.bind(Compatibility.class, CompatibilityImpl.class); + binder.bind(DeprecationWarning.class, DeprecationWarningImpl.class); } @Contribute(Compatibility.class) http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/749fbf9e/tapestry-core/src/main/java/org/apache/tapestry5/services/compatibility/DeprecationWarning.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/compatibility/DeprecationWarning.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/compatibility/DeprecationWarning.java new file mode 100644 index 0000000..7ee616b --- /dev/null +++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/compatibility/DeprecationWarning.java @@ -0,0 +1,44 @@ +// Copyright 2012 The Apache Software Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package org.apache.tapestry5.services.compatibility; + +import org.apache.tapestry5.ComponentResources; + +/** + * Used to report deprecation warnings for components. + * + * @since 5.4 + */ +public interface DeprecationWarning +{ + /** + * Used to identify a specific parameter value that is no longer supported. The first time this combination of + * component, parameter name, and parameter value are provided, an error is logged against this service's + * logger, including the component type and complete id, name of parameter (but not the value), the message, and the location of + * the component. + * + * @param resources + * identifies the component, including its location. + * @param parameterName + * name of parameter containing illegal value. + * @param parameterValue + * value that is not supported (typically, an enum type). May be null. + * @param message + * message to display; typically explains that action will be taken, such as treating the value as an alternate value, + * or simply ignoring the value. This should clarify the issue to the developer, guiding them towards resolving + * the deprecation, by changing the value, or eliminating the use of the parameter entirely. + */ + void componentParameterValue(ComponentResources resources, String parameterName, Object parameterValue, String message); +}
