📄 shpfileslocker.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 + -