001/*
002 *  Copyright 2016 Anyware Services
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package org.ametys.plugins.repository.lock;
017
018import java.time.ZoneOffset;
019import java.time.ZonedDateTime;
020import java.util.ArrayList;
021import java.util.Collections;
022import java.util.HashMap;
023import java.util.List;
024import java.util.Map;
025
026import org.ametys.core.schedule.Runnable;
027import org.ametys.core.user.UserIdentity;
028import org.ametys.runtime.i18n.I18nizableText;
029
030/**
031 * A {@link Runnable} which schedules a {@link UnlockSchedulable} for unlocking an object.
032 */
033public class UnlockRunnable implements Runnable
034{
035    /** The id of the object to unlock */
036    protected String _objectId;
037    /** The name of the object to unlock */
038    protected String _objectName;
039    /** The date when to unlock the content */
040    protected ZonedDateTime _date;
041    /** The {@link UserIdentity} to launch the runnable task */
042    protected UserIdentity _userIdentity;
043
044    /**
045     * Constructor
046     * @param objectId The id of the object to unlock
047     * @param objectName The name of the object to unlock
048     * @param date The date when to unlock the content
049     * @param userIdentity The {@link UserIdentity} to launch the runnable task
050     */
051    public UnlockRunnable(String objectId, String objectName, ZonedDateTime date, UserIdentity userIdentity)
052    {
053        _objectId = objectId;
054        _objectName = objectName;
055        _date = date.withZoneSameInstant(ZoneOffset.UTC);
056        _userIdentity = userIdentity;
057    }
058    
059    @Override
060    public String getId()
061    {
062        return this.getClass().getName() + "." + _objectId;
063    }
064
065    @Override
066    public I18nizableText getLabel()
067    {
068        return new I18nizableText("plugin.repository", "PLUGINS_REPOSITORY_UNLOCK_RUNNABLE_LABEL", Collections.singletonList(_objectName));
069    }
070
071    @Override
072    public I18nizableText getDescription()
073    {
074        List<String> parameters = new ArrayList<>();
075        parameters.add(_objectId);
076        parameters.add(_objectName);
077        return new I18nizableText("plugin.repository", "PLUGINS_REPOSITORY_UNLOCK_RUNNABLE_DESCRIPTION", parameters);
078    }
079    
080    @Override
081    public FireProcess getFireProcess()
082    {
083        return FireProcess.CRON;
084    }
085
086    @Override
087    public String getCronExpression()
088    {
089        return _date.getSecond() + " " + _date.getMinute() + " " + _date.getHour() + " " + _date.getDayOfMonth() + " " + _date.getMonthValue() + " ? " + _date.getYear();
090    }
091
092    @Override
093    public String getSchedulableId()
094    {
095        return "org.ametys.plugins.repository.lock.UnlockSchedulable";
096    }
097
098    @Override
099    public boolean isRemovable()
100    {
101        return false;
102    }
103
104    @Override
105    public boolean isModifiable()
106    {
107        return false;
108    }
109
110    @Override
111    public boolean isDeactivatable()
112    {
113        return false;
114    }
115
116    @Override
117    public MisfirePolicy getMisfirePolicy()
118    {
119        return MisfirePolicy.FIRE_ONCE;
120    }
121
122    @Override
123    public boolean isVolatile()
124    {
125        return false;
126    }
127
128    @Override
129    public Map<String, Object> getParameterValues()
130    {
131        Map<String, Object> values = new HashMap<>();
132        values.put(UnlockSchedulable.OBJECT_ID_KEY, _objectId);
133        return values;
134    }
135
136    @Override
137    public UserIdentity getUserIdentity()
138    {
139        return _userIdentity;
140    }
141}