⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmssmilpageunitcollection.java

📁 MM7彩信对接网关示例
💻 JAVA
字号:
/*
 * Created on 2005-7-10
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.rainbow.mms.common;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.rainbow.util.tools.HibernateUtil;


/**
 * 将普通彩信内容体按照SMIL分页的格式来存储
 * @author Rainbow Mms group leader -- TrWorks
 */
public class MmsSmilPageUnitCollection {
	private MmsContent orgMmsContent = null;
	private MimeContent smilMime = null;
	private Map mmsMap = new HashMap();
	private int slidNum = 0;

	public MmsSmilPageUnitCollection(MmsContent mms){
		orgMmsContent = mms;
		commonMmsToPageMms();
	}
	
	public Map getMmsMap() {
		return mmsMap;
	}
	
	public void setMmsMap(Map mmsMap) {
		this.mmsMap = mmsMap;
	}
	
	public MmsContent getOrgMmsContent() {
		return orgMmsContent;
	}
	public int getSlidNum() {
		return slidNum;
	}
	public MimeContent getSmilMime() {
		return smilMime;
	}
	
	protected boolean commonMmsToPageMms(){
		List list = orgMmsContent.getMmsContentElments();
		if (list == null){
			return true;
		}
		
		// 将SMIL内容取出
		MimeContent smilContent = null;
		for(int i = 0; i < list.size(); i++){
			smilContent = (MimeContent)list.get(i);
			if (smilContent.getMimeType().equalsIgnoreCase("application/smil")){
				break;
			}
		}
		smilMime = smilContent;
		
		// 如果没有SMIL内容,则按照单页情况处理
		if(smilContent == null){
			System.out.println("MmsSmilPageUnitCollection not find smil");
			for (int j = 0; j < list.size(); j++){
				MimeContent content = (MimeContent)list.get(j);
				mmsMap.put(new Integer(0), content);
			}
			return true;
		}
		
		SimpleSmilControl smilControl = new SimpleSmilControl(smilContent.getCharacterContent());
		
		// 将每一个元素定位到指定的页上
		for (int m = 0; m < list.size(); m++){
			MimeContent content = (MimeContent)list.get(m);
			if (content.getMimeType().equalsIgnoreCase("application/smil")){
				continue;
			}

			List result = null;
			// 获取该Mime元素所在的页(可能会出现在多个页上)
			result = smilControl.getObjectAtSlidNo(content.getMimeContentName());

			// 如果SMIL内容配置中没有该MIME元素,那么则不添加它到Map中
			if (result.size() == 0){
				System.out.println("MmsSmilPageUnitCollection find error mime");
				continue;
			}
			else{
				// 为每一页分配一个List,List内存放该页的元素内容
				for (int n = 0; n < result.size(); n++){
					List onePageList = (List)mmsMap.get(result.get(n));
					
					if (null == onePageList){
						onePageList = new LinkedList();
						onePageList.add(content);
						mmsMap.put(result.get(n), onePageList);
					}
					else{
						onePageList.add(content);
					}
				}
				slidNum = mmsMap.size();
			}
		}
		
		// 检查MAP中有无空桢,如果有空桢,那么需要加上一个空的List
		List nullPage = smilControl.getNullSlid();
		for (int i = 0; i < nullPage.size(); i++){
			mmsMap.put(nullPage.get(i), new LinkedList());
		}
		
		return true;
	}
	
	/**
	 * 添加Mime元素
	 * @param slidNo 从0开始
	 * @param mime
	 * @return
	 */
	public boolean addMimeElement(int slidNo, MimeContent mime, int addPos, int pageInsertPos){
		if (slidNo < 0 || slidNo > slidNum || mime == null ||
			smilMime == null || addPos < 0){
			System.out.println("AddMimeElement Input Params Error");
			return false;
		}
		
		// 如果该Mime没有保存到数据库中,则保存
		if (mime.getMimeContentID() == 0){
			try{
			Session sess = HibernateUtil.currentSession();
			Transaction tx = sess.beginTransaction();
			sess.save(mime);
			tx.commit();
			}
			catch(Exception e){
				e.printStackTrace();
			}
			finally{
				HibernateUtil.closeSession();	
			}
		}
		
		SimpleSmilControl smilControl = new SimpleSmilControl(smilMime.getCharacterContent());
		
		//smilControl.addRef(slidNo, mime.getMimeContentName(), pageInsertPos);
		smilControl.addMimeContent(mime.getMimeType(), slidNo, mime.getMimeContentName(), pageInsertPos);
		System.out.println("MmsSmilPageUnitCollection addMimeElement : " + smilControl.toString());
		
		smilMime.setCharacterContent(smilControl.toString());
		
		orgMmsContent.getMmsContentElments().add(addPos, mime);
		
		System.out.println(smilControl.toString());
		
		try {
			Session sess = HibernateUtil.currentSession();
			Transaction tx = sess.beginTransaction();
			sess.update(orgMmsContent);
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			HibernateUtil.closeSession();
		}
		
		return true;
	}
	
