package com.revolsys.io.connection;
import java.io.File;
import java.util.Map;
import com.revolsys.collection.map.LinkedHashMapEx;
import com.revolsys.collection.map.MapEx;
import com.revolsys.datatype.DataType;
import com.revolsys.io.FileUtil;
import com.revolsys.properties.BaseObjectWithProperties;
import com.revolsys.spring.resource.Resource;
import com.revolsys.util.Property;
public abstract class AbstractConnection<C extends Connection, R extends ConnectionRegistry<C>>
extends BaseObjectWithProperties implements Connection {
private MapEx config = new LinkedHashMapEx();
private String name;
private R registry;
private File connectionFile;
public AbstractConnection(final R registry, final String name) {
this.registry = registry;
this.name = name;
}
public AbstractConnection(final R registry, final String resourceName,
final Map<String, ? extends Object> config) {
this.config.putAll(config);
this.registry = registry;
setProperties(config);
if (!Property.hasValue(this.name)) {
this.name = FileUtil.getBaseName(resourceName);
}
}
@Override
public void deleteConnection() {
if (this.registry != null) {
this.registry.removeConnection(this);
}
this.config = null;
this.name = null;
this.registry = null;
}
@Override
public boolean equals(final Object obj) {
if (obj instanceof AbstractConnection) {
final AbstractConnection<?, ?> connection = (AbstractConnection<?, ?>)obj;
if (this.registry == connection.getRegistry()) {
if (DataType.equal(this.name, connection.getName())) {
return true;
}
}
}
return false;
}
public MapEx getConfig() {
final MapEx config = new LinkedHashMapEx(this.config);
config.putAll(getProperties());
return config;
}
@Override
public File getConnectionFile() {
return this.connectionFile;
}
@Override
public String getName() {
return this.name;
}
@Override
public R getRegistry() {
return this.registry;
}
@Override
public int hashCode() {
if (this.name == null) {
return 0;
} else {
return this.name.hashCode();
}
}
@Override
public boolean isReadOnly() {
if (this.registry == null) {
return true;
} else {
return this.registry.isReadOnly();
}
}
public void setConnectionFile(final File connectionFile) {
this.connectionFile = connectionFile;
}
public void setName(final String name) {
this.name = name;
}
@Override
public MapEx toMap() {
return this.config;
}
@Override
public String toString() {
return this.name;
}
@Override
public void writeToFile(final Object target) {
final Resource resource = Resource.getResource(target);
try {
this.connectionFile = resource.getFile();
} catch (final Throwable e) {
}
Connection.super.writeToFile(resource);
}
}