Compare commits

..

15 commits

13 changed files with 375 additions and 138 deletions

9
Jenkinsfile vendored
View file

@ -27,9 +27,14 @@ node {
} }
stage('Deploy') { stage('Deploy') {
input message: 'Deploy?', submitter: 'ziver' timeout(time:2, unit:'HOURS') {
input message: 'Deploy?', submitter: 'ziver'
}
node { node {
sh 'ant deploy' withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: '46f1d99b-2037-47b9-a7b7-57a1066337fc',
usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
sh 'ant -Dtomcat.user=${USERNAME} -Dtomcat.pass=${PASSWORD} deploy'
}
} }
} }

View file

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Zallery</display-name>
<welcome-file-list>
<welcome-file>gallery</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Zallery</servlet-name>
<servlet-class>zall.Zallery</servlet-class>
<init-param>
<param-name>WEBSITE_NAME</param-name>
<param-value>Koc.se Gallery</param-value>
</init-param>
<init-param>
<param-name>WEBSITE_URL</param-name>
<param-value>http://koc.se/Zallery/</param-value>
</init-param>
<init-param>
<param-name>SMTP_HOST</param-name>
<param-value>192.168.0.10</param-value>
</init-param>
<init-param>
<param-name>THEME</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>DATA_PATH</param-name>
<param-value>C:\\Users\\Ziver\\Desktop\\Downloads\\temp\\album</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Zallery</servlet-name>
<url-pattern>/gallery</url-pattern>
<url-pattern>/media</url-pattern>
<url-pattern>/slideshow</url-pattern>
<url-pattern>/login</url-pattern>
<url-pattern>/logout</url-pattern>
<url-pattern>/upload</url-pattern>
<url-pattern>/profile</url-pattern>
<url-pattern>/users</url-pattern>
<url-pattern>/register</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Content</servlet-name>
<servlet-class>zall.ZalleryContent</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Content</servlet-name>
<url-pattern>/content</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Ajax</servlet-name>
<servlet-class>zall.ZalleryAjax</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Ajax</servlet-name>
<url-pattern>/ajax</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Upload</servlet-name>
<servlet-class>zall.UploadServlet</servlet-class>
<init-param>
<param-name>TEMP_PATH</param-name>
<param-value>C:\\Users\\Ziver\\Desktop\\Downloads\\temp\\</param-value>
</init-param>
<init-param>
<param-name>ALLOWED_EXTENSIONS</param-name>
<param-value>png,jpg,jpeg,gif,tif,bmp,avi,wmv,mov,mp4,mpeg,flv,m4v,divx,xvid</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Upload</servlet-name>
<url-pattern>/uploadserv</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>transcoder</servlet-name>
<servlet-class>zall.ZalleryTranscoder</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<welcome-file-list>
<welcome-file>gallery</welcome-file>
</welcome-file-list>
</web-app>

View file

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Zallery</display-name>
<welcome-file-list>
<welcome-file>gallery</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Zallery</servlet-name>
<servlet-class>zall.Zallery</servlet-class>
<init-param>
<param-name>WEBSITE_NAME</param-name>
<param-value>Koc.se Gallery</param-value>
</init-param>
<init-param>
<param-name>WEBSITE_URL</param-name>
<param-value>http://koc.se/Zallery/</param-value>
</init-param>
<init-param>
<param-name>SMTP_HOST</param-name>
<param-value>192.168.0.10</param-value>
</init-param>
<init-param>
<param-name>THEME</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>DATA_PATH</param-name>
<param-value>/home/tomcat/ZalleryData/</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Zallery</servlet-name>
<url-pattern>/gallery</url-pattern>
<url-pattern>/media</url-pattern>
<url-pattern>/slideshow</url-pattern>
<url-pattern>/login</url-pattern>
<url-pattern>/logout</url-pattern>
<url-pattern>/upload</url-pattern>
<url-pattern>/profile</url-pattern>
<url-pattern>/users</url-pattern>
<url-pattern>/register</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Content</servlet-name>
<servlet-class>zall.ZalleryContent</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Content</servlet-name>
<url-pattern>/content</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Ajax</servlet-name>
<servlet-class>zall.ZalleryAjax</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Ajax</servlet-name>
<url-pattern>/ajax</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Upload</servlet-name>
<servlet-class>zall.UploadServlet</servlet-class>
<init-param>
<param-name>ALLOWED_EXTENSIONS</param-name>
<param-value>png,jpg,jpeg,gif,tif,bmp,avi,wmv,mov,mp4,mpeg,flv,m4v,divx,xvid</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Upload</servlet-name>
<url-pattern>/uploadserv</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>transcoder</servlet-name>
<servlet-class>zall.ZalleryTranscoder</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<welcome-file-list>
<welcome-file>gallery</welcome-file>
</welcome-file-list>
</web-app>

