package org.togglz.core.activation; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.togglz.core.logging.Log; import org.togglz.core.logging.LogFactory; import org.togglz.core.repository.FeatureState; import org.togglz.core.spi.ActivationStrategy; import org.togglz.core.user.FeatureUser; import org.togglz.core.util.Strings; public class ReleaseDateActivationStrategy implements ActivationStrategy { private final Log log = LogFactory.getLog(ReleaseDateActivationStrategy.class); public static final String ID = "release-date"; public static final String PARAM_DATE = "date"; public static final String PARAM_TIME = "time"; @Override public String getId() { return ID; } @Override public String getName() { return "Release date"; } @Override public boolean isActive(FeatureState featureState, FeatureUser user) { String dateStr = featureState.getParameter(PARAM_DATE); String timeStr = featureState.getParameter(PARAM_TIME); Date releaseDate = parseReleaseDate(dateStr, timeStr); if (releaseDate != null) { return new Date().after(releaseDate); } return false; } private Date parseReleaseDate(String dateStr, String timeStr) { StringBuilder fullDate = new StringBuilder(); fullDate.append(dateStr.trim()); fullDate.append('T'); if (Strings.isNotBlank(timeStr)) { fullDate.append(timeStr.trim()); } else { fullDate.append("00:00:00"); } SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); try { return dateFormat.parse(fullDate.toString()); } catch (ParseException e) { log.error("Invalid date and/or time: " + fullDate.toString()); } return null; } @Override public Parameter[] getParameters() { return new Parameter[] { ParameterBuilder.create(PARAM_DATE).label("Date").matching("\\d{4}\\-\\d{2}\\-\\d{2}") .description("Release date of the feature. Format: 2012-12-31"), ParameterBuilder.create(PARAM_TIME).label("Time").matching("\\d{2}\\:\\d{2}\\:\\d{2}").optional() .description("Optional time for the release day. The default value is midnight. Format: 14:45:00") }; } }