Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
V
vospacebackend
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Sara Bertocco
vospacebackend
Commits
e0606bf1
Commit
e0606bf1
authored
8 years ago
by
Sara Bertocco
Browse files
Options
Downloads
Patches
Plain Diff
New working version after Victoria trip - FileRecord in place of HashMap and DBConnectionMng usage
parent
8d84bca4
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/main/java/it/inaf/oats/vospacebackend/implementation/VOSpaceBackendMetadata.java
+295
-0
295 additions, 0 deletions
...vospacebackend/implementation/VOSpaceBackendMetadata.java
with
295 additions
and
0 deletions
src/main/java/it/inaf/oats/vospacebackend/implementation/VOSpaceBackendMetadata.java
0 → 100644
+
295
−
0
View file @
e0606bf1
/**_____________________________________________________________________________
*
* OATS - INAF
* Osservatorio Astronomico di Tireste - Istituto Nazionale di Astrofisica
* Astronomical Observatory of Trieste - National Institute for Astrophysics
* ____________________________________________________________________________
*
* Copyright (C) 20016 Istituto Nazionale di Astrofisica
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* _____________________________________________________________________________
**/
package
it.inaf.oats.vospacebackend.implementation
;
import
java.sql.Connection
;
import
java.sql.PreparedStatement
;
import
java.sql.SQLException
;
import
java.sql.ResultSet
;
import
org.apache.log4j.Logger
;
import
it.inaf.oats.vospacebackend.exceptions.ExceptionMessage
;
import
it.inaf.oats.vospacebackend.exceptions.VOSpaceBackendException
;
/*
* FileRecord myParams is used as input record
* HashMap myResult is used as output record
* @author bertocco
*/
public
class
VOSpaceBackendMetadata
{
/**
* This class has two attributes:
* <p>
* Logger to perform logging operations
* <p>
* HashMap which will contain the metadata set identifying a stored/to store file
* This hashmap fields will are:
* boolean ifSuccessfull if db query is successful or not
* String "original_file_name"
* String "stored_file_name"
* String "md5_checksum"
* String "relative_path"
*/
protected
Logger
log
;
protected
FileRecord
myResult
;
/**
* Create the log and the HashMap that will be used to store the database
* query result to return. The field "ifSuccessful" will contain a boolean
* value true if operation successfully executed and false if not.
* Other fields will be added containing the query result set fields,
* depending on the executed query.
*/
public
VOSpaceBackendMetadata
()
{
log
=
Logger
.
getLogger
(
VOSpaceBackendMetadata
.
class
);
myResult
=
new
FileRecord
();
myResult
.
setIfOperationSuccessful
(
false
);
}
/**
*
* @param fileName Original file name (provided by the client) of the file to store
* @param stored_f_name name used to store the file in the file system
* @param md5Checksum MD5 checksum of the file to store
* @param relativePath relative path (after the root) of the file to store
* @return boolean true if operation successful false if not
* @throws VOSpaceBackendException
*/
public
FileRecord
setFile
(
String
stored_f_name
,
String
md5Checksum
,
String
relativePath
)
throws
VOSpaceBackendException
,
SQLException
{
String
myOp
=
"SET"
;
String
myQuery
=
"INSERT INTO cadctest.StoredFiles "
+
"(stored_file_name, md5_checksum, relative_path)"
+
" VALUES (?, ?, ?);"
;
FileRecord
myParams
=
new
FileRecord
();
myParams
.
setStoredfileName
(
stored_f_name
);
myParams
.
setMD5Checksum
(
md5Checksum
);
myParams
.
setRelativePath
(
relativePath
);
return
excuteQuery
(
myOp
,
myQuery
,
myParams
);
}
public
FileRecord
getFile
(
String
orig_f_name
)
throws
VOSpaceBackendException
,
SQLException
{
String
myOp
=
"GET"
;
String
myQuery
=
"SELECT * FROM cadctest.StoredFiles "
+
"WHERE original_file_name=?"
;
// Da rifare: ricevo o il nodeid e con questo devo beccarmi il file
// prima becco lo storage fname nella tabella node-storage e con quello
// becco il file nella tabella storedFiles
FileRecord
myParams
=
new
FileRecord
();
myParams
.
setStoredfileName
(
orig_f_name
);
return
excuteQuery
(
myOp
,
myQuery
,
myParams
);
}
public
FileRecord
getRequest
(
String
nodeID
)
throws
VOSpaceBackendException
,
SQLException
{
String
myOp
=
"GET_REQ"
;
String
myQuery
=
"SELECT * FROM cadctest.StoredFileAndNode "
+
"WHERE nodeID=?"
;
// Da risistemare, non so neanche piu` se la uso ancora
FileRecord
myParams
=
new
FileRecord
();
myParams
.
setNodeId
(
nodeID
);
return
excuteQuery
(
myOp
,
myQuery
,
myParams
);
}
public
FileRecord
setRequest
(
String
stored_f_name
,
String
nodeID
)
throws
VOSpaceBackendException
,
SQLException
{
String
myOp
=
"SET_REQ"
;
String
myQuery
=
"INSERT INTO cadctest.StoredFileAndNode "
+
"(nodeID, storedFileID)"
+
" VALUES (?, ?);"
;
log
.
debug
(
"query : "
+
myQuery
);
log
.
debug
(
"parameters: nodeID = "
+
nodeID
+
" storedFileID = "
+
stored_f_name
);
FileRecord
myParams
=
new
FileRecord
();
log
.
debug
(
"File record created. Its value is:"
);
log
.
debug
(
myParams
);
myParams
.
setStoredfileName
(
stored_f_name
);
myParams
.
setNodeId
(
nodeID
);
log
.
debug
(
"Going to execute query with FileRecord = "
+
myParams
.
toString
());
return
excuteQuery
(
myOp
,
myQuery
,
myParams
);
}
private
FileRecord
excuteQuery
(
String
operation
,
String
query
,
FileRecord
fileToManage
)
throws
VOSpaceBackendException
,
SQLException
{
PreparedStatement
preparedStatementInsert
=
null
;
Connection
dbConnection
=
null
;
try
{
dbConnection
=
DBConnectionMng
.
getDBConnection
();
log
.
debug
(
"Database connection get"
);
}
catch
(
SQLException
e
)
{
log
.
fatal
(
e
);
ExceptionMessage
exMsg
=
new
ExceptionMessage
();
throw
new
VOSpaceBackendException
(
ExceptionMessage
.
getMessage
(
"UNABLE_TO_GET_DB_CONNECTION"
));
}
try
{
dbConnection
.
setAutoCommit
(
false
);
log
.
debug
(
"Autocommit set false"
);
}
catch
(
SQLException
e
)
{
log
.
fatal
(
e
);
ExceptionMessage
exMsg
=
new
ExceptionMessage
();
throw
new
VOSpaceBackendException
(
ExceptionMessage
.
getMessage
(
"ERROR_DISABLING_DB_AUTOCOMMIT"
));
}
// Starts JDBC Transaction
PreparedStatement
preparedQuery
=
null
;
// boolean query result (success or not)
log
.
debug
(
"Input file record: "
+
fileToManage
.
toString
());
boolean
ifQuerySuccessful
=
false
;
try
{
//HashMap fileToManageFields = fileToManage.getFileRecord();
ResultSet
rs
=
null
;
int
rowCounter
=
0
;
switch
(
operation
)
{
case
"SET"
:
log
.
debug
(
"Going to prepare query for SET operation"
);
preparedQuery
=
dbConnection
.
prepareStatement
(
query
);
preparedQuery
.
setString
(
1
,
fileToManage
.
getStoredfileName
());
preparedQuery
.
setString
(
2
,
fileToManage
.
getMD5Checksum
());
preparedQuery
.
setString
(
3
,
fileToManage
.
getRelativePath
());
log
.
debug
(
"Going to execute query"
);
preparedQuery
.
executeUpdate
();
log
.
debug
(
"Query executed"
);
dbConnection
.
commit
();
log
.
debug
(
"Query committed"
);
ifQuerySuccessful
=
true
;
break
;
case
"GET"
:
preparedQuery
=
dbConnection
.
prepareStatement
(
query
);
preparedQuery
.
setString
(
1
,
(
String
)
fileToManage
.
getNodeId
());
rs
=
preparedQuery
.
executeQuery
();
rowCounter
=
0
;
while
(
rs
.
next
())
{
rowCounter
=
rowCounter
+
1
;
myResult
.
setStoredfileName
(
rs
.
getString
(
"stored_file_name"
));
myResult
.
setMD5Checksum
(
rs
.
getString
(
"md5_checksum"
));
// Sistemare questa faccenda del nome file originale
// myResult.put("original_file_name", rs.getString("original_file_name"));
myResult
.
setRelativePath
(
rs
.
getString
(
"relative_path"
));
}
if
(
rowCounter
==
0
)
{
log
.
debug
(
"GET: query successfully executed. File not found"
);
ifQuerySuccessful
=
false
;
}
else
{
log
.
debug
(
"GET: query successfully executed. File found"
);
ifQuerySuccessful
=
true
;
}
break
;
case
"GET_REQ"
:
preparedQuery
=
dbConnection
.
prepareStatement
(
query
);
preparedQuery
.
setString
(
1
,
fileToManage
.
getNodeId
());
rs
=
preparedQuery
.
executeQuery
();
rowCounter
=
0
;
while
(
rs
.
next
())
{
rowCounter
=
rowCounter
+
1
;
myResult
.
setStoredfileName
(
rs
.
getString
(
"stored_file_name"
));
myResult
.
setNodeId
(
rs
.
getString
(
"nodeID"
));
}
if
(
rowCounter
==
0
)
{
log
.
debug
(
"GET_REQ: query NOT executed. File metadata not found in backend"
);
ifQuerySuccessful
=
false
;
}
else
{
log
.
debug
(
"GET_REQ: query successfully executed. File found in the backend"
);
ifQuerySuccessful
=
true
;
}
break
;
case
"SET_REQ"
:
log
.
debug
(
"Going to prepare query for SET operation"
);
preparedQuery
=
dbConnection
.
prepareStatement
(
query
);
preparedQuery
.
setString
(
1
,
fileToManage
.
getNodeId
());
preparedQuery
.
setString
(
2
,
fileToManage
.
getStoredfileName
());
log
.
debug
(
"Parameters : nodeID = "
+
fileToManage
.
getNodeId
()
+
" StoredfileName = "
+
fileToManage
.
getStoredfileName
());
log
.
debug
(
"Going to execute query"
);
preparedQuery
.
executeUpdate
();
log
.
debug
(
"Query executed"
);
dbConnection
.
commit
();
log
.
debug
(
"Query committed"
);
ifQuerySuccessful
=
true
;
break
;
default
:
ifQuerySuccessful
=
false
;
ExceptionMessage
exMsg
=
new
ExceptionMessage
();
log
.
fatal
(
ExceptionMessage
.
getMessage
(
"DB_OPERATION_NOT_RECOGNIZED"
));
throw
new
VOSpaceBackendException
(
ExceptionMessage
.
getMessage
(
"DB_OPERATION_NOT_RECOGNIZED"
));
}
dbConnection
.
setAutoCommit
(
true
);
dbConnection
.
close
();
}
catch
(
SQLException
e
)
{
log
.
error
(
"SQLException exception executing SET file"
+
e
.
getMessage
());
dbConnection
.
rollback
();
}
finally
{
if
(
preparedQuery
!=
null
)
{
preparedQuery
.
close
();
}
if
(
dbConnection
!=
null
)
{
dbConnection
.
close
();
}
}
myResult
.
setIfOperationSuccessful
(
ifQuerySuccessful
);
log
.
debug
(
"Returning "
+
operation
+
" result:\n"
+
myResult
.
toString
());
return
myResult
;
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment