/**
* @description:
* @author chenshiqiang E-mail:csqwyyx@163.com
* @date 2014年4月29日 上午12:09:03
* @version 1.0
*/
package com.csq.thesceneryalong.utils.dbmodel;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Element;
import android.location.Location;
import com.csq.thesceneryalong.constant.PathConstants;
import com.csq.thesceneryalong.db.Scenery;
import com.csq.thesceneryalong.db.Track;
import com.csq.thesceneryalong.logic.manager.MyLocationManager;
import com.csq.thesceneryalong.logic.manager.TrackManager;
import com.csq.thesceneryalong.models.models.SceneryType;
import com.csq.thesceneryalong.utils.CaptureMediaUtil.MediaData;
import com.csq.thesceneryalong.utils.DateUtils;
import com.csq.thesceneryalong.utils.Dom4jUtil;
import com.csq.thesceneryalong.utils.StringUtils;
public class SceneryUtil {
public static final String NODE_SCENERY = "Scenery";
public static final String NODE_SCENERY_NAME = "name";
public static final String NODE_SCENERY_DESCRIPTION = "description";
public static final String NODE_SCENERY_TYPE = "type";
public static final String NODE_SCENERY_UNIQUEMACK = "uniqueMack";
public static final String NODE_SCENERY_TIME = "time";
public static final String NODE_SCENERY_LONGITUDE = "longitude";
public static final String NODE_SCENERY_LATITUDE = "latitude";
public static final String NODE_SCENERY_ALTITUDE = "altitude";
public static final String NODE_SCENERY_ACCURACY = "accuracy";
public static final String NODE_SCENERY_SPEED = "speed";
public static final String NODE_SCENERY_BEARING = "bearing";
public static final String NODE_SCENERY_PROVIDER = "provider";
public static final String NODE_SCENERY_ADDRESS = "address";
/**
* @description: 根据media类型和文件路径,生成一个风景
* @author: chenshiqiang E-mail:csqwyyx@163.com
* @param media
* @return
*/
public static Scenery newSceneryOfCurTrack(MediaData media){
Scenery r = null;
Track track = TrackManager.getInstance().getCurTrack();
Location loc = MyLocationManager.getInstance().getCurrentLocation();
if(track != null && loc != null){
String uniqueMack = track.getUniqueMack();
String sceneryType = SceneryType.create(media).name();
String sceneryName = DateUtils.getFormatedDateYMDHMSFile(System.currentTimeMillis());
//风景文件名
String sceneryPath = getSceneryFilePath(uniqueMack, sceneryType, sceneryName);
if(new File(media.filePath).renameTo(new File(sceneryPath))){
r = new Scenery();
r.setAccuracy(loc.getAccuracy());
r.setAltitude(loc.getAltitude());
r.setBearing(loc.getBearing());
r.setLatitude(loc.getLatitude());
r.setLongitude(loc.getLongitude());
r.setName(sceneryName);
r.setProvider(loc.getProvider());
r.setSpeed(loc.getSpeed());
r.setTime(loc.getTime());
r.setTrackId(track.getId());
r.setType(sceneryType);
r.setUniqueMack(uniqueMack);
}
}
return r;
}
/**
* @description: 获得风景文件的完整路径
* @author: chenshiqiang E-mail:csqwyyx@163.com
* @param scenery
* @return
*/
public static String getSceneryFilePath(Scenery scenery){
return getSceneryFilePath(scenery.getUniqueMack(),
scenery.getType(),
scenery.getName());
}
public static String getSceneryFilePath(String uniqueMack, String sceneryType, String sceneryName){
String suffix = ""; //后缀
if(sceneryType.equals(SceneryType.image.name())){
suffix = ".jpg";
}else if(sceneryType.equals(SceneryType.video.name())){
suffix = ".mp4";
}
String path = PathConstants.getTrackpath()
+ File.separator + uniqueMack
+ File.separator + sceneryType;
File f = new File(path);
if(!f.exists()){
f.mkdirs();
}
File nomedia = new File(path + File.separator + ".nomedia");
if(!nomedia.exists()){
try {
nomedia.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return path + File.separator + sceneryName + suffix;
}
/**
* @description: 创建xml文件,并添加到轨迹scenerys节点下面
* @author: chenshiqiang E-mail:csqwyyx@163.com
* @param scenerys
* @param scenery
*/
public static void createXml(Element scenerys, Scenery scenery){
Element sceneryElement = scenerys.addElement(NODE_SCENERY);
Element name = sceneryElement.addElement(NODE_SCENERY_NAME);
name.setText(StringUtils.avoidNull(scenery.getName(), ""));
Element description = sceneryElement.addElement(NODE_SCENERY_DESCRIPTION);
description.setText(StringUtils.avoidNull(scenery.getDescription(), ""));
Element type = sceneryElement.addElement(NODE_SCENERY_TYPE);
type.setText(StringUtils.avoidNull(scenery.getType(), ""));
Element uniqueMack = sceneryElement.addElement(NODE_SCENERY_UNIQUEMACK);
uniqueMack.setText(StringUtils.avoidNull(scenery.getUniqueMack(), ""));
Element time = sceneryElement.addElement(NODE_SCENERY_TIME);
time.setText(StringUtils.avoidNull(scenery.getTime(), ""));
Element longitude = sceneryElement.addElement(NODE_SCENERY_LONGITUDE);
longitude.setText(StringUtils.avoidNull(scenery.getLongitude(), ""));
Element latitude = sceneryElement.addElement(NODE_SCENERY_LATITUDE);
latitude.setText(StringUtils.avoidNull(scenery.getLatitude(), ""));
Element altitude = sceneryElement.addElement(NODE_SCENERY_ALTITUDE);
altitude.setText(StringUtils.avoidNull(scenery.getAltitude(), ""));
Element accuracy = sceneryElement.addElement(NODE_SCENERY_ACCURACY);
accuracy.setText(StringUtils.avoidNull(scenery.getAccuracy(), ""));
Element speed = sceneryElement.addElement(NODE_SCENERY_SPEED);
speed.setText(StringUtils.avoidNull(scenery.getSpeed(), ""));
Element bearing = sceneryElement.addElement(NODE_SCENERY_BEARING);
bearing.setText(StringUtils.avoidNull(scenery.getBearing(), ""));
Element provider = sceneryElement.addElement(NODE_SCENERY_PROVIDER);
provider.setText(StringUtils.avoidNull(scenery.getProvider(), ""));
Element address = sceneryElement.addElement(NODE_SCENERY_ADDRESS);
address.setText(StringUtils.avoidNull(scenery.getAddress(), ""));
}
public static List<Scenery> parseXml(Element scenerysElement){
List<Scenery> ss = new ArrayList<Scenery>();
if(scenerysElement != null){
List<Element> ssEs = scenerysElement.elements(NODE_SCENERY);
if(ssEs != null && !ssEs.isEmpty()){
Scenery scenery = null;
for(Element item : ssEs){
scenery = new Scenery();
scenery.setName(Dom4jUtil.parseString(item,
NODE_SCENERY_NAME,
""));
scenery.setDescription(Dom4jUtil.parseString(item,
NODE_SCENERY_DESCRIPTION,
""));
scenery.setType(Dom4jUtil.parseString(item,
NODE_SCENERY_TYPE,
""));
scenery.setUniqueMack(Dom4jUtil.parseString(item,
NODE_SCENERY_UNIQUEMACK,
""));
scenery.setTime(Dom4jUtil.parseLong(item,
NODE_SCENERY_TIME,
0));
scenery.setLongitude(Dom4jUtil.parseDouble(item,
NODE_SCENERY_LONGITUDE,
0));
scenery.setLatitude(Dom4jUtil.parseDouble(item,
NODE_SCENERY_LATITUDE,
0));
scenery.setAltitude(Dom4jUtil.parseDouble(item,
NODE_SCENERY_ALTITUDE,
0));
scenery.setAccuracy(Dom4jUtil.parseFloat(item,
NODE_SCENERY_ACCURACY,
0));
scenery.setSpeed(Dom4jUtil.parseFloat(item,
NODE_SCENERY_SPEED,
0));
scenery.setBearing(Dom4jUtil.parseFloat(item,
NODE_SCENERY_BEARING,
0));
scenery.setProvider(Dom4jUtil.parseString(item,
NODE_SCENERY_PROVIDER,
""));
scenery.setAddress(Dom4jUtil.parseString(item,
NODE_SCENERY_ADDRESS,
""));
ss.add(scenery);
}
}
}
return ss;
}
}