	/**
	 * 删除mime元素
	 * @param slidNo 从0开始
	 * @param mime
	 * @return
	 */
	public boolean delMimeElement(int slidNo, MimeContent mime){
		if (slidNo < 0 || slidNo > slidNum || mime == null || smilMime == null) {
			System.out.println("MmsSmilPageUnitCollection delMimeElement Input Params Error!\r\n" +
					"slidNo:" + slidNo + "\r\nslidNum:" + slidNum + "\r\nmime" + mime + 
					"\r\nsmilMime:" + smilMime);
			return false;
		}

		SimpleSmilControl smilControl = new SimpleSmilControl(smilMime
				.getCharacterContent());
		
		List findResult = smilControl.getObjectAtSlidNo(mime.getMimeContentName());
		
		// 如果彩信中该元素重复出现在SMIL中,那么只删除SMIL中指定桢的Mime,其他出现的地方不删除
		if (findResult != null && findResult.size() > 1){
			smilControl.removeObject(slidNo, mime.getMimeContentName(), false);
			smilMime.setCharacterContent(smilControl.toString());
		}
		else{
			smilControl.removeObject(slidNo, mime.getMimeContentName(), false);
			smilMime.setCharacterContent(smilControl.toString());

			List list = orgMmsContent.getMmsContentElments();
			for (int i = 0; i < list.size(); i++){
				MimeContent t = (MimeContent)list.get(i);
				if (t.getMimeContentID() == mime.getMimeContentID()){
					list.remove(i);
				}
			}
		}
		
		System.out.println(smilControl.toString());
		
		// 保存处理结果 到数据库中
		try {
			Session sess = HibernateUtil.currentSession();
			Transaction tx = sess.beginTransaction();
			sess.update(smilMime);
			sess.update(orgMmsContent);
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			HibernateUtil.closeSession();
		}
		
		return true;
	}
	
	/**
	 * 获得彩信的物理大小,字节为单位
	 * @return
	 */
	public int getMmsSize(){
		int size = 0;
		if (orgMmsContent != null){
			for (int i = 0; i < orgMmsContent.getMmsContentElments().size(); i++){
				MimeContent content = (MimeContent)orgMmsContent.getMmsContentElments().get(i);
				
				int saveMethod = 0;
				try{
					Session sess = HibernateUtil.currentSession();
					saveMethod = QueryMimeContentSaveStrategy.getSaveStrategy(content.getMimeType(), sess);
				}
				catch(Exception e){
					e.printStackTrace();
				}
				finally{
					HibernateUtil.closeSession();
				}
				
				if (0 == saveMethod){
					size = size + content.getBinaryContent().length;
				}
				else{
					size = size + content.getCharacterContent().getBytes().length;
				}
			}
		}
		
		return size;
	}
	
	public boolean addSlid(int timeInterval, int addPos){
		String smilContent = smilMime.getCharacterContent();
		SimpleSmilControl smilControl = new SimpleSmilControl(smilContent);
		smilControl.addSlid(timeInterval, addPos);
		smilMime.setCharacterContent(smilControl.toString());
		System.out.println(smilControl.toString());
		
		boolean result = false;
		try{
			Session sess = HibernateUtil.currentSession();
			Transaction tx = sess.beginTransaction();
			sess.update(smilMime);
			tx.commit();
			result = true;
		}
		catch(Exception e){
			e.printStackTrace();
			result = false;
		}
		finally{
			HibernateUtil.closeSession();
		}
		
		return result;
	}
	
