📄 simplesmilcontrol.java
字号:
/*
* Created on 2005-6-29
*
* 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.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* 控制SMIL文件的生成。
* @author Rainbow MMS Group Leader —— TrWorks
*/
public class SimpleSmilControl {
Document doc = null;
Element body = null;
List listSlid = null;
/**
* 构造SMIL的XML文本控制对象
*
*/
public SimpleSmilControl(){
doc = DocumentHelper.createDocument();
//doc.setXMLEncoding("iso5589-1");
Element smil = doc.addElement("smil");
body = smil.addElement("body");
}
/**
* 构造SMIL的XML文本控制对象
* @param smilContent SMIL文件的文本全内容
*/
public SimpleSmilControl(String smilContent){
SAXReader builder = new SAXReader();
try {
doc = DocumentHelper.parseText(smilContent);;
List list = doc.content();
Element tmp = (Element) list.get(0);
Iterator i = tmp.elementIterator();
body = (Element) i.next();
listSlid = body.elements();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 添加SMIL的一桢
*
* @param timeInterval
* 要添加桢显示的时间,毫秒单位,例如形成效果: <par dur="10000ms"/>
* @return 该桢的编号
*/
public int addSlid(int timeInterval){
Element pur = body.addElement("par");
pur.setAttributeValue("dur", (String.valueOf(timeInterval) + "s"));
return body.elements().size() - 1;
}
/**
* 添加桢
* @param timeInterval 显示时间
* @param afterNo 在哪桢后添加
* @return 新的桢的编号
*/
public int addSlid(int timeInterval, int afterNo){
if (timeInterval < 1 || afterNo < 0){
return 0;
}
Element pur = body.addElement("par");
Element tmp = (Element)pur.clone();
body.remove(pur);
tmp.setAttributeValue("dur", (String.valueOf(timeInterval) + "s"));
List list = body.elements();
list.add(afterNo, tmp);
return afterNo;
}
/**
* 向指定桢内添加文本文件的名称,例如形成效果:<text src = "1.txt" />
* @param slidNo 指定桢编号
* @param textFileName 文件名称
*/
public void addText(int slidNo, String textFileName){
addObject(slidNo, "text", textFileName);
}
/**
* 向指定桢内添加图像文件的名称,例如形成效果:<img src = "1.jpg" />
* @param slidNo 指定桢编号
* @param imageFileName 文件名称
*/
public void addImage(int slidNo, String imageFileName){
addObject(slidNo, "img", imageFileName);
}
/**
* 向指定桢内添加声音文件的名称,例如形成效果:<img src = "1.midi" />
* @param slidNo 指定桢编号
* @param imageFileName 文件名称
*/
public void addAudio(int slidNo, String imageFileName){
addObject(slidNo, "audio", imageFileName);
}
/**
* 向指定桢内添加文件的名称,例如形成效果:<ref src = "1.jpg" />
* @param slidNo 指定桢编号
* @param refFileName 文件名称
*/
public void addRef(int slidNo, String refFileName){
addObject(slidNo, "ref", refFileName);
}
/**
* 向指定桢内添加文件的名称
* @param slidNo 指定桢编号
* @param refFileName 文件名称
* @param pos 位置
*/
public void addRef(int slidNo, String refFileName, int pos){
List parList = body.elements();
Element parElement = (Element)parList.get(slidNo);
List refList = parElement.elements();
if (refList.size() < pos){
System.out.println("SimpleSmilControl addRef Failed -- pos Param error!");
return;
}
Element tmpRefElement = parElement.addElement("ref");
Element newRefElement = (Element)tmpRefElement.clone();
newRefElement.setAttributeValue("src", refFileName);
parElement.remove(tmpRefElement);
refList.add(pos, newRefElement);
Element slidElement = (Element)listSlid.get(slidNo);
}
/**
* 向指定桢内添加文本文件的名称
* @param slidNo 指定桢编号
* @param refFileName 文件名称
* @param pos 位置
*/
public void addText(int slidNo, String refFileName, int pos){
List parList = body.elements();
Element parElement = (Element)parList.get(slidNo);
List refList = parElement.elements();
if (refList.size() < pos){
System.out.println("SimpleSmilControl addText Failed -- pos Param error!");
return;
}
Element tmpRefElement = parElement.addElement("text");
Element newRefElement = (Element)tmpRefElement.clone();
newRefElement.setAttributeValue("src", refFileName);
parElement.remove(tmpRefElement);
refList.add(pos, newRefElement);
Element slidElement = (Element)listSlid.get(slidNo);
}
/**
* 向指定桢内添加图像文件的名称
* @param slidNo 指定桢编号
* @param refFileName 文件名称
* @param pos 位置
*/
public void addImage(int slidNo, String refFileName, int pos){
List parList = body.elements();
Element parElement = (Element)parList.get(slidNo);
List refList = parElement.elements();
if (refList.size() < pos){
System.out.println("SimpleSmilControl addText Failed -- pos Param error!");
return;
}
Element tmpRefElement = parElement.addElement("img");
Element newRefElement = (Element)tmpRefElement.clone();
newRefElement.setAttributeValue("src", refFileName);
parElement.remove(tmpRefElement);
refList.add(pos, newRefElement);
Element slidElement = (Element)listSlid.get(slidNo);
}
/**
* 向指定桢内添加声音文件的名称
* @param slidNo 指定桢编号
* @param refFileName 文件名称
* @param pos 位置
*/
public void addAudio(int slidNo, String refFileName, int pos){
List parList = body.elements();
Element parElement = (Element)parList.get(slidNo);
List refList = parElement.elements();
if (refList.size() < pos){
System.out.println("SimpleSmilControl addText Failed -- pos Param error!");
return;
}
Element tmpRefElement = parElement.addElement("audio");
Element newRefElement = (Element)tmpRefElement.clone();
newRefElement.setAttributeValue("src", refFileName);
parElement.remove(tmpRefElement);
refList.add(pos, newRefElement);
Element slidElement = (Element)listSlid.get(slidNo);
}
/**
* 向指定桢内添加文件的名称
* @param slidNo 指定桢编号
* @param type 类型
* @param pos 文件名称
*/
protected void addObject(int slidNo, String type, String fileName){
List parList = body.elements();
Element parElement = (Element)parList.get(slidNo);
List refList = parElement.elements();
Element tmpRefElement = parElement.addElement(type);
Element newRefElement = (Element)tmpRefElement.clone();
newRefElement.setAttributeValue("src", fileName);
parElement.remove(tmpRefElement);
refList.add(newRefElement);
}
/**
* 删除桢
* @param slidNo 指定桢编号
*/
public void removeSlid(int slidNo){
List list = body.elements();
if (slidNo <= list.size()){
list.remove(slidNo);
}
}
/**
* 删除内容
* @param slidNO 指定桢编号
* @param fileName 文件名
* @param delSlidIfNoContent 如果该桢中删除内容后,没有其他内容了,则是否连同该桢一起删掉
*/
public void removeObject(int slidNO, String fileName, boolean delSlidIfNoContent){
List list = body.elements();
Element parContent = (Element)list.get(slidNO);
List refList = parContent.elements();
if (refList != null){
for (int i = 0; i < refList.size(); i++){
Element refElement = (Element)refList.get(i);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -