⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shpfileslocker.java

📁 shape file read and write
💻 JAVA
字号:
/**
 * 
 */
package org.geotools.data.shapefile;

import java.net.URL;

class ShpFilesLocker {
    final URL url;
    final FileReader reader;
    final FileWriter writer;
    private Trace trace;

    public ShpFilesLocker( URL url, FileReader reader ) {
        this.url = url;
        this.reader = reader;
        this.writer = null;
        ShapefileDataStoreFactory.LOGGER.fine("Read lock: " + url + " by " + reader.id());
        setTraceException();
    }

    public ShpFilesLocker( URL url, FileWriter writer ) {
        this.url = url;
        this.reader = null;
        this.writer = writer;
        ShapefileDataStoreFactory.LOGGER.fine("Write lock: " + url + " by " + writer.id());
        setTraceException();
    }

    private void setTraceException() {
        String name = Thread.currentThread().getName();
        String type, id;
        if (reader != null) {
            type = "read";
            id = reader.id();
        } else {
            type = "write";
            id = writer.id();
        }
        trace = new Trace("Locking " + url + " for " + type + " by " + id + " in thread " + name);
    }

    /**
     * Returns the Exception that is created when the Locker is created. This is simply a way of
     * determining who created the Locker.
     * 
     * @return the Exception that is created when the Locker is created
     */
    public Exception getTrace() {
        return trace;
    }

    /**
     * Verifies that the url and requestor are the same as the url and the reader or writer of this
     * class. assertions are used so this will do nothing if assertions are not enabled.
     */
    public void compare( URL url2, Object requestor ) {
        URL url = this.url;
        assert (url2 == url) : "Expected: " + url + " but got: " + url2;
        assert (reader == null || requestor == reader) : "Expected the requestor and the reader to be the same object: "
                + reader.id();
        assert (writer == null || requestor == writer) : "Expected the requestor and the writer to be the same object: "
                + writer.id();
    }

    @Override
    public String toString() {
        if (reader != null) {
            return "read on " + url + " by " + reader.id();
        } else {
            return "write on " + url + " by " + writer.id();
        }
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((reader == null) ? 0 : reader.hashCode());
        result = prime * result + ((url == null) ? 0 : url.hashCode());
        result = prime * result + ((writer == null) ? 0 : writer.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;
        final ShpFilesLocker other = (ShpFilesLocker) obj;
        if (reader == null) {
            if (other.reader != null)
                return false;
        } else if (!reader.equals(other.reader))
            return false;
        if (url == null) {
            if (other.url != null)
                return false;
        } else if (!url.equals(other.url))
            return false;
        if (writer == null) {
            if (other.writer != null)
                return false;
        } else if (!writer.equals(other.writer))
            return false;
        return true;
    }

    private static class Trace extends Exception {

        private static final long serialVersionUID = 1L;

        public Trace( String message ) {
            super(message);
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -