com.lapissea.datamanager.domains.db.triggers.FileChange Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jlapisdata Show documentation
Show all versions of jlapisdata Show documentation
An abstraction of folder/zip/jar reading with multi source fallback and lazy caching and SQL emulated mutable file system.
package com.lapissea.datamanager.domains.db.triggers;
import com.lapissea.datamanager.domains.db.FireOnlyTrigger;
import org.h2.api.Trigger;
import java.sql.*;
import static com.lapissea.datamanager.domains.db.SqlUtil.*;
public class FileChange implements FireOnlyTrigger{
private Trigger reeee;
@Override
public void init(Connection con, String schemaName, String triggerName, String tableName, boolean before, int type) throws SQLException{
FireOnlyTrigger[] TRIGGERS={
//INSERT
(conn, oldRow, newRow)->{
fixPath(newRow);
if(!before) connectFile(conn, (int)newRow[0], (String)newRow[2]);
},
//UPDATE
(conn, oldRow, newRow)->{
fixPath(newRow);
Timestamp test=(Timestamp)newRow[3];
newRow[3]=new Timestamp(System.currentTimeMillis());
if(!((String)newRow[2]).equals(oldRow[2])){
disconnectFile(conn, (int)oldRow[0], (String)oldRow[2]);
connectFile(conn, (int)newRow[0], (String)newRow[2]);
}
},
//DELETE
(conn, oldRow, newRow)->{
fixPath(oldRow);
disconnectFile(conn, (int)oldRow[0], (String)oldRow[2]);
}
};
reeee=TRIGGERS[32-Integer.numberOfLeadingZeros(type-1)];
}
@Override
public void fire(Connection conn, Object[] oldRow, Object[] newRow) throws SQLException{
reeee.fire(conn, oldRow, newRow);
}
public static void connectFile(Connection con, int id, String path) throws SQLException{
path=fixPath(path);
String[] parts=path.split("[/|\\\\]");
ResultSet root=con.prepareCall("SELECT top 1 id FROM Folder WHERE path=''").executeQuery();
root.next();
int topFolderId=root.getInt(1);
StringBuilder folderPath=new StringBuilder();
for(int i=0;i