	public boolean removeSlid(int removePos){
		
		// 将该页内涉及到的元素删除
		String smilContent = smilMime.getCharacterContent();
		SimpleSmilControl smilControl = new SimpleSmilControl(smilContent);
		List listElements = smilControl.getObjectsFromSlid(removePos);
		
		for(int i = 0; i < listElements.size(); i++){
			for (int j = 0; j < orgMmsContent.getMmsContentElments().size(); j++){				
				MimeContent c = (MimeContent)orgMmsContent.getMmsContentElments().get(j);
				if (c.getMimeContentName().equalsIgnoreCase((String)listElements.get(i))){
					delMimeElement(removePos, c);
				}
			}
		}
		
		// 修改SMIL
		smilControl.removeSlid(removePos);
		smilMime.setCharacterContent(smilControl.toString());
		
		boolean result = false;
		try{
			Session sess = HibernateUtil.currentSession();
			Transaction tx = sess.beginTransaction();
			sess.update(orgMmsContent);
			tx.commit();
			result = true;
		}
		catch(Exception e){
			e.printStackTrace();
			result = false;
		}
		finally{
			HibernateUtil.closeSession();
		}
		
		return result;
	}
	
	public int getPageTimeinterval(int pageNum){
		if (pageNum < 0 || pageNum > mmsMap.size()){
			return -1;
		}
		
		List list = orgMmsContent.getMmsContentElments();
		if (list == null){
			return -1;
		}
		
		// 将SMIL内容取出
		MimeContent smilContent = null;
		for(int i = 0; i < list.size(); i++){
			smilContent = (MimeContent)list.get(i);
			if (smilContent.getMimeType().equalsIgnoreCase("application/smil")){
				break;
			}
		}
		
		SimpleSmilControl smilControl = new SimpleSmilControl(smilContent.getCharacterContent());
		return smilControl.getSlidTimeinterval(pageNum);
	}
	
	public boolean updatePageTimeinterval(int pageNum, int newTime){
		if (pageNum < 0 || pageNum > mmsMap.size() || newTime <= 0){
			return false;
		}
		
		List list = orgMmsContent.getMmsContentElments();
		if (list == null){
			return false;
		}
		
		// 将SMIL内容取出
		MimeContent smilContent = null;
		for(int i = 0; i < list.size(); i++){
			smilContent = (MimeContent)list.get(i);
			if (smilContent.getMimeType().equalsIgnoreCase("application/smil")){
				break;
			}
		}
		
		SimpleSmilControl smilControl = new SimpleSmilControl(smilContent.getCharacterContent());
		smilControl.updateSlidTimeInterval(pageNum, newTime);
		smilContent.setCharacterContent(smilControl.toString());
		
		boolean result = false;
		try{
			Session sess = HibernateUtil.currentSession();
			Transaction tx = sess.beginTransaction();
			sess.update(smilContent);
			tx.commit();
			result = true;
		}
		catch(Exception e){
			e.printStackTrace();
			result = false;
		}
		finally{
			HibernateUtil.closeSession();
		}
		
		return true;
	}
	
	
	public boolean addReference(int pageNum, String name, int pageInsertPos){
		
		List list = orgMmsContent.getMmsContentElments();
		if (list == null){
			return false;
		}

		// 将SMIL内容取出
		MimeContent smilContent = null;
		for(int i = 0; i < list.size(); i++){
			smilContent = (MimeContent)list.get(i);
			if (smilContent.getMimeType().equalsIgnoreCase("application/smil")){
				break;
			}
		}

		// 将原始Mime对象找出来
		MimeContent orgContent = null;
		boolean findOrg = false;
		for(int i = 0; i < list.size(); i++){
			orgContent = (MimeContent)list.get(i);
			if (orgContent.getMimeContentName().equals(name)){
				findOrg = true;
				break;
			}
		}
		// 如果没有找到合适的引用,则放弃此次操作
		if (findOrg == false){
			return true;
		}
		
		SimpleSmilControl smilControl = new SimpleSmilControl(smilContent.getCharacterContent());
		//smilControl.addRef(pageNum, name, pageInsertPos);
		smilControl.addMimeContent(orgContent.getMimeType(), pageNum, name, pageInsertPos);
		smilContent.setCharacterContent(smilControl.toString());
		
		boolean result = false;
		try{
			Session sess = HibernateUtil.currentSession();
			Transaction tx = sess.beginTransaction();
			sess.update(smilContent);
			tx.commit();
			result = true;
		}
		catch(Exception e){
			e.printStackTrace();
			result = false;
		}
		finally{
			HibernateUtil.closeSession();
		}
		
		return true;
	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -