/**
* Licensed to JumpMind Inc under one or more contributor
* license agreements. See the NOTICE file distributed
* with this work for additional information regarding
* copyright ownership. JumpMind Inc licenses this file
* to you under the GNU General Public License, version 3.0 (GPLv3)
* (the "License"); you may not use this file except in compliance
* with the License.
*
* You should have received a copy of the GNU General Public License,
* version 3.0 (GPLv3) along with this library; if not, see
* <http://www.gnu.org/licenses/>.
*
* 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.jumpmind.symmetric.model;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.io.filefilter.AndFileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.NotFileFilter;
import org.apache.commons.io.filefilter.OrFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.apache.commons.lang.StringUtils;
import org.jumpmind.symmetric.common.Constants;
public class FileTrigger implements Serializable {
private static final long serialVersionUID = 1L;
private String triggerId;
private String channelId = Constants.CHANNEL_FILESYNC;
private String reloadChannelId = Constants.CHANNEL_FILESYNC_RELOAD;
private String baseDir;
private boolean recurse;
private String includesFiles;
private String excludesFiles;
private boolean syncOnCreate = true;
private boolean syncOnModified = true;
private boolean syncOnDelete = true;
private boolean syncOnCtlFile = false;
private boolean deleteAfterSync = false;
private String beforeCopyScript;
private String afterCopyScript;
private Date createTime = new Date();
private String lastUpdateBy;
private Date lastUpdateTime;
public FileTrigger() {
}
public FileTrigger(String baseDir, boolean recurse, String includes, String excludes) {
this.baseDir = baseDir;
this.recurse = recurse;
this.includesFiles = includes;
this.excludesFiles = excludes;
this.triggerId = "?";
}
public String getTriggerId() {
return triggerId;
}
public void setTriggerId(String triggerId) {
this.triggerId = triggerId;
}
public String getChannelId() {
return channelId;
}
public void setChannelId(String channelId) {
this.channelId = channelId;
}
public String getReloadChannelId() {
return reloadChannelId;
}
public void setReloadChannelId(String reloadChannelId) {
this.reloadChannelId = reloadChannelId;
}
public String getBaseDir() {
return baseDir;
}
public void setBaseDir(String baseDir) {
this.baseDir = baseDir;
}
public boolean isRecurse() {
return recurse;
}
public void setRecurse(boolean recursive) {
this.recurse = recursive;
}
public String getIncludesFiles() {
return includesFiles;
}
public void setIncludesFiles(String includesFiles) {
this.includesFiles = includesFiles;
}
public String getExcludesFiles() {
return excludesFiles;
}
public void setExcludesFiles(String excludesFiles) {
this.excludesFiles = excludesFiles;
}
public boolean isSyncOnCreate() {
return syncOnCreate;
}
public void setSyncOnCreate(boolean syncOnCreate) {
this.syncOnCreate = syncOnCreate;
}
public boolean isSyncOnModified() {
return syncOnModified;
}
public void setSyncOnModified(boolean syncOnModified) {
this.syncOnModified = syncOnModified;
}
public boolean isSyncOnDelete() {
return syncOnDelete;
}
public void setSyncOnDelete(boolean syncOnDelete) {
this.syncOnDelete = syncOnDelete;
}
public boolean isSyncOnCtlFile() {
return syncOnCtlFile;
}
public void setSyncOnCtlFile(boolean syncOnCtlFile) {
this.syncOnCtlFile = syncOnCtlFile;
}
public boolean isDeleteAfterSync() {
return deleteAfterSync;
}
public void setDeleteAfterSync(boolean deleteAfterSync) {
this.deleteAfterSync = deleteAfterSync;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getLastUpdateBy() {
return lastUpdateBy;
}
public void setLastUpdateBy(String lastUpdateBy) {
this.lastUpdateBy = lastUpdateBy;
}
public Date getLastUpdateTime() {
return lastUpdateTime;
}
public void setLastUpdateTime(Date lastUpdateTime) {
this.lastUpdateTime = lastUpdateTime;
}
public IOFileFilter createIOFileFilter() {
String[] includes = StringUtils.isNotBlank(includesFiles) ? includesFiles.split(",") : new String[] {"*"};
String[] excludes = StringUtils.isNotBlank(excludesFiles) ? excludesFiles.split(",") : null;
IOFileFilter filter = new WildcardFileFilter(includes);
if (excludes != null && excludes.length > 0) {
List<IOFileFilter> fileFilters = new ArrayList<IOFileFilter>();
fileFilters.add(filter);
fileFilters.add(new NotFileFilter(new WildcardFileFilter(excludes)));
filter = new AndFileFilter(fileFilters);
}
if (!recurse) {
List<IOFileFilter> fileFilters = new ArrayList<IOFileFilter>();
fileFilters.add(filter);
fileFilters.add(new NotFileFilter(FileFilterUtils.directoryFileFilter()));
filter = new AndFileFilter(fileFilters);
} else {
List<IOFileFilter> fileFilters = new ArrayList<IOFileFilter>();
fileFilters.add(filter);
fileFilters.add(FileFilterUtils.directoryFileFilter());
filter = new OrFileFilter(fileFilters);
}
return filter;
}
public void setAfterCopyScript(String afterCopyScript) {
this.afterCopyScript = afterCopyScript;
}
public String getAfterCopyScript() {
return afterCopyScript;
}
public void setBeforeCopyScript(String beforeCopyScript) {
this.beforeCopyScript = beforeCopyScript;
}
public String getBeforeCopyScript() {
return beforeCopyScript;
}
public File createSourceFile(FileSnapshot snapshot) {
File sourceBaseDir = new File(baseDir);
if (!snapshot.getRelativeDir().equals(".")) {
String sourcePath = snapshot.getRelativeDir() + "/";
sourceBaseDir = new File(sourceBaseDir, sourcePath);
}
return new File(sourceBaseDir, snapshot.getFileName());
}
@Override
public boolean equals(Object obj) {
if (obj instanceof FileTrigger && triggerId != null) {
return triggerId.equals(((FileTrigger) obj).triggerId);
} else {
return super.equals(obj);
}
}
@Override
public int hashCode() {
return triggerId != null ? triggerId.hashCode() : super.hashCode();
}
@Override
public String toString() {
if (triggerId != null) {
return triggerId;
} else {
return super.toString();
}
}
}