4
WebContent/footer.jsp Normal file → Executable file
View file

@ -1,4 +1,4 @@
<%@ page import="zall.*" %>
<div class="push"></div> <div class="push"></div>
@ -17,7 +17,7 @@
Powered by Powered by
Java2EE And Tomcat. Zallery Gallery created by Ziver Koc. Java2EE And Tomcat. Zallery Gallery(v<%=Zallery.VERSION %>) created by Ziver Koc.
<br>Built on the <br>Built on the
<a href="http://upthemes.com/themes/gallery/" title="Gallery Wordpress Theme" rel="designer">Gallery WordPress Theme</a> <a href="http://upthemes.com/themes/gallery/" title="Gallery Wordpress Theme" rel="designer">Gallery WordPress Theme</a>
by by

View file

@ -11,7 +11,12 @@
<property name="outputRoot" value="${gitRoot}/build" /> <property name="outputRoot" value="${gitRoot}/build" />
<property name="buildDir" value="${outputRoot}/production" /> <property name="buildDir" value="${outputRoot}/production" />
<property name="releaseDir" value="${outputRoot}/release" /> <property name="releaseDir" value="${outputRoot}/release" />
<property name="deployPath" value="/var/lib/tomcat7/webapps/Zallery.war" />
<!-- Deployment properties -->
<property name="tomcat.url" value="http://localhost:8080/manager/text" />
<property name="tomcat.user" value="" />
<property name="tomcat.pass" value="" />
<property name="catalina.home" value="/usr/share/tomcat7"/>
<!--define standard arguments for javac--> <!--define standard arguments for javac-->
<presetdef name="javac"> <presetdef name="javac">
@ -63,11 +68,19 @@
</war> </war>
</target> </target>
<import file="${catalina.home}/bin/catalina-tasks.xml" optional="true"/>
<target name="deploy" depends="package"> <target name="deploy" depends="package">
<delete file="${deployPath}" quiet="true" /> <deploy url="${tomcat.url}"
<copy username="${tomcat.user}"
file="${releaseDir}/Zallery.war" password="${tomcat.pass}"
toFile="${deployPath}" /> path="/Zallery"
update="true"
war="file:${releaseDir}/Zallery.war" />
<!-- Workaround as tomcat deletes the webapp context file from conf dir -->
<copy file="/var/lib/tomcat7/conf/Catalina/localhost/Zallery.xml_orig"
toFile="/var/lib/tomcat7/conf/Catalina/localhost/Zallery.xml" />
</target> </target>
</project> </project>

View file

