亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? treeintercptor.java

?? JAVA做的CMS源碼
?? JAVA
字號:
package com.ponyjava.common.hibernate3;

import java.io.Serializable;

import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;
import org.hibernate.EmptyInterceptor;
import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.type.Type;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

@SuppressWarnings("serial")
public class TreeIntercptor extends EmptyInterceptor {
	protected SessionFactory sessionFactory;

	protected SessionFactory getSessionFactory() {
		if (sessionFactory == null) {
			WebApplicationContext wac = WebApplicationContextUtils
					.getRequiredWebApplicationContext(ServletActionContext
							.getServletContext());
			sessionFactory = (SessionFactory) wac.getBean("sessionFactory",
					SessionFactory.class);
		}
		return sessionFactory;
	}

	protected Session getSession() {
		return getSessionFactory().getCurrentSession();
	}

	@Override
	public boolean onSave(Object entity, Serializable id, Object[] state,
			String[] propertyNames, Type[] types) {
		if (entity instanceof HibernateTree) {
			HibernateTree tree = (HibernateTree) entity;
			Long parentId = tree.getParentId();
			String beanName = tree.getClass().getName();
			Session session = getSession();
			FlushMode model = session.getFlushMode();
			session.setFlushMode(FlushMode.MANUAL);
			Integer myPosition = new Integer(0);
			if (parentId != null) {
				String hql = "select b.lft from " + beanName
						+ " b where b.id=:pid";
				myPosition = (Integer) session.createQuery(hql).setLong("pid",
						parentId).uniqueResult();
			}
			String hql1 = "update " + beanName
					+ " b set b.rgt = b.rgt + 2 WHERE b.rgt > :myPosition";
			String hql2 = "update " + beanName
					+ " b set b.lft = b.lft + 2 WHERE b.lft > :myPosition";
			if (!StringUtils.isBlank(tree.getTreeCondition())) {
				hql1 += " and (" + tree.getTreeCondition() + ")";
				hql2 += " and (" + tree.getTreeCondition() + ")";
			}
			session.createQuery(hql1).setInteger("myPosition", myPosition)
					.executeUpdate();
			session.createQuery(hql2).setInteger("myPosition", myPosition)
					.executeUpdate();
			session.setFlushMode(model);
			for (int i = 0; i < propertyNames.length; i++) {
				if (propertyNames[i].equals(HibernateTree.LFT)) {
					state[i] = myPosition + 1;
				}
				if (propertyNames[i].equals(HibernateTree.RGT)) {
					state[i] = myPosition + 2;
				}

			}
			return true;
		}
		return false;
	}

	@Override
	public boolean onFlushDirty(Object entity, Serializable id,
			Object[] currentState, Object[] previousState,
			String[] propertyNames, Type[] types) {
		if (!(entity instanceof HibernateTree)) {
			return false;
		}
		HibernateTree tree = (HibernateTree) entity;
		for (int i = 0; i < propertyNames.length; i++) {
			if (propertyNames[i].equals(HibernateTree.PARENT)) {
				HibernateTree preParent = (HibernateTree) previousState[i];
				HibernateTree curParent = (HibernateTree) currentState[i];
				updateParent(tree, preParent, curParent);
				return true;
			}
		}
		return false;
	}

