com.metaeffekt.mirror.contents.eol.StateMapping Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2021-2024 the original author or authors.
*
* 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 com.metaeffekt.mirror.contents.eol;
import com.metaeffekt.artifact.analysis.utils.StringUtils;
import com.metaeffekt.artifact.analysis.utils.TimeUtils;
import java.util.Date;
import java.util.function.Supplier;
public class StateMapping {
private static Supplier NOW = Date::new;
private final T notState;
private final T state;
private final T onDateState;
private final T upcomingState;
private final T closeUpcomingState;
private final boolean nullMeansSupported;
private final String stateName;
public StateMapping(T notState, T state, T onDateState, T upcomingState, boolean nullMeansSupported, String stateName) {
this(notState, state, onDateState, upcomingState, upcomingState, nullMeansSupported, stateName);
}
public StateMapping(T notState, T state, T onDateState, T upcomingState, T closeUpcomingState, boolean nullMeansSupported, String stateName) {
this.notState = notState;
this.state = state;
this.onDateState = onDateState;
this.upcomingState = upcomingState;
this.closeUpcomingState = closeUpcomingState;
this.nullMeansSupported = nullMeansSupported;
this.stateName = stateName;
}
public static void setNOW(Supplier NOW) {
StateMapping.NOW = NOW;
}
public static Date getNOW() {
return NOW.get();
}
public static void resetNOW() {
NOW = Date::new;
}
public T getState(String stateString, long millisUntilCloseUpcoming) {
final boolean isEmpty = StringUtils.isEmpty(stateString);
if (isEmpty) {
if (nullMeansSupported) {
return state;
} else {
return notState;
}
}
if (stateString.equals("true") || stateString.equals(stateName)) {
return state;
} else if (stateString.equals("false")) {
return notState;
}
final Date stateDate = TimeUtils.tryParse(stateString);
if (stateDate == null) {
return notState;
}
final long distanceFromNowToDate = stateDate.getTime() - NOW.get().getTime();
if (distanceFromNowToDate <= 0) {
return onDateState;
} else if (distanceFromNowToDate <= millisUntilCloseUpcoming) {
return closeUpcomingState;
} else {
return upcomingState;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy