/*******************************************************************************
blogger-cli Консольные инструменты по работе с blogger.com
(с) Камнев Георгий Павлович 2011 GPLv2
Данная программа является свободным программным обеспечением. Вы вправе
распространять ее и/или модифицировать в соответствии с условиями версии 2
либо по вашему выбору с условиями более поздней версии
Стандартной Общественной Лицензии GNU, опубликованной Free Software Foundation.
Мы распространяем данную программу в надежде на то, что она будет вам полезной,
однако НЕ ПРЕДОСТАВЛЯЕМ НА НЕЕ НИКАКИХ ГАРАНТИЙ,
в том числе ГАРАНТИИ ТОВАРНОГО СОСТОЯНИЯ ПРИ ПРОДАЖЕ
и ПРИГОДНОСТИ ДЛЯ ИСПОЛЬЗОВАНИЯ В КОНКРЕТНЫХ ЦЕЛЯХ.
Для получения более подробной информации ознакомьтесь
со Стандартной Общественной Лицензией GNU.
Вместе с данной программой вы должны были получить экземпляр
Стандартной Общественной Лицензии GNU.
Если вы его не получили, сообщите об этом в Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*******************************************************************************/
package tv.cofe.blogger;
import java.io.File;
import java.nio.charset.Charset;
import java.util.Date;
import org.gocha.collection.Iterators;
import org.gocha.files.FileUtil;
import org.gocha.inetools.http.FileCharsetDetector;
import org.gocha.xml.XMLUtil;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* Представляет из себя html файл
* @author gocha
*/
public class HtmlFile
{
protected HtmlFile (){
}
private File file = null;
private org.w3c.dom.Node xmlNode = null;
/**
* Читает Html файл, определяет автоматом кодировку из тега meta...
* @param file Файл
* @return Файл
*/
public static HtmlFile read(File file){
if ( file== null )
throw new IllegalArgumentException("file==null");
if( !file.exists() )
throw new Error(CLI.messages().fileNotExists(file));
if( !file.canRead() )
throw new Error(CLI.messages().fileCantRead(file));
if( !file.isFile() )
throw new Error(CLI.messages().isNotFile(file));
FileCharsetDetector detect = new FileCharsetDetector(file);
Charset cs = detect.getCharset();
if( cs==null ){
cs = Charset.defaultCharset();
System.out.println(CLI.messages().usedDefaultCharset(cs));
}
HtmlFile hfile = new HtmlFile();
String fileBody = FileUtil.readAllText(file, cs);
// clean html
hfile.xmlNode = PostHelper.parseHtml(fileBody);
hfile.file = file;
return hfile;
}
/**
* Возвращает дату модификации файла
* @return Дата модификации
*/
public Date getLastModifiedDate() {
long fdate = file.lastModified();
if( fdate==0 )fdate = new Date(fdate).getTime();
return new Date(fdate);
}
/**
* Возвращает файл html
* @return файл html
*/
public File getFile() {
return file;
}
/**
* Возвращает XML DOM для html
* @return xml node
*/
public Node getXMLNode() {
return xmlNode;
}
/**
* Возвращает заголовок из /html/head/title
* @return Заголовок или null
*/
public String getTitle(){
String title = XMLUtil.xpathString("/html/head/title/text()", xmlNode);
return title;
}
/**
* Возвращает тело html из /html/body/*; либо все содержимое если нет /html/body
* @return Тело
*/
public String getBody(){
Node nBody = XMLUtil.xpathNode("/html/body", xmlNode);
if( nBody!=null ){
StringBuilder sb = new StringBuilder();
if( nBody.hasChildNodes() ){
for( Node n : Iterators.xmlNodes(nBody.getChildNodes()) ){
sb.append(XMLUtil.toXMLString(n));
}
}
return sb.toString();
}
NodeList nlBody = XMLUtil.xpathNodeSet("/html/body/*", xmlNode);
if( nlBody!=null ){
return XMLUtil.toXMLString(nlBody);
}
String all = XMLUtil.toXMLString(xmlNode);
return all;
}
}