package com.revolsys.io.file; import java.io.File; import com.revolsys.collection.map.MapEx; import com.revolsys.io.FileUtil; import com.revolsys.io.connection.AbstractConnectionRegistry; import com.revolsys.io.connection.ConnectionRegistry; import com.revolsys.io.connection.ConnectionRegistryManager; import com.revolsys.logging.Logs; import com.revolsys.record.io.format.json.Json; import com.revolsys.spring.resource.Resource; public class FolderConnectionRegistry extends AbstractConnectionRegistry<FolderConnection> { private static final ThreadLocal<FolderConnectionRegistry> threadRegistry = new ThreadLocal<>(); public static FolderConnectionRegistry getForThread() { return FolderConnectionRegistry.threadRegistry.get(); } public static FolderConnectionRegistry setForThread(final FolderConnectionRegistry registry) { final FolderConnectionRegistry oldValue = getForThread(); FolderConnectionRegistry.threadRegistry.set(registry); return oldValue; } public FolderConnectionRegistry( final ConnectionRegistryManager<? extends ConnectionRegistry<FolderConnection>> connectionManager, final String name, final boolean visible, final boolean readOnly, final Resource directoryResource) { super(connectionManager, name, visible, readOnly, directoryResource, "folderConnection"); } public FolderConnectionRegistry(final FileConnectionManager connectionManager, final String name) { this(connectionManager, name, true, false, null); } public FolderConnectionRegistry(final FileConnectionManager connectionManager, final String name, final Resource directory, final boolean readOnly) { this(connectionManager, name, true, readOnly, directory); } public FolderConnectionRegistry(final String name) { this(null, name, true, false, null); } public FolderConnectionRegistry(final String name, final Resource resource, final boolean readOnly) { this(null, name, resource, readOnly); } public void addConnection(final FolderConnection connection) { final String name = connection.getName(); addConnection(name, connection); if (!isReadOnly()) { final File file = getConnectionFile(connection, true); if (file != null && (!file.exists() || file.canWrite())) { connection.writeToFile(file); } } } public FolderConnection addConnection(String name, final File file) { name = getUniqueName(name); final FolderConnection connection = new FolderConnection(this, name, file); addConnection(connection); return connection; } @Override public String getIconName() { return "folder:link"; } @Override protected FolderConnection loadConnection(final File connectionFile, final boolean importConnection) { try { final MapEx config = Json.toMap(connectionFile); final String name = getConnectionName(config, connectionFile, importConnection); final String fileName = (String)config.get("file"); final File file = FileUtil.getFile(fileName); final FolderConnection connection = new FolderConnection(this, name, file); if (!importConnection) { connection.setConnectionFile(connectionFile); } addConnection(connection); return connection; } catch (final Throwable e) { Logs.error(this, "Error creating folder connection from: " + connectionFile, e); return null; } } }