@ -6,6 +6,9 @@ body{
margin-top: 40px; margin-top: 40px;
margin-bottom: 40px; margin-bottom: 40px;
} }
.navbar .action a, .navbar .action span{
color: #5a5ada !important;
}
.photo-thumb, .photo { .photo-thumb, .photo {
padding: 0px; padding: 0px;
@ -18,4 +21,20 @@ body{
.col-center{ .col-center{
float: none; float: none;
margin: 0 auto; margin: 0 auto;
}
.navbar .divider-vertical {
height: 40px;
margin: 5px 14px;
border-right: 2px solid #ffffff;
border-left: 2px solid #f2f2f2;
}
.navbar-inverse .divider-vertical {
border-right-color: #222222;
border-left-color: #111111;
}
@media (max-width: 767px) {
.navbar-collapse .nav > .divider-vertical {
display: none;
}
} }

BIN
prototype/img/folder1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
prototype/img/folder2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
prototype/img/folder3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View file

@ -2,107 +2,135 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="description" content="Photo Gallery"> <meta name="description" content="Photo Gallery">
<meta name="author" content="Ziver Koc"> <meta name="author" content="Ziver Koc">
<link rel="icon" href="favicon.ico"> <link rel="icon" href="favicon.ico">
<title>Koc.se</title> <title>Koc.se</title>
<!-- Bootstrap core CSS --> <!-- Bootstrap core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet"> <link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/bootstrap-theme.min.css" rel="stylesheet"> <link href="css/bootstrap-theme.min.css" rel="stylesheet">
<link href="css/zallery.css" rel="stylesheet"> <link href="css/zallery.css" rel="stylesheet">
<!-- Bootstrap core JavaScript --> <!-- Bootstrap core JavaScript -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script> <script src="js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/3.1.8/imagesloaded.pkgd.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/3.1.8/imagesloaded.pkgd.min.js"></script>
<script src="js/masonry.pkgd.min.js"></script> <script src="js/masonry.pkgd.min.js"></script>
<script type="text/javascript"> <script type="text/javascript">
$(function(){ $(function(){
$('.image-grid').imagesLoaded(function(){ $('.image-grid').imagesLoaded(function(){
$('.grid').masonry({ $('.grid').masonry({
itemSelector: '.grid-item', itemSelector: '.grid-item',
columnWidth: '.grid-item', columnWidth: '.grid-item',
});
});
}); });
}); </script>
});
</script>
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<!-- Static navbar --> <!-- Static navbar -->
<nav class="navbar navbar-default"> <nav class="navbar navbar-default">
<div class="navbar-header"> <div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span> <span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
</button> </button>
<a class="navbar-brand" href="#">Project name</a> <a class="navbar-brand" href="#">Project name</a>
</div> </div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Gallery</a></li>
<li><a href="#">Faces</a></li>
<li><a href="#">Geni</a></li>
</ul>
<ul class="nav navbar-nav navbar-right"> <div class="navbar-collapse collapse">
<li class="dropdown"> <ul class="nav navbar-nav">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <li class="active"><a href="#">Gallery</a></li>
<span class="glyphicon glyphicon-user"></span> <li><a href="#">Faces</a></li>
<strong>Ziver Koc</strong> <li><a href="#">Geni</a></li>
<span class="caret">
</a>
<ul class="dropdown-menu">
<li><a href="#">Profile</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">Administration</li>
<li><a href="#">Users</a></li>
<li><a href="#">Transcoding Queue</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">Logout</a></li>
</ul> </ul>
</li>
</ul> <ul class="nav navbar-nav navbar-right">
</div><!--/.nav-collapse --> <li class="action">
<a href="#"><span class="glyphicon glyphicon-folder-open"></span> Create Folder</a>
</li>
<li class="action">
<a href="#"><span class="glyphicon glyphicon-open-file"></span> Upload</a>
</li>
<li class="divider-vertical"></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<span class="glyphicon glyphicon-user"></span>
<strong>Ziver Koc</strong>
<span class="caret">
</a>
<ul class="dropdown-menu">
<li><a href="#">Profile</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">Administration</li>
<li><a href="#">Users</a></li>
<li><a href="#">Transcoding Queue</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">Logout</a></li>
</ul>
</li>
</ul>
</div><!--/.nav-collapse -->
</nav> </nav>
<div class="content"> <div class="content">
<div class="gallery"> <div class="gallery col-center col-md-11">
<div class="row col-center col-md-11"> <div class="row">
<div class="grid folder-grid"> <div class="grid folder-grid">
<div class="grid-item folder-thumb col-md-2 col-sm-3 col-xs-4"><img class="img-responsive" src="http://koc.se/Zallery/img/folder.png" /></div> <div class="grid-item folder-thumb col-md-2 col-sm-3 col-xs-4"><img class="img-responsive"
<div class="grid-item folder-thumb col-md-2 col-sm-3 col-xs-4"><img class="img-responsive" src="http://koc.se/Zallery/img/folder.png" /></div> src="img/folder2.jpg"/></div>
<div class="grid-item folder-thumb col-md-2 col-sm-3 col-xs-4"><img class="img-responsive" src="http://koc.se/Zallery/img/folder.png" /></div> <div class="grid-item folder-thumb col-md-2 col-sm-3 col-xs-4"><img class="img-responsive"
</div> src="img/folder2.jpg"/></div>
<hr> <div class="grid-item folder-thumb col-md-2 col-sm-3 col-xs-4"><img class="img-responsive"
</div> src="img/folder2.jpg"/></div>
<div class="row col-center col-md-11"> </div>
<div class="grid image-grid"> <hr>
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive" src="http://lorempixel.com/400/200" /></div> </div>
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive" src="http://lorempixel.com/400/400" /></div> <div class="row">
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive" src="http://lorempixel.com/400/200" /></div> <div class="grid image-grid">
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive" src="http://lorempixel.com/400/200" /></div> <div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive"
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive" src="http://lorempixel.com/400/800" /></div> src="http://lorempixel.com/400/200"/>
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive" src="http://lorempixel.com/400/200" /></div> </div>
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive" src="http://lorempixel.com/400/300" /></div> <div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive"
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive" src="http://lorempixel.com/400/400" /></div> src="http://lorempixel.com/400/400"/>
</div> </div>
</div> <div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive"
</div> <!-- /gallery --> src="http://lorempixel.com/400/200"/>
</div>
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive"
src="http://lorempixel.com/400/200"/>
</div>
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive"
src="http://lorempixel.com/400/800"/>
</div>
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive"
src="http://lorempixel.com/400/200"/>
</div>
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive"
src="http://lorempixel.com/400/300"/>
</div>
<div class="grid-item photo-thumb col-md-3 col-sm-6 col-xs-12"><img class="img-responsive"
src="http://lorempixel.com/400/400"/>
</div>
</div>
</div>
</div> <!-- /gallery -->
</div> <!-- /content --> </div> <!-- /content -->
</div> <!-- /container --> </div> <!-- /container -->
</body> </body>
</html> </html>

View file

@ -30,9 +30,8 @@ public class UploadServlet extends AjaxFileUpload{
private static final Logger logger = LogUtil.getLogger(); private static final Logger logger = LogUtil.getLogger();
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public static final Set<String> VIDEO_EXT = Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(new String[]{ private static final Set<String> VIDEO_EXT = Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(
"avi","mp4","mpeg","mpeg","divx","xvid","wmv","mov","flv","m4v" "avi","mp4","mpeg","mpeg","divx","xvid","wmv","mov","flv","m4v")));
})));
@Override @Override
public String getProgressHTML() { public String getProgressHTML() {
@ -76,6 +75,7 @@ public class UploadServlet extends AjaxFileUpload{
vid.setUser( user ); vid.setUser( user );
vid.setFile( item ); vid.setFile( item );
vid.save(db); vid.save(db);
logger.info("Video upload successful: "+vid.getFolder().getPath());
} }
else{ else{
Image img = new Image(); Image img = new Image();
@ -83,7 +83,8 @@ public class UploadServlet extends AjaxFileUpload{
img.setFolder( folder ); img.setFolder( folder );
img.setUser( user ); img.setUser( user );
img.setFile( item ); img.setFile( item );
img.save(db); img.save(db);
logger.info("Image upload successful: "+img.getFolder().getPath());
} }
} catch (Exception e) { } catch (Exception e) {
logger.log(Level.WARNING, "Error: Creating new Media(\""+item.getName()+"\")", e); logger.log(Level.WARNING, "Error: Creating new Media(\""+item.getName()+"\")", e);

View file

@ -31,7 +31,8 @@ import zutil.log.LogUtil;
public class Zallery extends HttpServlet{ public class Zallery extends HttpServlet{
private static Logger logger = LogUtil.getLogger(); private static Logger logger = LogUtil.getLogger();
private static final long serialVersionUID = 1L;
public static final String VERSION = "1.0.2";
public static String WEBSITE_NAME = "Example.com"; public static String WEBSITE_NAME = "Example.com";
public static String WEBSITE_URL = "http://example.com"; public static String WEBSITE_URL = "http://example.com";
@ -53,7 +54,7 @@ public class Zallery extends HttpServlet{
Context context = new InitialContext(); Context context = new InitialContext();
// Check if Zallery has been properly configured // Check if Zallery has been properly configured
if ("C:\\\\data".equals(context.lookup("java:comp/env/DATA_PATH"))) if ("C:\\\\data".equals(context.lookup("java:comp/env/DATA_PATH")))
throw new ServletException("Zallery has not been properly configured, set proper configuration in Zaller.xml context file."); throw new ServletException("Zallery has not been properly configured, set proper configuration in Zallery.xml context file.");
WEBSITE_NAME = (String)context.lookup("java:comp/env/WEBSITE_NAME"); WEBSITE_NAME = (String)context.lookup("java:comp/env/WEBSITE_NAME");
WEBSITE_URL = (String)context.lookup("java:comp/env/WEBSITE_URL"); WEBSITE_URL = (String)context.lookup("java:comp/env/WEBSITE_URL");
@ -210,7 +211,7 @@ public class Zallery extends HttpServlet{
} }
} }
List<Media> list = Media.load(db, folder); List<Media> list = Media.load(db, folder);
List<Folder> subFolders = Folder.loadSubFolders(db, folder.getId(), user); List<Folder> subFolders = Folder.loadSubFolders(db, folder, user);
//session.setAttribute("user", user); //session.setAttribute("user", user);
request.setAttribute("folder", folder); request.setAttribute("folder", folder);

View file

@ -4,8 +4,10 @@ import java.io.File;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@ -21,25 +23,24 @@ import zall.Zallery;
public class Folder extends DBBean{ public class Folder extends DBBean{
private static final Logger logger = LogUtil.getLogger(); private static final Logger logger = LogUtil.getLogger();
protected transient String name; private transient String name;
protected User user; protected long user = -1;
protected String path; protected transient User userInstance;
private String path;
protected Folder parent; protected Folder parent;
protected Timestamp date; protected Timestamp date;
protected boolean isPrivate; private boolean isPrivate;
//@DBLinkTable(name="FolderTree", beanClass=Folder.class, idColumn="parent")
//protected LinkedList<Folder> subFolders;
public static Folder load(DBConnection db, Long id) throws SQLException{ public static Folder load(DBConnection db, Long id) throws SQLException{
return load(db, Folder.class, id); return load(db, Folder.class, id);
} }
public static List<Folder> loadSubFolders(DBConnection db, Long id, User user) throws SQLException{ public static List<Folder> loadSubFolders(DBConnection db, Folder folder, User requestingUser) throws SQLException{
PreparedStatement sql = db.getPreparedStatement("SELECT * FROM Folder WHERE parent=? AND (isPrivate=0 OR user=? OR ?)"); PreparedStatement sql = db.getPreparedStatement("SELECT * FROM Folder WHERE parent=? AND (isPrivate=0 OR user=? OR ?)");
sql.setLong(1, id); sql.setLong(1, folder.getId());
sql.setLong(2, user.getId()); sql.setLong(2, folder.user);
sql.setBoolean(3, user.isSuperUser()); sql.setBoolean(3, requestingUser.isSuperUser());
return DBConnection.exec(sql, DBBeanSQLResultHandler.createList(Folder.class, db)); return DBConnection.exec(sql, DBBeanSQLResultHandler.createList(Folder.class, db));
} }
@ -60,15 +61,14 @@ public class Folder extends DBBean{
public static List<Folder> load(DBConnection db, User user) throws SQLException{ public static List<Folder> load(DBConnection db, User user) throws SQLException{
if( user.getId() == null ) if( user.getId() == null )
return new LinkedList<Folder>(); return Collections.emptyList();
PreparedStatement sql = db.getPreparedStatement("SELECT * FROM Folder WHERE user=?"); PreparedStatement sql = db.getPreparedStatement("SELECT * FROM Folder WHERE user=?");
sql.setLong(1, user.getId() ); sql.setLong(1, user.getId() );
return DBConnection.exec(sql, DBBeanSQLResultHandler.createList(Folder.class, db)); return DBConnection.exec(sql, DBBeanSQLResultHandler.createList(Folder.class, db));
} }
public Folder(){ public Folder(){
//subFolders = new LinkedList<Folder>(); date = new Timestamp( System.currentTimeMillis() );
date = new Timestamp( System.currentTimeMillis() );
} }
public String getName(){ public String getName(){
@ -76,20 +76,25 @@ public class Folder extends DBBean{
String[] tmp = path.split("/"); String[] tmp = path.split("/");
name = tmp[tmp.length-1]; name = tmp[tmp.length-1];
} }
String userName = user != null ? user.getName() : "UNKNOWN"; String userName = getUser() != null ? getUser().getName() : "UNKNOWN";
String tmp = name.replaceAll("\\{NAME\\}", userName); String tmp = name.replaceAll("\\{NAME\\}", userName);
return tmp; return tmp;
} }
public String getUnModName(){
if(name == null)
getName();
return name;
}
public User getUser(){ public User getUser(){
return user; if (userInstance == null) {
try {
DBConnection db = Zallery.getDB();
userInstance = User.load(db, user);
db.close();
} catch (Exception e) {
logger.log(Level.WARNING, null, e);
}
}
return userInstance;
} }
public void setUser(User user){ public void setUser(User user){
this.user = user; this.user = user.getId();
this.userInstance = null;
} }
public boolean isPrivate(){ public boolean isPrivate(){
return isPrivate; return isPrivate;
@ -98,12 +103,9 @@ public class Folder extends DBBean{
this.isPrivate = priv; this.isPrivate = priv;
} }
public String getPath(){ public String getPath(){
String tmp = path.replaceAll("\\{NAME\\}", user.getName()); String tmp = path.replaceAll("\\{NAME\\}", getUser().getName());
return tmp; return tmp;
} }
public String getUnModPath(){
return path;
}
public void setName(String name){ public void setName(String name){
this.name = name; this.name = name;
if( parent.path.endsWith("/") ) if( parent.path.endsWith("/") )
@ -125,20 +127,10 @@ public class Folder extends DBBean{
return parent; return parent;
} }
/*public void addSubFolder(Folder f){ public Timestamp getDate(){
if( !subFolders.contains(f) ){ return date;
subFolders.add( f ); }
f.setParent( this );
}
}*/
/*public List<Folder> getSubFolders(){
return subFolders;
}*/
public Timestamp getDate(){
return date;
}
/** /**
* @param filename is the name of the file * @param filename is the name of the file
@ -153,7 +145,7 @@ public class Folder extends DBBean{
return null; return null;
} }
if( user == null || filename == null ) if( user < 0 || filename == null )
return null; return null;
StringBuilder tmp = new StringBuilder(); StringBuilder tmp = new StringBuilder();
@ -166,7 +158,7 @@ public class Folder extends DBBean{
tmp.append( File.separatorChar ); tmp.append( File.separatorChar );
// Add UserID and this folders path // Add UserID and this folders path
String tmp_path = path.replaceAll("\\{NAME\\}", ""+user.getId()); String tmp_path = path.replaceAll("\\{NAME\\}", ""+user);
tmp_path = tmp_path.replaceAll("/", Matcher.quoteReplacement(File.separator)); tmp_path = tmp_path.replaceAll("/", Matcher.quoteReplacement(File.separator));
tmp.append( tmp_path ); tmp.append( tmp_path );
@ -195,6 +187,6 @@ public class Folder extends DBBean{
} }
public boolean isEmpty(DBConnection db) throws SQLException { public boolean isEmpty(DBConnection db) throws SQLException {
return Folder.loadSubFolders(db, this.getId(), user).isEmpty() && Media.load(db, this).isEmpty(); return Folder.loadSubFolders(db, this, getUser()).isEmpty() && Media.load(db, this).isEmpty();
} }
} }