org.jumpmind.symmetric.model.FileSnapshot.java Source code

Java tutorial

Introduction

Here is the source code for org.jumpmind.symmetric.model.FileSnapshot.java

Source

/**
 * 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.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.jumpmind.exception.IoException;

public class FileSnapshot implements Serializable {

    private static final long serialVersionUID = 1L;

    public enum LastEventType {
        CREATE("C"), MODIFY("M"), DELETE("D");
        private LastEventType(String code) {
            this.code = code;
        }

        private String code;

        public String getCode() {
            return this.code;
        }

        public static LastEventType fromCode(String code) {
            if ("C".equals(code)) {
                return CREATE;
            } else if ("M".equals(code)) {
                return MODIFY;
            } else if ("D".equals(code)) {
                return DELETE;

            } else {
                return null;
            }
        }
    };

    private String triggerId;
    private String routerId;
    private String relativeDir;
    private String fileName;
    private LastEventType lastEventType;
    private String channelId;
    private String reloadChannelId;
    private long crc32Checksum;
    private long oldCrc32Checksum;
    private long fileSize;
    private long fileModifiedTime;
    private Date createTime = new Date();
    private String lastUpdateBy;
    private Date lastUpdateTime;

    public FileSnapshot() {
    }

    public FileSnapshot(FileSnapshot copy) {
        this.triggerId = copy.triggerId;
        this.routerId = copy.routerId;
        this.relativeDir = copy.relativeDir;
        this.fileName = copy.fileName;
        this.lastEventType = copy.lastEventType;
        this.crc32Checksum = copy.crc32Checksum;
        this.fileSize = copy.fileSize;
        this.fileModifiedTime = copy.fileModifiedTime;
        this.createTime = copy.createTime;
        this.lastUpdateBy = copy.lastUpdateBy;
        this.lastUpdateTime = copy.lastUpdateTime;
        this.channelId = copy.channelId;
        this.reloadChannelId = copy.getReloadChannelId();
    }

    public FileSnapshot(FileTriggerRouter fileTriggerRouter, File file, LastEventType lastEventType) {
        boolean isDelete = lastEventType == LastEventType.DELETE;
        this.triggerId = fileTriggerRouter.getFileTrigger().getTriggerId();
        this.channelId = fileTriggerRouter.getFileTrigger().getChannelId();
        this.reloadChannelId = fileTriggerRouter.getFileTrigger().getReloadChannelId();
        this.routerId = fileTriggerRouter.getRouter().getRouterId();
        this.lastEventType = lastEventType;
        this.lastUpdateTime = new Date();
        this.fileName = file.getName();
        this.relativeDir = file.getPath().replace('\\', '/');
        String baseDir = fileTriggerRouter.getFileTrigger().getBaseDir().replace('\\', '/');
        if (this.relativeDir.startsWith(baseDir)) {
            this.relativeDir = this.relativeDir.substring(baseDir.length());
        }

        if (this.relativeDir.endsWith(fileName)) {
            this.relativeDir = this.relativeDir.substring(0, this.relativeDir.lastIndexOf(fileName));
        }

        if (this.relativeDir.startsWith("/")) {
            this.relativeDir = this.relativeDir.substring(1);
        }

        if (this.relativeDir.endsWith("/")) {
            this.relativeDir = this.relativeDir.substring(0, this.relativeDir.length() - 1);
        }

        if (StringUtils.isBlank(relativeDir)) {
            this.relativeDir = ".";
        }

        this.fileSize = isDelete ? 0 : file.length();
        this.fileModifiedTime = isDelete ? 0 : file.lastModified();

        if (file.isFile() && !isDelete) {
            try {
                this.crc32Checksum = FileUtils.checksumCRC32(file);
            } catch (FileNotFoundException ex) {
                this.lastEventType = LastEventType.DELETE;
                this.fileSize = 0;
                this.fileModifiedTime = 0;
            } catch (IOException ex) {
                throw new IoException(ex);
            }
        } else {
            this.crc32Checksum = -1;
        }

    }

    public String getTriggerId() {
        return triggerId;
    }

    public void setTriggerId(String triggerId) {
        this.triggerId = triggerId;
    }

    public String getRouterId() {
        return routerId;
    }

    public void setRouterId(String routerId) {
        this.routerId = routerId;
    }

    public void setChannelId(String channelId) {
        this.channelId = channelId;
    }

    public String getChannelId() {
        return channelId;
    }

    public void setReloadChannelId(String reloadChannelId) {
        this.reloadChannelId = reloadChannelId;
    }

    public String getReloadChannelId() {
        return reloadChannelId;
    }

    public String getRelativeDir() {
        return relativeDir;
    }

    public void setRelativeDir(String relativeDir) {
        this.relativeDir = relativeDir;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public LastEventType getLastEventType() {
        return lastEventType;
    }

    public void setLastEventType(LastEventType lastEventType) {
        this.lastEventType = lastEventType;
        if (lastEventType == LastEventType.DELETE) {
            this.fileModifiedTime = 0;
            this.fileSize = 0;
        }
    }

    public long getCrc32Checksum() {
        return crc32Checksum;
    }

    public void setCrc32Checksum(long crc32Checksum) {
        this.crc32Checksum = crc32Checksum;
    }

    public long getOldCrc32Checksum() {
        return oldCrc32Checksum;
    }

    public void setOldCrc32Checksum(long oldCrc32Checksum) {
        this.oldCrc32Checksum = oldCrc32Checksum;
    }

    public long getFileSize() {
        return fileSize;
    }

    public void setFileSize(long fileSize) {
        this.fileSize = fileSize;
    }

    public long getFileModifiedTime() {
        return fileModifiedTime;
    }

    public void setFileModifiedTime(long fileModifiedTime) {
        this.fileModifiedTime = fileModifiedTime;
    }

    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 boolean sameFile(FileSnapshot file) {
        return StringUtils.equals(fileName, file.fileName) && StringUtils.equals(relativeDir, file.relativeDir);
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + (int) (crc32Checksum ^ (crc32Checksum >>> 32));
        result = prime * result + (int) (fileModifiedTime ^ (fileModifiedTime >>> 32));
        result = prime * result + ((fileName == null) ? 0 : fileName.hashCode());
        result = prime * result + ((relativeDir == null) ? 0 : relativeDir.hashCode());
        result = prime * result + (int) (fileSize ^ (fileSize >>> 32));
        result = prime * result + ((lastEventType == null) ? 0 : lastEventType.hashCode());
        result = prime * result + ((triggerId == null) ? 0 : triggerId.hashCode());
        result = prime * result + ((routerId == null) ? 0 : routerId.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        FileSnapshot other = (FileSnapshot) obj;
        if (crc32Checksum != other.crc32Checksum)
            return false;
        if (fileModifiedTime != other.fileModifiedTime) {
            return false;
        }
        if (fileName == null) {
            if (other.fileName != null)
                return false;
        } else if (!fileName.equals(other.fileName))
            return false;
        if (relativeDir == null) {
            if (other.relativeDir != null)
                return false;
        } else if (!relativeDir.equals(other.relativeDir))
            return false;
        if (fileSize != other.fileSize)
            return false;
        if (lastEventType != other.lastEventType)
            return false;
        if (triggerId == null) {
            if (other.triggerId != null)
                return false;
        } else if (!triggerId.equals(other.triggerId))
            return false;
        if (routerId == null) {
            if (other.routerId != null)
                return false;
        } else if (!routerId.equals(other.routerId))
            return false;
        return true;
    }

}