📄 mmssmilpageunitcollection.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 + -