/* This file is part of ZamiaDroid.
*
* ZamiaDroid is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ZamiaDroid is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ZamiaDroid. If not, see <http://www.gnu.org/licenses/>.
*/
package uni.projecte.dataLayer.CitationManager.Quercus;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.xmlpull.v1.XmlSerializer;
import uni.projecte.controler.PreferencesControler;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import android.util.Xml;
public class QuercusWriter {
private static String relAttXMLNS="http://biodiver.bio.ub.es/vegana/resources/schemas";
private static String relAttXMLNS_XSI="http://www.w3.org/2001/XMLSchema-instance";
private static String relAttXMLVersion="1.2";
private static String relThId="TaxonsAttrib2.xml";
private static String relXsiSchema="http://biodiver.bio.ub.es/vegana/resources/schemas http://biodiver.bio.ub.es/vegana/resources/schemas/ReleveTable1.2.xsd";
private XmlSerializer serializer;
private StringWriter writer;
private boolean createdSideData=false;
private String lastCategory="";
private String plotArea="";
String result;
public void openDocument(String fileName){
writer = new StringWriter();
serializer = Xml.newSerializer();
try {
serializer.setOutput(writer);
serializer.startDocument("UTF-8", true);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
serializer.startTag("", "ReleveTable");
serializer.attribute("", "xmlns",relAttXMLNS);
serializer.attribute("", "xmlns:xsi",relAttXMLNS_XSI);
serializer.attribute("", "code",fileName);
serializer.attribute("", "releve_table_xml_version",relAttXMLVersion);
serializer.attribute("", "thesaurus_id",relThId);
serializer.attribute("", "xsi:schemaLocation",relXsiSchema);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void openReleve(String releveName, String releveType){
try {
Log.d("XML", "<Releve ");
serializer.startTag("","Releve");
serializer.attribute("", "name",releveName);
serializer.attribute("", "type",releveType);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public String convertXML2String(){
//s'han de fer més macoooooooooooo
result=writer.toString();
return result;
}
public void closeDocument(){
try {
serializer.startTag("", "TableVisualOptions");
serializer.endTag("", "TableVisualOptions");
serializer.endTag("", "ReleveTable");
serializer.endDocument();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void addDate(String date){
try {
// <InformatisationDate day="02" hours="13" mins="55" month="09" secs="37" year="2010" />
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date today = null;
try{
today = df.parse(date);
}
catch (ParseException e)
{
e.printStackTrace();
}
serializer.startTag("", "SurveyDate");
serializer.attribute("", "day", String.valueOf(today.getDate()));
serializer.attribute("", "hours", String.valueOf(today.getHours()));
serializer.attribute("", "mins", String.valueOf(today.getMinutes()));
serializer.attribute("", "month", String.valueOf(today.getMonth()));
serializer.attribute("", "secs",String.valueOf(today.getSeconds()));
serializer.attribute("", "year", String.valueOf(today.getYear()+1900));
serializer.endTag("", "SurveyDate");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private boolean newCategory(String category){
return (category.compareTo(this.lastCategory)!=0);
}
public void createSideData(String label, String name, String value, boolean last,String category){
try {
if (!createdSideData || newCategory(category)){
if(newCategory(category) && lastCategory.compareTo("")!=0) {
serializer.endTag("", "SideData");
Log.d("XML", "SideData > ");
}
if(category==null) category="merda";
serializer.startTag("","SideData");
Log.d("XML", "< SideData "+category+" ");
serializer.attribute("","type",category);
this.createdSideData=true;
this.lastCategory=category;
}
if(value!=null && !value.equals("")){
serializer.startTag("","Datum");
serializer.attribute("", "label", label);
serializer.attribute("", "name", name);
serializer.startTag("", "value");
if(value!=null) serializer.text(value);
Log.d("XML", "Datum < > "+name+": "+value+" ");
serializer.endTag("","value");
serializer.endTag("","Datum");
}
if (last){
Log.d("XML", "SideData > ");
serializer.endTag("", "SideData");
createdSideData=false;
lastCategory="";
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void closeReleve(){
try {
Log.d("XML", "Releve > ");
createReleveArea();
serializer.endTag("","Releve");
lastCategory="";
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void addReleveDate(String day, String month, String year){
try {
serializer.startTag("", "SurveyDate");
serializer.attribute("", "day",day);
serializer.attribute("", "month",month);
serializer.attribute("", "year",year);
serializer.endTag("", "SurveyDate");
}catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void addReleveArea(String area){
plotArea=area;
}
private void createReleveArea(){
try {
if(!plotArea.equals("")) {
serializer.startTag("", "PlotArea");
try {
float areaF=Float.parseFloat(plotArea);
serializer.text(areaF+"");
}
catch (NumberFormatException e) {
e.printStackTrace();
}
serializer.endTag("", "PlotArea");
plotArea="";
}
}catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void addReleveComment(String comment){
try {
serializer.startTag("", "ReleveComments");
serializer.text(comment);
serializer.endTag("", "ReleveComments");
}catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void addReleveSintaxon(String sintaxon){
try {
serializer.startTag("", "OriginalSyntaxonName");
serializer.text(sintaxon);
serializer.endTag("", "OriginalSyntaxonName");
}catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void addReleveEntry(String originalName,String value, String sureness,String level, String releveComment){
try {
serializer.startTag("", "ReleveEntry");
if(!level.equals(""))serializer.attribute("", "layer",level);
serializer.attribute("", "original_name",originalName);
serializer.attribute("", "value",value);
if(!sureness.equals(""))serializer.attribute("", "sureness",sureness);
if(!releveComment.equals("")){
serializer.startTag("", "comments");
serializer.text(releveComment);
serializer.endTag("", "comments");
}
serializer.endTag("", "ReleveEntry");
}catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
*
* <CitationCoordinate code="42,12, 1,2" precision="1.0" type="UTM alphanum" units="1m" />
<SecondaryCitationCoordinate code="42,12, 1,2" precision="0.0" type="UTM num" units="1m" />
*
*
* */
public void writeReleveCoordinate(String code){
try {
serializer.startTag("", "CitationCoordinate");
serializer.attribute("", "code",code);
serializer.attribute("", "precision","1.0");
serializer.attribute("", "type","UTM alphanum");
serializer.attribute("", "units","1m");
serializer.endTag("", "CitationCoordinate");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void writeSecondaryCitationCoordinate(String code){
try {
// serializer.attribute("", "origin", origin);
serializer.startTag("", "SecondaryCitationCoordinate");
serializer.attribute("", "code",code);
serializer.attribute("", "precision","1.0");
serializer.attribute("", "type","UTM num");
serializer.attribute("", "units","1m");
serializer.endTag("", "SecondaryCitationCoordinate");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void writeAuthor(String author,boolean authorLast){
try {
// serializer.attribute("", "origin", origin);
if(authorLast && createdSideData){
Log.d("XML", "SideData > ");
serializer.endTag("", "SideData");
createdSideData=false;
lastCategory="";
}
serializer.startTag("", "SurveyAuthor");
if(author==null)serializer.text("");
else serializer.text(author);
serializer.endTag("", "SurveyAuthor");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void writeToFile(String mostra, String fileName, Context c){
try {
File root = Environment.getExternalStorageDirectory();
PreferencesControler pC=new PreferencesControler(c);
if (root.canWrite()){
File gpxfile = new File(Environment.getExternalStorageDirectory()+"/"+pC.getDefaultPath()+"/Citations/", fileName);
FileWriter gpxwriter = new FileWriter(gpxfile);
BufferedWriter out = new BufferedWriter(gpxwriter);
out.write(mostra);
out.close();
}
} catch (IOException e) {
Log.e("sample", "Could not write file " + e.getMessage());
}
}
public void stringToFile(String fileName, Context c){
try {
File root = Environment.getExternalStorageDirectory();
PreferencesControler pC=new PreferencesControler(c);
if (root.canWrite()){
File gpxfile = new File(Environment.getExternalStorageDirectory()+"/"+pC.getDefaultPath()+"/Citations/", fileName+".xml");
FileWriter gpxwriter = new FileWriter(gpxfile);
BufferedWriter out = new BufferedWriter(gpxwriter);
out.write(result);
out.close();
}
} catch (IOException e) {
Log.e("File EXPORT", "Could not write file " + e.getMessage());
}
}
public void createReleveTableEntry(String taxon2, String level) {
try {
serializer.startTag("", "ReleveTableEntry");
if(!level.equals(""))serializer.attribute("", "layer",level);
serializer.attribute("", "original_name",taxon2);
serializer.endTag("", "ReleveTableEntry");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}