Skip to content

Commit e40b1e9

Browse files
authored
Merge pull request #9 from fugerit-org/feature/issue_8_jvsf
Feature/issue 8 jvsf
2 parents ee78df5 + 8a8d05b commit e40b1e9

File tree

17 files changed

+190
-10
lines changed

17 files changed

+190
-10
lines changed

docgen/parameters.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"title" : "Jupiter (Fugerit Core A.P.I.)",
33
"name": "Jupiter",
4-
"version" : "0.8.7",
5-
"date" : "21/01/2023",
4+
"version" : "0.8.8",
5+
"date" : "22/01/2023",
66
"organization" : {
77
"name" : "Fugerit Org",
88
"url" : "https://www.fugerit.org"

docgen/release-notes.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
0.8.7 (2023-01-21)
1+
0.8.8 (2023-01-22)
2+
------------------
3+
+ Rename JFile implementation
4+
5+
0.8.7 (2023-01-21)
26
------------------
37
+ Refactoring of jvfs as a new maven module (fj-core-jvfs)
48
* Refcatoring of test classes to module fj-test-helper8

fj-core-jvfs/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.fugerit.java</groupId>
99
<artifactId>fj-lib</artifactId>
10-
<version>0.8.7</version>
10+
<version>0.8.8</version>
1111
</parent>
1212

1313
<name>fj-core-jvfs</name>

fj-core-jvfs/src/main/java/org/fugerit/java/core/jvfs/JFile.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ public interface JFile {
6161

6262
public void setLastModified(long time) throws IOException;
6363

64+
public boolean rename( JFile newFile ) throws IOException;
65+
6466
public String describe();
6567

6668
}

fj-core-jvfs/src/main/java/org/fugerit/java/core/jvfs/db/DaogenJFileDB.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,5 +91,10 @@ public ModelDbJvfsFile getDbFile() {
9191
public JMountDaogenDB getjMount() {
9292
return jMount;
9393
}
94+
95+
@Override
96+
public boolean rename(JFile newFile) throws IOException {
97+
return this.jMount.rename(this, newFile);
98+
}
9499

95100
}

fj-core-jvfs/src/main/java/org/fugerit/java/core/jvfs/db/JMountDaogenDB.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import java.io.OutputStream;
88
import java.io.Serializable;
99
import java.math.BigDecimal;
10-
import java.util.Date;
10+
import java.sql.Timestamp;
1111
import java.util.stream.Collectors;
1212

1313
import javax.sql.DataSource;
@@ -20,6 +20,7 @@
2020
import org.fugerit.java.core.db.daogen.ByteArrayDataHandler;
2121
import org.fugerit.java.core.db.daogen.CloseableDAOContext;
2222
import org.fugerit.java.core.db.daogen.CloseableDAOContextSC;
23+
import org.fugerit.java.core.db.helpers.TimeHelper;
2324
import org.fugerit.java.core.jvfs.JFile;
2425
import org.fugerit.java.core.jvfs.JMount;
2526
import org.fugerit.java.core.jvfs.JVFS;
@@ -179,7 +180,7 @@ public boolean updateOrCreate( DaogenJFileDB file, byte[] data ) throws IOExcep
179180
PathDescriptor descriptor = JFileUtils.pathDescriptor( file.getPath() );
180181
ModelDbJvfsFile model = this.facade.loadById( context, descriptor.getName(), this.getParentPath(descriptor) );
181182
boolean create = ( model == null );
182-
Date currentTime = new Date();
183+
Timestamp currentTime = TimeHelper.nowTimestamp();
183184
if ( create ) {
184185
model = new HelperDbJvfsFile();
185186
model.setFileName( descriptor.getName() );
@@ -188,6 +189,7 @@ public boolean updateOrCreate( DaogenJFileDB file, byte[] data ) throws IOExcep
188189
file.setDbFile( model );
189190
}
190191
model.setFileProps( getFileProps( file ) );
192+
model.setUpdateTime( currentTime );
191193
if ( data != null ) {
192194
model.setFileSize( new BigDecimal( data.length ) );
193195
model.setFileContent( ByteArrayDataHandler.newHandlerByte( data ) );
@@ -233,6 +235,22 @@ public boolean mkdir( DaogenJFileDB file, boolean recurse ) throws IOException {
233235
return created;
234236
}
235237

238+
239+
public boolean rename( DaogenJFileDB file, JFile newFile ) throws IOException {
240+
boolean renamed = false;
241+
if ( ( file.isDirectory() && newFile.isDirectory() ) || ( file.isFile() && newFile.isFile() ) ) {
242+
try ( CloseableDAOContext context = this.newContext() ) {
243+
int res = this.facade.rename( context, file, newFile );
244+
renamed = (res > 0);
245+
} catch (Exception e) {
246+
throw new IOException( e );
247+
}
248+
} else {
249+
throw new IOException( "Cannot rename to different file type "+file.describe()+" -> "+newFile.describe() );
250+
}
251+
return renamed;
252+
}
253+
236254
protected CloseableDAOContext newContext() throws DAOException {
237255
return new CloseableDAOContextSC( this.cf.getConnection() ) ;
238256
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
package org.fugerit.java.core.jvfs.db.daogen.def.facade;
22

3+
import org.fugerit.java.core.db.dao.DAOException;
4+
import org.fugerit.java.core.db.daogen.DAOContext;
5+
import org.fugerit.java.core.jvfs.JFile;
6+
import org.fugerit.java.core.jvfs.db.DaogenJFileDB;
7+
38
/**
49
* EntityDbJvfsFileFacade, version : 1.0.0
510
*
611
* author: fugerit
712
*/
813
public interface EntityDbJvfsFileFacade extends EntityDbJvfsFileFacadeHelper {
914

15+
int rename( DAOContext context, DaogenJFileDB file, JFile newFile ) throws DAOException;
16+
1017
// [HELPER/IMPL MODEL] this class is a stub and can be modified as you see fit (it will not been overwritten)
1118
}

fj-core-jvfs/src/main/java/org/fugerit/java/core/jvfs/db/impl/facade/data/DataEntityDbJvfsFileFacade.java

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
package org.fugerit.java.core.jvfs.db.impl.facade.data;
22

3+
import java.sql.Connection;
4+
5+
import org.fugerit.java.core.db.dao.DAOException;
6+
import org.fugerit.java.core.db.dao.DAOUtilsNG;
7+
import org.fugerit.java.core.db.dao.LoadResultNG;
8+
import org.fugerit.java.core.db.daogen.DAOContext;
9+
import org.fugerit.java.core.db.helpers.TimeHelper;
10+
import org.fugerit.java.core.jvfs.JFile;
11+
import org.fugerit.java.core.jvfs.db.DaogenJFileDB;
312
import org.fugerit.java.core.jvfs.db.daogen.def.facade.EntityDbJvfsFileFacade;
13+
import org.fugerit.java.core.jvfs.db.daogen.model.ModelDbJvfsFile;
14+
import org.fugerit.java.core.jvfs.db.daogen.res.DbJvfsFileRSE;
15+
import org.fugerit.java.core.jvfs.helpers.JFileUtils;
16+
import org.fugerit.java.core.jvfs.helpers.PathDescriptor;
417
import org.fugerit.java.core.lang.helpers.StringUtils;
518
import org.fugerit.java.core.log.LogFacade;
619

@@ -11,6 +24,68 @@
1124
*/
1225
public class DataEntityDbJvfsFileFacade extends DataEntityDbJvfsFileFacadeHelper implements EntityDbJvfsFileFacade {
1326

27+
@Override
28+
public int rename( DAOContext context, DaogenJFileDB file, JFile newFile ) throws DAOException {
29+
int res = 0;
30+
try {
31+
if ( file.isRoot() ) {
32+
throw new DAOException( "Cannot rename root : "+file );
33+
} else {
34+
String renameFileSql = StringUtils.concat( " " , "UPDATE ",
35+
this.getTableName(), "SET",
36+
COL_FILE_NAME, "=?,",
37+
COL_PARENT_PATH,"=?,",
38+
COL_UPDATE_TIME, "=?",
39+
"WHERE",
40+
COL_FILE_NAME, "=? AND",
41+
COL_PARENT_PATH,"=?" );
42+
PathDescriptor descriptor1 = JFileUtils.pathDescriptor( file.getPath() );
43+
PathDescriptor descriptor2 = JFileUtils.pathDescriptor( newFile.getPath() );
44+
if ( file.isDirectory() ) {
45+
Connection conn = context.getConnection();
46+
boolean resetAutocommit = false;
47+
if ( conn.getAutoCommit() ) {
48+
//conn.setAutoCommit( false );
49+
//resetAutocommit = true;
50+
}
51+
try {
52+
res = DAOUtilsNG.update( context.getConnection() , renameFileSql ,
53+
descriptor2.getName(), descriptor2.getParentPath(), TimeHelper.nowTimestamp(), descriptor1.getName(), descriptor1.getParentPath() );
54+
if ( res > 0 ) {
55+
String searchDirSql = StringUtils.concat( " " ,
56+
"SELECT * FROM", this.getTableName(), "WHERE", COL_PARENT_PATH, "LIKE ?");
57+
int resDir = 0;
58+
try ( LoadResultNG<ModelDbJvfsFile> loader = DAOUtilsNG.extraAllFields( conn , searchDirSql, DbJvfsFileRSE.DEFAULT, file.getPath()+"%") ) {
59+
while ( loader.hasNext() ) {
60+
ModelDbJvfsFile currentKid = loader.next();
61+
String newParentPath = currentKid.getParentPath().replaceFirst( file.getPath(), newFile.getPath() );
62+
resDir+= DAOUtilsNG.update( context.getConnection() , renameFileSql ,
63+
currentKid.getFileName(), newParentPath, TimeHelper.nowTimestamp(), currentKid.getFileName(), currentKid.getParentPath() );
64+
}
65+
}
66+
logger.debug( "result file {}, dir {}, found {}", res, resDir );
67+
res+= resDir;
68+
}
69+
conn.commit();
70+
} catch (Exception e) {
71+
conn.rollback();
72+
throw e;
73+
} finally {
74+
if ( resetAutocommit ) {
75+
conn.setAutoCommit( true );
76+
}
77+
}
78+
} else {
79+
res = DAOUtilsNG.update( context.getConnection() , renameFileSql ,
80+
descriptor2.getName(), descriptor2.getParentPath(), TimeHelper.nowTimestamp(), descriptor1.getName(), descriptor1.getParentPath() );
81+
}
82+
}
83+
} catch (Exception e) {
84+
throw new DAOException( e );
85+
}
86+
return res;
87+
}
88+
1489
private static final long serialVersionUID = 504022259276L;
1590

1691
public static final String DEFAULT_TABLE_NAME = "DB_JVFS_FILE";

fj-core-jvfs/src/main/java/org/fugerit/java/core/jvfs/file/RealJFile.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,22 @@
1111
import org.fugerit.java.core.jvfs.JFile;
1212
import org.fugerit.java.core.jvfs.JVFS;
1313
import org.fugerit.java.core.jvfs.helpers.AbstractJFile;
14+
import org.fugerit.java.core.jvfs.helpers.JFileUtils;
1415

1516
public class RealJFile extends AbstractJFile {
1617

18+
@Override
19+
public boolean rename(JFile newFile) throws IOException {
20+
File newF = null;
21+
newFile = JFileUtils.unwrapJFile( newFile );
22+
if ( newFile instanceof RealJFile ) {
23+
newF = ((RealJFile)newFile).file;
24+
} else {
25+
throw new IOException( "Cannot rename to : "+newFile );
26+
}
27+
return this.file.renameTo( newF );
28+
}
29+
1730
@Override
1831
public String toString() {
1932
return super.toString()+"[file:"+this.file+"]";

fj-core-jvfs/src/main/java/org/fugerit/java/core/jvfs/helpers/JFileUtils.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.fugerit.java.core.jvfs.JFile;
44
import org.fugerit.java.core.lang.helpers.StringUtils;
5+
import org.fugerit.java.core.lang.helpers.Wrapper;
56
import org.slf4j.Logger;
67
import org.slf4j.LoggerFactory;
78

@@ -54,4 +55,12 @@ public static PathDescriptor pathDescriptor( String path ) {
5455
return new PathDescriptor(parentPath, name);
5556
}
5657

58+
@SuppressWarnings("unchecked")
59+
public static JFile unwrapJFile( JFile jFile ) {
60+
while ( jFile instanceof Wrapper ) {
61+
jFile = ((Wrapper<JFile>)jFile).unwrap();
62+
}
63+
return jFile;
64+
}
65+
5766
}

0 commit comments

Comments
 (0)