| /* |
| * 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.myfaces.extensions.scripting.spring.bean; |
| |
| import org.springframework.core.Conventions; |
| |
| /** |
| * <p>An attribute that will be attached to those bean definitions that are refreshable, i.e. this |
| * class contains some of the required metadata that you'll have to access if you want to decide |
| * whether a bean definition has to be refreshed or not. Note that this attribute, however, is |
| * only capable of determining whether a bean definition has to be refreshed, sometimes you'll |
| * actually have to refresh bean instances as well.</p> |
| * |
| * @author Bernhard Huemer |
| */ |
| public class RefreshableBeanAttribute |
| { |
| |
| /** |
| * <p>The name of the bean definition metadata attribute that refers to an instance |
| * of this class, i.e. use this attribute name if you want to obtain all information |
| * regarding the last time that the bean definition has been refreshed.</p> |
| */ |
| public static final String REFRESHABLE_BEAN_ATTRIBUTE = |
| Conventions.getQualifiedAttributeName(RefreshableBeanAttribute.class, "refreshableBeanAttribute"); |
| |
| /** |
| * <p>The timestamp in milliseconds of the last time that the bean |
| * definition that this attribute belongs to has been requested to |
| * refresh itself.</p> |
| */ |
| private long refreshRequested; |
| |
| /** |
| * <p>The timestamp in milliseconds of the last time that the bean |
| * definition that this attribute belongs to has been actually |
| * refreshed.</p> |
| */ |
| private long refreshExecuted; |
| |
| /** |
| * <p>By calling this method the user is able to request another refresh. Note that |
| * this doesn't cause the bean factory to refresh the bean definition immediately, |
| * but rather it just signals a request. The bean definition will be refreshed once |
| * the bean factory has to deal with the next bean request (i.e. a call to |
| * getBean()).</p> |
| */ |
| public void requestRefresh() |
| { |
| refreshRequested = System.currentTimeMillis(); |
| } |
| |
| /** |
| * <p>Returns the timestamp in milliseconds of the last time that a refresh operation |
| * has been requested.</p> |
| * |
| * @return the timestamp in milliseconds of the last refresh request |
| */ |
| public long getRequestedRefreshDate() |
| { |
| return refreshRequested; |
| } |
| |
| /** |
| * <p>By calling this method the user indicates that the according bean definition |
| * has just been refreshed, which means that the method #{@link #requiresRefresh()} |
| * will return <code>false</code> until the user requests the next refresh.</p> |
| */ |
| public void executedRefresh() |
| { |
| refreshExecuted = System.currentTimeMillis(); |
| } |
| |
| /** |
| * <p>Returns the timestamp in milliseconds of the last time that a refresh operation |
| * has been executed.</p> |
| * |
| * @return the timestamp in milliseconds of the last executed refresh operation |
| */ |
| public long getExecutedRefreshDate() |
| { |
| return refreshExecuted; |
| } |
| |
| /** |
| * <p>Determines whether a refresh is required, i.e. whether the user has requested |
| * another refresh operation by calling {@link #requestRefresh()} recently. Note that |
| * a call to this method only determines whether the bean definition on its own has |
| * to be refreshed (i.e. it doesn't even consider a particular bean instance).</p> |
| * |
| * @return whether a refresh call is required |
| */ |
| public boolean requiresRefresh() |
| { |
| return getExecutedRefreshDate() < getRequestedRefreshDate(); |
| } |
| |
| } |