package net.simpleframework.organization;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import net.simpleframework.ado.DataObjectManagerFactory;
import net.simpleframework.ado.db.IQueryEntityManager;
import net.simpleframework.organization.account.AccountManager;
import net.simpleframework.organization.account.AccountSession;
import net.simpleframework.organization.account.IAccount;
import net.simpleframework.organization.impl.JobChartManager;
import net.simpleframework.organization.impl.JobManager;
import net.simpleframework.organization.impl.JobMemberManager;
import net.simpleframework.organization.rule.JrAdmin;
import net.simpleframework.organization.rule.JrAnonymous;
import net.simpleframework.organization.user.DepartmentManager;
import net.simpleframework.organization.user.IUser;
import net.simpleframework.organization.user.UserManager;
import net.simpleframework.util.ImageUtils;
import net.simpleframework.util.IoUtils;
import net.simpleframework.util.StringUtils;
import net.simpleframework.web.page.PageRequestResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* LGPLv3
*
* @author (cknet@126.com, 13910090885)
* http://code.google.com/p/simpleframework/
* http://www.simpleframework.net
*/
public class OrgUtils {
static final Log logger = LogFactory.getLog(OrgUtils.class);
public static OrganizationApplicationModule organizationModule;
public static String deployPath;
public static String getCssPath(final PageRequestResponse requestResponse) throws Exception {
final StringBuilder sb = new StringBuilder();
sb.append(deployPath).append("css/").append(organizationModule.getSkin(requestResponse));
return sb.toString();
}
public static IQueryEntityManager getQueryEntityManager() {
return DataObjectManagerFactory.getQueryEntityManager(organizationModule.getApplication());
}
private static Object amgr, jmgr, jmmgr, jcmgr, umgr, dmgr;
public static AccountManager am() {
if (amgr == null) {
amgr = organizationModule.createAccountManager();
}
return (AccountManager) amgr;
}
public static JobManager jm() {
if (jmgr == null) {
jmgr = organizationModule.createJobManager();
}
return (JobManager) jmgr;
}
public static JobMemberManager jmm() {
if (jmmgr == null) {
jmmgr = organizationModule.createJobMemberManager();
}
return (JobMemberManager) jmmgr;
}
public static JobChartManager jcm() {
if (jcmgr == null) {
jcmgr = organizationModule.createJobChartManager();
}
return (JobChartManager) jcmgr;
}
public static UserManager um() {
if (umgr == null) {
umgr = organizationModule.createUserManager();
}
return (UserManager) umgr;
}
public static DepartmentManager dm() {
if (dmgr == null) {
dmgr = organizationModule.createDepartmentManager();
}
return (DepartmentManager) dmgr;
}
public static void deletePhoto(final PageRequestResponse requestResponse, final Object userId) {
final File photoCache = new File(requestResponse.getServletContext().getRealPath(
OrgUtils.deployPath + "photo-cache"));
if (!photoCache.exists()) {
return;
}
for (final File photo : photoCache.listFiles(new FilenameFilter() {
@Override
public boolean accept(final File dir, final String name) {
return name.startsWith(userId + "_");
}
})) {
photo.delete();
}
}
public static IUser getUserByObject(final Object userObject) {
if (userObject instanceof IUser) {
return (IUser) userObject;
} else if (userObject instanceof IAccount) {
return ((IAccount) userObject).getUser();
} else {
return OrgUtils.um().getUserById(userObject);
}
}
public static String getPhotoSRC(final HttpServletRequest request, final Object userObject,
final int width, final int height) throws IOException {
final StringBuilder sb = new StringBuilder();
final IUser user = getUserByObject(userObject);
final InputStream inputStream;
if (user == null || (inputStream = user.getPhoto()) == null) {
sb.append(OrgUtils.deployPath).append("images/none.gif");
} else {
final File photoCache = new File(request.getSession().getServletContext()
.getRealPath(OrgUtils.deployPath + File.separator + "photo-cache"));
if (!photoCache.exists()) {
IoUtils.createDirectoryRecursively(photoCache);
}
final String filename = user.getId() + "_" + width + "_" + height + ".png";
final File photoFile = new File(photoCache.getAbsolutePath() + File.separator + filename);
if (!photoFile.exists() || photoFile.length() == 0) {
ImageUtils.thumbnail(inputStream, width, height, new FileOutputStream(photoFile));
}
sb.append(OrgUtils.deployPath).append("photo-cache/").append(filename);
}
return sb.toString();
}
public static String getPhotoSRC(final HttpServletRequest request, final Object userId)
throws IOException {
return getPhotoSRC(request, userId, 128, 128);
}
/* */
public static boolean isManagerMember(final IUser user, final Object... objects) {
return isMember(IJob.sj_manager, user, objects);
}
public static boolean isManagerMember(final HttpSession httpSession, final Object... objects) {
return isMember(IJob.sj_manager, httpSession, objects);
}
public static boolean isMember(final String jn, final HttpSession httpSession,
final Object... objects) {
final IAccount account = AccountSession.getLogin(httpSession);
return isMember(jn, account != null ? account.getUser() : null);
}
public static boolean isMember(final String jn, final IUser user, final Object... objects) {
if (OrgUtils.deployPath == null) {
return false;//
}
if (JrAdmin.jr.isMember(user, objects)) {
return true;
}
final IJob job = jm().getJobByName(IJob.sj_manager);
if (job != null) {
if (jm().isMember(user, job, objects)) {
return true;
}
}
if (!StringUtils.hasText(jn)) {
return true;
}
if (jn.equals(IJob.sj_anonymous)) {
return JrAnonymous.jr.isMember(user, objects);
}
for (final String j : StringUtils.tokenizeToStringArray(jn)) {
if (_isMember(j, user, objects)) {
return true;
}
}
return false;
}
private static boolean _isMember(final String jn, final IUser user, final Object... objects) {
// jn#
if (jn.startsWith("#")) {
final IUser user2;
if ((user2 = um().getUserByName(jn.substring(1))) == null) {
return false;
}
if (user2.equals(user)) {
return true;
}
} else {
IJob job;
if ((job = jm().getJobByName(jn)) == null) {
return false;
}
return jm().isMember(user, job, objects);
}
return false;
}
}
|