	private void updateParent(HibernateTree tree, HibernateTree preParent,
			HibernateTree curParent) {
		if (preParent != null && preParent != null
				&& !preParent.equals(curParent)) {
			String beanName = tree.getClass().getName();
			Session session = getSession();
			FlushMode model = session.getFlushMode();
			session.setFlushMode(FlushMode.MANUAL);

			// 獲得節點位置
			String hql = "select b.lft,b.rgt from " + beanName
					+ " b where b.id=:id";
			Object[] position = (Object[]) session.createQuery(hql).setLong(
					"id", tree.getId()).uniqueResult();
			int nodeLft = ((Number) position[0]).intValue();
			int nodeRgt = ((Number) position[1]).intValue();
			int span = nodeRgt - nodeLft + 1;
			// 獲得當前父節點左位置
			hql = "select b.lft from " + beanName + " b where b.id=:id";
			int parentLft = ((Number) session.createQuery(hql).setLong("id",
					curParent.getId()).uniqueResult()).intValue();

			// 先空出位置
			String hql1 = "update " + beanName + " b set b.rgt = b.rgt + "
					+ span + " WHERE b.rgt > :parentLft";
			String hql2 = "update " + beanName + " b set b.lft = b.lft + "
					+ span + " WHERE b.lft > :parentLft";
			if (!StringUtils.isBlank(tree.getTreeCondition())) {
				hql1 += " and (" + tree.getTreeCondition() + ")";
				hql2 += " and (" + tree.getTreeCondition() + ")";
			}
			session.createQuery(hql1).setInteger("parentLft", parentLft)
					.executeUpdate();
			session.createQuery(hql2).setInteger("parentLft", parentLft)
					.executeUpdate();

			// 再調整自己
			hql = "select b.lft,b.rgt from " + beanName + " b where b.id=:id";
			position = (Object[]) session.createQuery(hql).setLong("id",
					tree.getId()).uniqueResult();
			nodeLft = ((Number) position[0]).intValue();
			nodeRgt = ((Number) position[1]).intValue();
			int offset = parentLft - nodeLft + 1;
			hql = "update "
					+ beanName
					+ " b set b.lft=b.lft+:offset, b.rgt=b.rgt+:offset WHERE b.lft between :nodeLft and :nodeRgt";
			if (!StringUtils.isBlank(tree.getTreeCondition())) {
				hql += " and (" + tree.getTreeCondition() + ")";
			}
			session.createQuery(hql).setParameter("offset", offset)
					.setParameter("nodeLft", nodeLft).setParameter("nodeRgt",
							nodeRgt).executeUpdate();

			// 最后刪除(清空位置)
			hql1 = "update " + beanName + " b set b.rgt = b.rgt - " + span
					+ " WHERE b.rgt > :nodeRgt";
			hql2 = "update " + beanName + " b set b.lft = b.lft - " + span
					+ " WHERE b.lft > :nodeRgt";
			if (tree.getTreeCondition() != null) {
				hql1 += " and (" + tree.getTreeCondition() + ")";
				hql2 += " and (" + tree.getTreeCondition() + ")";
			}
			session.createQuery(hql1).setParameter("nodeRgt", nodeRgt)
					.executeUpdate();
			session.createQuery(hql2).setParameter("nodeRgt", nodeRgt)
					.executeUpdate();

			session.setFlushMode(model);
		}
	}

