*/
+import com.cronutils.model.Cron;
+import com.cronutils.model.definition.CronDefinition;
+import com.cronutils.model.definition.CronDefinitionBuilder;
+import com.cronutils.model.field.CronFieldName;
+import com.cronutils.model.field.expression.Always;
+import com.cronutils.model.field.expression.And;
+import com.cronutils.model.field.expression.Between;
+import com.cronutils.model.field.expression.Every;
+import com.cronutils.model.field.expression.FieldExpression;
+import com.cronutils.model.field.expression.On;
+import com.cronutils.model.field.expression.QuestionMark;
+import com.cronutils.model.field.expression.visitor.FieldExpressionVisitor;
+import com.cronutils.model.field.value.IntegerFieldValue;
+import com.cronutils.parser.CronParser;
+import org.apache.tools.ant.types.resources.Sort;
+
import java.time.*;
import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
+import static com.cronutils.model.CronType.QUARTZ;
+
/**
* A definition of schedule times.
*/
final SortedSet<MonthDay> daysOfMonth = new TreeSet<>();
+ final SortedSet<Month> months = new TreeSet<>( );
+
final SortedSet<LocalTime> scheduleTimes = new TreeSet<>();
final LocalTime startTime;
boolean fixedTimes = false;
-
public ScheduleDefinition(Collection<DayOfWeek> daysOfWeek,
Collection<MonthDay> daysOfMonth,
+ Collection<Month> months,
Collection<LocalTime> scheduleTimes,
LocalTime startTime, Duration timeInterval) {
if (daysOfWeek!=null)
this.daysOfWeek.addAll(daysOfWeek);
if (daysOfMonth!=null)
this.daysOfMonth.addAll(daysOfMonth);
- if (scheduleTimes!=null)
- this.scheduleTimes.addAll(scheduleTimes);
- this.startTime = startTime;
- this.timeInterval = timeInterval;
+ if (months!=null) {
+ this.months.addAll(months);
+ }
+ if (scheduleTimes!=null && scheduleTimes.size()>0)
+ {
+ this.fixedTimes = true;
+ this.scheduleTimes.addAll( scheduleTimes );
+ this.startTime=null;
+ this.timeInterval=null;
+ } else
+ {
+ this.fixedTimes = false;
+ this.startTime = startTime;
+ this.timeInterval = timeInterval;
+ }
}
/**
return daysOfMonth;
}
+ /**
+ * Returns the months on which the action should be run.
+ * @return
+ */
+ public SortedSet<Month> getMonths() {
+ return months;
+ }
+
/**
* Returns the time on each day on which the action should be run.
* @return a set of times on which the action should be run.
public boolean isFixedTimes() {
return fixedTimes;
};
+
+ public static ScheduleDefinition fromCronExpression(String cron) {
+ CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor( QUARTZ );
+ CronParser parser = new CronParser( cronDefinition );
+ Cron pCron = parser.parse(cron);
+ if (pCron.validate()==null) {
+ throw new IllegalArgumentException( "Cron expression not valid "+cron );
+ };
+ CronVisitor secondsVisit = new CronVisitor( );
+ pCron.retrieve( CronFieldName.SECOND ).getExpression().accept(secondsVisit);
+ CronVisitor minutesVisit = new CronVisitor( );
+ pCron.retrieve( CronFieldName.MINUTE ).getExpression().accept(minutesVisit);
+ CronVisitor hoursVisit = new CronVisitor( 24 );
+ pCron.retrieve( CronFieldName.HOUR ).getExpression().accept(hoursVisit);
+ SortedSet<LocalTime> times = new TreeSet<>( );
+ for (Integer hour : hoursVisit.getTimes()) {
+ for (Integer minute : minutesVisit.getTimes()) {
+ for (Integer second : secondsVisit.getTimes()) {
+ times.add(LocalTime.of( hour, minute, second));
+ }
+ }
+ }
+
+ return null;
+ }
+
+ private static class CronVisitor implements FieldExpressionVisitor {
+
+ private int range = 60;
+ private SortedSet<Integer> times = new TreeSet<>( );
+
+ CronVisitor() {
+
+ }
+
+ CronVisitor(int range) {
+ this.range = range;
+ }
+
+ private SortedSet<Integer> getTimes() {
+ return times;
+ }
+
+ @Override
+ public FieldExpression visit( FieldExpression expression )
+ {
+ try {
+ Integer in = new Integer(expression.asString());
+ times.add(in);
+ } catch (NumberFormatException ex) {
+ //
+ }
+ return expression;
+ }
+
+ @Override
+ public FieldExpression visit( Always always )
+ {
+ for (int i=0; i<range; i++) {
+ times.add(new Integer(i));
+ }
+ return always;
+ }
+
+ @Override
+ public FieldExpression visit( And and )
+ {
+ FieldExpression result = null;
+ for (FieldExpression expr : and.getExpressions()) {
+ result = expr.accept( this );
+ }
+ return result;
+ }
+
+ @Override
+ public FieldExpression visit( Between between )
+ {
+ for (int i=((IntegerFieldValue) between.getFrom( ).getValue( )).getValue();
+ i<((IntegerFieldValue)between.getTo().getValue()).getValue() && i<range; i++ ){
+ times.add(new Integer(i));
+ }
+ return between;
+ }
+
+ @Override
+ public FieldExpression visit( Every every )
+ {
+ String exp = every.getExpression().asString();
+ int start;
+ if ("*".equals(exp)) {
+ start = 0;
+ } else {
+ start = Integer.parseInt( exp );
+ }
+ int period = every.getPeriod().getValue();
+ for (int i=start; i<range; i=i+period) {
+ times.add(new Integer(i));
+ }
+ return every;
+ }
+
+ @Override
+ public FieldExpression visit( On on )
+ {
+ // Ignore
+ return null;
+ }
+
+ @Override
+ public FieldExpression visit( QuestionMark questionMark )
+ {
+ // Ignore
+ return null;
+ }
+ }
}
import org.apache.archiva.repository.RepositoryProvider;
import org.apache.archiva.repository.RepositoryType;
import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.HashSet;
import java.util.Set;
*/
public class MavenRepositoryProvider implements RepositoryProvider
{
+ private static final Logger log = LoggerFactory.getLogger( MavenRepositoryProvider.class );
+
static final Set<RepositoryType> TYPES = new HashSet<>( );
static {
TYPES.add( RepositoryType.MAVEN);
public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration cfg )
{
MavenManagedRepository repo = new MavenManagedRepository(cfg.getId() ,cfg.getName());
+ try
+ {
+ if (cfg.getLocation().startsWith("file:")) {
+ repo.setLocation( new URI(cfg.getLocation()) );
+ } else {
+ repo.setLocation( new URI("file://"+cfg.getLocation()) );
+ }
+ }
+ catch ( URISyntaxException e )
+ {
+ log.error("Could not set repository uri "+cfg.getLocation());
+ }
+ cfg.getRefreshCronExpression()
+
+
StagingRepositoryFeature feature = repo.getFeature( StagingRepositoryFeature.class ).get();
return null;
}