	@Override
	public void onDelete(Object entity, Serializable id, Object[] state,
			String[] propertyNames, Type[] types) {
		if (entity instanceof HibernateTree) {
			HibernateTree tree = (HibernateTree) entity;
			String beanName = tree.getClass().getName();
			Session session = getSession();
			FlushMode model = session.getFlushMode();
			session.setFlushMode(FlushMode.MANUAL);
			String hql = "select b.lft from " + beanName + " b where b.id=:id";
			Integer myPosition = (Integer) session.createQuery(hql).setLong(
					"id", tree.getId()).uniqueResult();
			String hql1 = "update " + beanName
					+ " b set b.rgt = b.rgt - 2 WHERE b.rgt > :myPosition";
			String hql2 = "update " + beanName
					+ " b set b.lft = b.lft - 2 WHERE b.lft > :myPosition";
			if (tree.getTreeCondition() != null) {
				hql1 += " and (" + tree.getTreeCondition() + ")";
				hql2 += " and (" + tree.getTreeCondition() + ")";
			}
			session.createQuery(hql1).setInteger("myPosition", myPosition)
					.executeUpdate();
			session.createQuery(hql2).setInteger("myPosition", myPosition)
					.executeUpdate();
			session.setFlushMode(model);
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黑人巨大精品欧美一区| 国产精品亚洲人在线观看| 色综合久久久久| 亚洲精品欧美激情| 欧美精品在线一区二区| zzijzzij亚洲日本少妇熟睡| 老司机午夜精品| 五月天一区二区三区| 久久精品免视看| 日韩欧美国产一区二区三区| 91激情五月电影| 成人av电影免费观看| 国产精品综合一区二区三区| 看电视剧不卡顿的网站| 青青草一区二区三区| 天天av天天翘天天综合网色鬼国产| 中文字幕一区视频| 久久九九国产精品| 国产欧美一区二区精品性色| 欧美电视剧在线观看完整版| 91精品国产综合久久久久久久久久| 在线观看三级视频欧美| 在线观看亚洲一区| 欧美亚州韩日在线看免费版国语版| 91麻豆国产福利在线观看| 成人av资源下载| 国产成人精品一区二区三区四区 | 国产精品69毛片高清亚洲| 免费观看在线综合| 久久se这里有精品| 国产福利91精品一区| 成人av网在线| 91色porny在线视频| 在线观看视频欧美| 欧美丰满少妇xxxbbb| 欧美午夜精品一区| 在线免费视频一区二区| 欧美日韩亚洲高清一区二区| 欧美一区二区三区爱爱| 久久日韩粉嫩一区二区三区| 国产精品午夜在线| 亚洲乱码国产乱码精品精可以看| 亚洲午夜av在线| 午夜不卡av在线| 久久精品国产第一区二区三区| 国产一区二区精品在线观看| 成人av动漫在线| 欧美色区777第一页| 欧美伦理电影网| 精品成人佐山爱一区二区| 国产精品入口麻豆九色| 亚洲午夜久久久久中文字幕久| 亚洲自拍偷拍图区| 水蜜桃久久夜色精品一区的特点| 久久99精品国产| 激情深爱一区二区| 成人妖精视频yjsp地址| 99国内精品久久| 在线观看免费成人| 精品国产免费人成在线观看| 欧美国产一区二区| 亚洲国产视频一区| 韩国女主播成人在线观看| www.欧美色图| 日韩欧美一区二区不卡| 国产日产欧美一区二区视频| 国产精品乱人伦| 日本一不卡视频| 成人aaaa免费全部观看| 这里是久久伊人| 国产精品短视频| 美腿丝袜在线亚洲一区| 波多野结衣亚洲| 日韩一区二区三区在线视频| 欧美激情综合五月色丁香小说| 亚洲一区二区三区美女| 国产成人日日夜夜| 欧美美女喷水视频| 久久久久久久久久久久久久久99| 国产精品萝li| 久久av中文字幕片| 欧美人狂配大交3d怪物一区| 亚洲精品写真福利| 午夜精品视频一区| 国产成人8x视频一区二区 | 亚洲午夜激情av| 狠狠狠色丁香婷婷综合激情| 欧美亚洲一区二区三区四区| 国产欧美日韩亚州综合| 欧美日韩黄色一区二区| 91成人免费在线| 久久一二三国产| 亚洲成人免费电影| av中文字幕一区| 精品国产凹凸成av人网站| 亚洲成人av福利| 99在线精品视频| 欧美一区二区三区免费观看视频| 国产精品免费av| 国产精品系列在线播放| 91精品国产色综合久久ai换脸 | 成人在线综合网| 久久理论电影网| 人人超碰91尤物精品国产| 一本大道综合伊人精品热热 | 国产欧美中文在线| 狠狠色狠狠色综合系列| 日韩视频免费观看高清在线视频| 欧美激情艳妇裸体舞| 国产综合成人久久大片91| 7777精品伊人久久久大香线蕉超级流畅 | 久久99精品久久只有精品| 一本到不卡免费一区二区| 中文字幕亚洲区| 成人精品小蝌蚪| 中文天堂在线一区| 粉嫩蜜臀av国产精品网站| 国产偷国产偷亚洲高清人白洁| 久久99最新地址| 亚洲欧洲制服丝袜| 精品在线亚洲视频| 欧美另类久久久品| 亚洲激情校园春色| eeuss鲁一区二区三区| 欧美一级一区二区| 亚洲成人激情综合网| 欧美丝袜丝交足nylons| 亚洲另类色综合网站| 色网综合在线观看| 樱桃国产成人精品视频| 日本大香伊一区二区三区| 亚洲天堂av一区| 97精品电影院| 亚洲精品免费视频| 91高清视频在线| 亚洲成人黄色小说| 欧美一区二区久久久| 九九久久精品视频| 欧美国产一区二区在线观看| 不卡的av在线| 亚洲综合在线第一页| 欧美日韩一区二区三区四区五区| 天天色天天操综合| 精品国内二区三区| 国产成人av网站| 国产精品国产三级国产普通话99 | 国产精品一线二线三线精华| 欧美一区国产二区| 韩国欧美国产一区| 国产精品短视频| 欧美色窝79yyyycom| 日韩国产精品久久| 久久精品一区蜜桃臀影院| www.99精品| 亚洲伊人色欲综合网| 日韩一区二区在线看片| 丰满亚洲少妇av| 亚洲狼人国产精品| 欧美一区二区三区播放老司机| 国产黄色精品视频| 一区二区三区中文在线| 日韩欧美国产不卡| av网站一区二区三区| 性做久久久久久| 26uuu亚洲| 欧美色窝79yyyycom| 国产呦精品一区二区三区网站| 中文字幕一区二区三区av| 欧美日韩精品欧美日韩精品一综合| 黄色小说综合网站| 伊人色综合久久天天人手人婷| 日韩精品一区二区三区视频 | 国产成人免费视频精品含羞草妖精| 一区视频在线播放| 欧美一区二区三区成人| 成人福利视频在线看| 日本欧美一区二区三区| 国产精品看片你懂得| 欧美一区二区视频观看视频| 成人高清在线视频| 免费日韩伦理电影| 伊人色综合久久天天人手人婷| 欧美成人一级视频| 91激情五月电影| 国产成人精品免费视频网站| 午夜欧美视频在线观看 | 亚洲人成精品久久久久久 | 久久亚区不卡日本| 波多野结衣中文字幕一区| 亚洲成人动漫在线观看| 精品国产乱码91久久久久久网站| 一本久道久久综合中文字幕| 国产在线视频精品一区| 亚洲国产视频在线| 综合中文字幕亚洲| 久久久国产一区二区三区四区小说 | 91蝌蚪porny九色| 懂色一区二区三区免费观看| 看片的网站亚洲| 奇米一区二区三区|