Java tutorial
package sdf_manager; import java.awt.Desktop; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CodingErrorAction; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.Set; import java.util.StringTokenizer; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Templates; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import com.lowagie.text.FontFactory; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.hibernate.Session; import org.hibernate.Transaction; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xhtmlrenderer.pdf.ITextFontResolver; import org.xhtmlrenderer.pdf.ITextRenderer; import pojos.Biogeo; import pojos.Doc; import pojos.DocLink; import pojos.Habitat; import pojos.HabitatClass; import pojos.Impact; import pojos.Map; import pojos.Mgmt; import pojos.MgmtBody; import pojos.MgmtPlan; import pojos.NationalDtype; import pojos.OtherSpecies; import pojos.Ownership; import pojos.Region; import pojos.Resp; import pojos.Site; import pojos.SiteBiogeo; import pojos.SiteOwnership; import pojos.SiteRelation; import pojos.Species; import sdf_manager.util.SDF_Util; import sdf_manager.util.XmlGenerationUtils; import com.lowagie.text.pdf.BaseFont; /** * * @author charbda */ public class ExporterSiteHTML implements Exporter { /** * Flag to indicate if there have been errors in export. */ private boolean hasErrors = false; private String siteCode; private String fileName; //private Writer writer; private ArrayList sitecodes = new ArrayList(); private File outFile; private FileWriter outFileWriter; private PrintWriter out; private final static org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager .getLogger(ExporterSiteHTML.class.getName()); /** * * @param siteCode */ public ExporterSiteHTML(String siteCode, String logFile) { this.siteCode = siteCode; //this.encoding = "UTF-8"; this.initLogFile(logFile); } /** * Logs to the common SDFManager log file. * @param msg text to log */ public void log(String msg) { ExporterSiteHTML.log.info(msg); } /** * * @param fileName */ public void initLogFile(String fileName) { try { outFile = new File(fileName); outFileWriter = new FileWriter(outFile); out = new PrintWriter(outFileWriter); } catch (Exception e) { e.printStackTrace(); } } /** * Logs to special Site HTMl log file. * @param msg text to log */ private void logToFile(String msg) { out.write(msg); if (!msg.endsWith("\n")) { out.write("\n"); } hasErrors = true; } /** * * @param fileName * @return */ @Override public boolean processDatabase(String fileName) { ExporterSiteHTML.log.info("Starting processDatabase. The file name is:::" + fileName); try { SDF_Util.getProperties(); this.fileName = fileName; this.loadSitecodes(); this.processDatabase(); } catch (Exception e) { log("An error has occurred in processDatabase. Error Message:::" + e.getMessage() + "\n PLease check the log file for more details"); //e.printStackTrace(); ExporterSiteHTML.log .error("An error has occurred in processDatabase. Error Message:::" + e.getMessage()); return false; } finally { IOUtils.closeQuietly(out); //no need to have an empty logfile if no errors if (!hasErrors) { FileUtils.deleteQuietly(outFile); } } return true; } /** * Loads the data of the site. */ public void loadSitecodes() { ExporterSiteHTML.log.info("Loading the data of the site:::" + siteCode); Session session = HibernateUtil.getSessionFactory().openSession(); try { session.getTransaction().begin(); String hql = "select site.siteCode from Site as site where site.siteCode='" + siteCode + "' order by site.siteCode"; Iterator itrSites = session.createQuery(hql).iterate(); while (itrSites.hasNext()) { Object tuple = itrSites.next(); String sitecode = (String) tuple; this.sitecodes.add(sitecode); } session.getTransaction().commit(); } catch (Exception e) { session.getTransaction().rollback(); log("An error has occurred in loadSitecodes. Error Message:::" + e.getMessage()); ExporterSiteHTML.log.error("An error has occurred in loadSitecodes. Error Message:::" + e.getMessage()); } finally { session.close(); } } /** * * @return */ public Document processDatabase() { OutputStream os = null; Session session = HibernateUtil.getSessionFactory().openSession(); try { SDF_Util.getProperties(); DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = dbfac.newDocumentBuilder(); Iterator itrSites = this.sitecodes.iterator(); int flush = 0; ExporterSiteHTML.log.info("Parsing sitecodes..."); Document doc = docBuilder.newDocument(); Element sdfs = doc.createElement("sdfs"); doc.appendChild(sdfs); while (itrSites.hasNext()) { Element sdf = doc.createElement("sdf"); Element siteIdentification = doc.createElement("siteIdentification"); Site site = (Site) session.get(Site.class, (String) itrSites.next()); // results.get(i); siteIdentification.appendChild(doc.createElement("siteType")) .appendChild(doc.createTextNode(fmt(site.getSiteType(), "siteType"))); siteIdentification.appendChild(doc.createElement("siteCode")) .appendChild(doc.createTextNode(fmt(site.getSiteCode().toUpperCase(), "siteCode"))); ExporterSiteHTML.log.info("Parsing sitecode:::" + site.getSiteCode()); siteIdentification.appendChild(doc.createElement("siteName")) .appendChild(doc.createTextNode(fmt(site.getSiteName(), "siteName"))); if (site.getSiteCompDate() != null) { siteIdentification.appendChild(doc.createElement("compilationDate")) .appendChild(doc.createTextNode( fmt(SDF_Util.getFormatDateToXML(site.getSiteCompDate()), "compilationDate"))); } if (site.getSiteUpdateDate() != null) { siteIdentification.appendChild(doc.createElement("updateDate")).appendChild(doc.createTextNode( fmt(SDF_Util.getFormatDateToXML(site.getSiteUpdateDate()), "updateDate"))); } Resp resp = site.getResp(); if (resp != null) { Element respNode = doc.createElement("respondent"); respNode.appendChild(doc.createElement("name")) .appendChild(doc.createTextNode(fmt(resp.getRespName(), "respName"))); if (resp.getRespAddressArea() != null && !resp.getRespAddressArea().equals("")) { Element addresElem = doc.createElement("address"); // THE NAME DOES NOT MATCH THEIR RESPECTIVES addresElem.appendChild(doc.createElement("adminUnit")) .appendChild(doc.createTextNode(fmt(resp.getRespAdminUnit(), "adminUnit"))); addresElem.appendChild(doc.createElement("thoroughfare")) .appendChild(doc.createTextNode(fmt(resp.getRespLocatorName(), "locatorName"))); addresElem.appendChild(doc.createElement("locatorDesignator")) .appendChild(doc.createTextNode(fmt(resp.getRespThoroughFare(), "thoroughfare"))); addresElem.appendChild(doc.createElement("postCode")) .appendChild(doc.createTextNode(fmt(resp.getRespAddressArea(), "addressArea"))); addresElem.appendChild(doc.createElement("postName")) .appendChild(doc.createTextNode(fmt(resp.getRespPostName(), "postName"))); addresElem.appendChild(doc.createElement("addressArea")) .appendChild(doc.createTextNode(fmt(resp.getRespPostCode(), "postCode"))); addresElem.appendChild(doc.createElement("locatorName")).appendChild( doc.createTextNode(fmt(resp.getRespLocatorDesig(), "locatorDesignator"))); respNode.appendChild(addresElem); } else { Element addresElem = doc.createElement("address"); addresElem.appendChild(doc.createElement("addressArea")) .appendChild(doc.createTextNode(fmt(resp.getRespAddress(), "addressArea"))); respNode.appendChild(addresElem); } respNode.appendChild(doc.createElement("email")) .appendChild(doc.createTextNode(fmt(resp.getRespEmail(), "respEmail"))); siteIdentification.appendChild(respNode); } if (SDF_ManagerApp.isEmeraldMode()) { XmlGenerationUtils.appendDateElement(site.getSiteProposedAsciDate(), siteIdentification, "asciProposalDate", doc); if (site.getSiteProposedAsciDate() == null) { XmlGenerationUtils.appendDateElement(XmlGenerationUtils.nullDate(), siteIdentification, "asciProposalDate", doc); } XmlGenerationUtils.appendDateElement(site.getSiteConfirmedCandidateAsciDate(), siteIdentification, "asciConfirmedCandidateDate", doc); XmlGenerationUtils.appendDateElement(site.getSiteConfirmedAsciDate(), siteIdentification, "asciConfirmationDate", doc); XmlGenerationUtils.appendDateElement(site.getSiteDesignatedAsciDate(), siteIdentification, "asciDesignationDate", doc); siteIdentification.appendChild(doc.createElement("asciLegalReference")) .appendChild(doc.createTextNode(fmt(site.getSiteAsciLegalRef(), "asciLegalReference"))); } else { if (site.getSiteSpaDate() != null) { siteIdentification.appendChild(doc.createElement("spaClassificationDate")).appendChild( doc.createTextNode(fmt(SDF_Util.getFormatDateToXML(site.getSiteSpaDate()), "spaClassificationDate"))); } else { siteIdentification.appendChild(doc.createElement("spaClassificationDate")) .appendChild(doc.createTextNode(fmt("0000-00", "spaClassificationDate"))); } siteIdentification.appendChild(doc.createElement("spaLegalReference")) .appendChild(doc.createTextNode(fmt(site.getSiteSpaLegalRef(), "spaLegalReference"))); if (site.getSiteSciPropDate() != null) { siteIdentification.appendChild(doc.createElement("sciProposalDate")).appendChild( doc.createTextNode(fmt(SDF_Util.getFormatDateToXML(site.getSiteSciPropDate()), "sciProposalDate"))); } if (site.getSiteSciConfDate() != null) { siteIdentification.appendChild(doc.createElement("sciConfirmationDate")).appendChild( doc.createTextNode(fmt(SDF_Util.getFormatDateToXML(site.getSiteSciConfDate()), "sciConfirmationDate"))); } if (site.getSiteSacDate() != null) { siteIdentification.appendChild(doc.createElement("sacDesignationDate")).appendChild( doc.createTextNode(fmt(SDF_Util.getFormatDateToXML(site.getSiteSacDate()), "sacDesignationDate"))); } siteIdentification.appendChild(doc.createElement("sacLegalReference")) .appendChild(doc.createTextNode(fmt(site.getSiteSacLegalRef(), "sacLegalReference"))); } siteIdentification.appendChild(doc.createElement("explanations")) .appendChild(doc.createTextNode(fmt(site.getSiteExplanations(), "explanations"))); sdf.appendChild(siteIdentification); /**************LOCATION***************/ Element location = doc.createElement("siteLocation"); location.appendChild(doc.createElement("longitude")) .appendChild(doc.createTextNode(fmt(site.getSiteLongitude(), "longitude"))); location.appendChild(doc.createElement("latitude")) .appendChild(doc.createTextNode(fmt(site.getSiteLatitude(), "latitude"))); location.appendChild(doc.createElement("area")) .appendChild(doc.createTextNode(fmt(site.getSiteArea(), "area"))); location.appendChild(doc.createElement("marineAreaPercentage")) .appendChild(doc.createTextNode(fmt(site.getSiteMarineArea(), "marineArea"))); location.appendChild(doc.createElement("siteLength")) .appendChild(doc.createTextNode(fmt(site.getSiteLength(), "siteLength"))); /*regions*/ Element regions = doc.createElement("adminRegions"); Set siteRegions = site.getRegions(); Iterator itr = siteRegions.iterator(); while (itr.hasNext()) { Region r = (Region) itr.next(); Element rElem = doc.createElement("region"); rElem.appendChild(doc.createElement("code")) .appendChild(doc.createTextNode(fmt(r.getRegionCode(), "regionCode"))); //descomentado--> adaptar nuevo xml rElem.appendChild(doc.createElement("name")) .appendChild(doc.createTextNode(fmt(r.getRegionName(), "regionName"))); regions.appendChild(rElem); } //adaptacion al nuevo xml location.appendChild(regions); /*bioregions*/ Element biogeoRegions = doc.createElement("biogeoRegions"); Set siteBioRegions = site.getSiteBiogeos(); if (!(siteBioRegions.isEmpty())) { Iterator itbr = siteBioRegions.iterator(); while (itbr.hasNext()) { SiteBiogeo s = (SiteBiogeo) itbr.next(); Element biogeoElement = doc.createElement("biogeoRegions"); Biogeo b = s.getBiogeo(); //this XMl doesn't need validate, so it's better to use bioregion name instead bioregion code biogeoElement.appendChild(doc.createElement("code")) .appendChild(doc.createTextNode(fmt(b.getBiogeoName(), "bioRegionCode"))); biogeoElement.appendChild(doc.createElement("percentage")) .appendChild(doc.createTextNode(fmt(s.getBiogeoPercent(), "biogeoPercent"))); location.appendChild(biogeoElement); } } sdf.appendChild(location); /********ECOLOGICAL INFORMATION***********/ //adptacion nuevo XML Element ecologicalInformation = doc.createElement("ecologicalInformation"); /************HABITATS****************/ Element habitatsTypes = doc.createElement("habitatTypes"); Set siteHabs = site.getHabitats(); itr = siteHabs.iterator(); while (itr.hasNext()) { Habitat h = (Habitat) itr.next(); Element hElem = doc.createElement("habitatType"); hElem.appendChild(doc.createElement("code")) .appendChild(doc.createTextNode(fmt(h.getHabitatCode(), "habitatCode"))); hElem.appendChild(doc.createElement("priorityFormOfHabitatType")).appendChild( doc.createTextNode(fmt(toBoolean(h.getHabitatPriority()), "habitatPriority"))); hElem.appendChild(doc.createElement("nonPresenceInSite")) .appendChild(doc.createTextNode(fmt(toBoolean(h.getHabitatNp()), "habitatNp"))); hElem.appendChild(doc.createElement("coveredArea")) .appendChild(doc.createTextNode(fmt(h.getHabitatCoverHa(), "habitatCover"))); hElem.appendChild(doc.createElement("caves")) .appendChild(doc.createTextNode(fmt(h.getHabitatCaves(), "habitatCaves"))); hElem.appendChild(doc.createElement("observationDataQuality")) .appendChild(doc.createTextNode(fmt(h.getHabitatDataQuality(), "habitatDataQuality"))); hElem.appendChild(doc.createElement("representativity")).appendChild( doc.createTextNode(fmt(h.getHabitatRepresentativity(), "habitatRepresentativity"))); hElem.appendChild(doc.createElement("relativeSurface")) .appendChild(doc.createTextNode(fmt(h.getHabitatRelativeSurface(), "relativeSurface"))); hElem.appendChild(doc.createElement("conservation")).appendChild( doc.createTextNode(fmt(h.getHabitatConservation(), "habitatConservation"))); hElem.appendChild(doc.createElement("global")) .appendChild(doc.createTextNode(fmt(h.getHabitatGlobal(), "habitatGlobal"))); habitatsTypes.appendChild(hElem); } ecologicalInformation.appendChild(habitatsTypes); /************SPECIES****************/ Element specieses = doc.createElement("species"); Set siteSpecies = site.getSpecieses(); itr = siteSpecies.iterator(); while (itr.hasNext()) { Species s = (Species) itr.next(); Element sElem = doc.createElement("speciesPopulation"); sElem.appendChild(doc.createElement("speciesGroup")) .appendChild(doc.createTextNode(fmt(s.getSpeciesGroup(), "speciesGroup"))); sElem.appendChild(doc.createElement("speciesCode")) .appendChild(doc.createTextNode(fmt(s.getSpeciesCode(), "speciesCode"))); sElem.appendChild(doc.createElement("scientificName")) .appendChild(doc.createTextNode(fmt(s.getSpeciesName(), "speciesName"))); sElem.appendChild(doc.createElement("sensitiveInfo")).appendChild( doc.createTextNode(fmt(toBoolean(s.getSpeciesSensitive()), "speciesSensitive"))); sElem.appendChild(doc.createElement("nonPresenceInSite")) .appendChild(doc.createTextNode(fmt(toBoolean(s.getSpeciesNp()), "speciesNP"))); sElem.appendChild(doc.createElement("populationType")) .appendChild(doc.createTextNode(fmtToLowerCase(s.getSpeciesType(), "speciesType"))); Element popElem = doc.createElement("populationSize"); popElem.appendChild(doc.createElement("lowerBound")) .appendChild(doc.createTextNode(fmt(s.getSpeciesSizeMin(), "speciesSizeMin"))); popElem.appendChild(doc.createElement("upperBound")) .appendChild(doc.createTextNode(fmt(s.getSpeciesSizeMax(), "speciesSizeMax"))); popElem.appendChild(doc.createElement("countingUnit")) .appendChild(doc.createTextNode(fmt(s.getSpeciesUnit(), "speciesUnit"))); sElem.appendChild(popElem); if (s.getSpeciesCategory() != null) { if (!("").equals(s.getSpeciesCategory().toString())) { sElem.appendChild(doc.createElement("abundanceCategory")).appendChild( doc.createTextNode(fmtToUpperCase(s.getSpeciesCategory(), "speciesCategory"))); } } sElem.appendChild(doc.createElement("dataQuality")) .appendChild(doc.createTextNode(fmt(s.getSpeciesDataQuality(), "speciesQuality"))); // sElem.appendChild(doc.createElement("observationDataQuality")).appendChild(doc.createTextNode(fmt(s.getSpeciesDataQuality(), "speciesQuality"))); sElem.appendChild(doc.createElement("population")) .appendChild(doc.createTextNode(fmt(s.getSpeciesPopulation(), "speciesPopulation"))); sElem.appendChild(doc.createElement("conservation")).appendChild( doc.createTextNode(fmt(s.getSpeciesConservation(), "speciesConservation"))); sElem.appendChild(doc.createElement("isolation")) .appendChild(doc.createTextNode(fmt(s.getSpeciesIsolation(), "speciesIsolation"))); sElem.appendChild(doc.createElement("global")) .appendChild(doc.createTextNode(fmt(s.getSpeciesGlobal(), "speciesGlobal"))); specieses.appendChild(sElem); } siteSpecies = site.getOtherSpecieses(); itr = siteSpecies.iterator(); while (itr.hasNext()) { OtherSpecies s = (OtherSpecies) itr.next(); Element sElem = doc.createElement("speciesPopulation"); sElem.appendChild(doc.createElement("speciesGroup")) .appendChild(doc.createTextNode(fmt(s.getOtherSpeciesGroup(), "ospeciesGroup"))); sElem.appendChild(doc.createElement("speciesCode")) .appendChild(doc.createTextNode(fmt(s.getOtherSpeciesCode(), "ospeciesCode"))); sElem.appendChild(doc.createElement("scientificName")) .appendChild(doc.createTextNode(fmt(s.getOtherSpeciesName(), "ospeciesName"))); sElem.appendChild(doc.createElement("sensitiveInfo")).appendChild( doc.createTextNode(fmt(toBoolean(s.getOtherSpeciesSensitive()), "ospeciesSensitive"))); if (s.getOtherSpeciesNp() != null) { if (!(("").equals(s.getOtherSpeciesNp().toString()))) { sElem.appendChild(doc.createElement("nonPresenceInSite")).appendChild( doc.createTextNode(fmt(toBoolean(s.getOtherSpeciesNp()), "ospeciesNP"))); } } Element popElem = doc.createElement("populationSize"); popElem.appendChild(doc.createElement("lowerBound")) .appendChild(doc.createTextNode(fmt(s.getOtherSpeciesSizeMin(), "speciesSizeMin"))); popElem.appendChild(doc.createElement("upperBound")) .appendChild(doc.createTextNode(fmt(s.getOtherSpeciesSizeMax(), "speciesSizeMax"))); popElem.appendChild(doc.createElement("countingUnit")) .appendChild(doc.createTextNode(fmt(s.getOtherSpeciesUnit(), "speciesUnit"))); sElem.appendChild(popElem); if (s.getOtherSpeciesCategory() != null) { if (!(("").equals(s.getOtherSpeciesCategory().toString()))) { sElem.appendChild(doc.createElement("abundanceCategory")).appendChild( doc.createTextNode(fmt(s.getOtherSpeciesCategory(), "ospeciesCategory"))); } } //modificar porque es un tree primero es motivations y despues el nodo motivation (solo en el caso que haya motivations es other species en caso contrario //es species if (s.getOtherSpeciesMotivation() != null && !(("").equals(s.getOtherSpeciesMotivation()))) { Element sElemMot = doc.createElement("motivations"); String strMotivation = s.getOtherSpeciesMotivation(); StringTokenizer st2 = new StringTokenizer(strMotivation, ","); while (st2.hasMoreElements()) { String mot = (String) st2.nextElement(); sElemMot.appendChild(doc.createElement("motivation")) .appendChild(doc.createTextNode(fmt(mot, "ospeciesMotivation"))); sElem.appendChild(sElemMot); } } specieses.appendChild(sElem); } ecologicalInformation.appendChild(specieses); sdf.appendChild(ecologicalInformation); /**************DESCRIPTION***********************/ Element description = doc.createElement("siteDescription"); Set classes = site.getHabitatClasses(); itr = classes.iterator(); while (itr.hasNext()) { HabitatClass h = (HabitatClass) itr.next(); Element cElem = doc.createElement("habitatClass"); cElem.appendChild(doc.createElement("code")) .appendChild(doc.createTextNode(fmt(h.getHabitatClassCode(), "habitatClassCode"))); cElem.appendChild(doc.createElement("coveragePercentage")) .appendChild(doc.createTextNode(fmt(h.getHabitatClassCover(), "habitatClassCover"))); description.appendChild(cElem); } description.appendChild(doc.createElement("otherSiteCharacteristics")).appendChild( doc.createTextNode(fmt(site.getSiteCharacteristics(), "otherSiteCharacteristics"))); description.appendChild(doc.createElement("qualityAndImportance")) .appendChild(doc.createTextNode(fmt(site.getSiteQuality(), "qualityAndImportance"))); Element impacts = doc.createElement("impacts"); Set siteImpacts = site.getImpacts(); itr = siteImpacts.iterator(); while (itr.hasNext()) { Element iElem = doc.createElement("impact"); Impact im = (Impact) itr.next(); iElem.appendChild(doc.createElement("code")) .appendChild(doc.createTextNode(fmt(im.getImpactCode(), "impactCode"))); iElem.appendChild(doc.createElement("rank")) .appendChild(doc.createTextNode(fmt(im.getImpactRank(), "impactRank"))); if (im.getImpactPollutionCode() != null) { if (!("").equals(im.getImpactPollutionCode().toString())) { iElem.appendChild(doc.createElement("pollutionCode")).appendChild( doc.createTextNode(fmt(im.getImpactPollutionCode(), "impactPollution"))); } } iElem.appendChild(doc.createElement("occurrence")) .appendChild(doc.createTextNode(fmt(im.getImpactOccurrence(), "impactOccurrece"))); String impacType = ""; if (im.getImpactType() != null) { if (("P").equals(im.getImpactType().toString())) { impacType = "Positive"; } else { impacType = "Negative"; } } iElem.appendChild(doc.createElement("natureOfImpact")) .appendChild(doc.createTextNode(fmt(impacType, "natureOfImpact"))); impacts.appendChild(iElem); } description.appendChild(impacts); Element ownership = doc.createElement("ownership"); Set owners = site.getSiteOwnerships(); itr = owners.iterator(); while (itr.hasNext()) { SiteOwnership o = (SiteOwnership) itr.next(); Ownership o2 = o.getOwnership(); Element oElem = doc.createElement("ownershipPart"); oElem.appendChild(doc.createElement("ownershiptype")) .appendChild(doc.createTextNode(fmt(o2.getOwnershipCode(), "ownershipType"))); oElem.appendChild(doc.createElement("percent")) .appendChild(doc.createTextNode(fmt(o.getOwnershipPercent(), "ownershipPercent"))); ownership.appendChild(oElem); } description.appendChild(ownership); Element documentation = doc.createElement("documentation"); Doc docObj = site.getDoc(); if (docObj != null) { documentation.appendChild(doc.createElement("description")) .appendChild(doc.createTextNode(fmt(docObj.getDocDescription(), "docDescription"))); Set docLinks = docObj.getDocLinks(); itr = docLinks.iterator(); Element links = doc.createElement("links"); while (itr.hasNext()) { DocLink docLink = (DocLink) itr.next(); links.appendChild(doc.createElement("link")) .appendChild(doc.createTextNode(fmt(docLink.getDocLinkUrl(), "linkURL"))); } documentation.appendChild(links); description.appendChild(documentation); } sdf.appendChild(description); /********PROTECTION**********/ Element protection = doc.createElement("siteProtection"); Element natDesigs = doc.createElement("nationalDesignations"); Set dsigs = site.getNationalDtypes(); itr = dsigs.iterator(); while (itr.hasNext()) { NationalDtype dtype = (NationalDtype) itr.next(); Element nElem = doc.createElement("nationalDesignation"); nElem.appendChild(doc.createElement("designationCode")) .appendChild(doc.createTextNode(fmt(dtype.getNationalDtypeCode(), "dtypecode"))); nElem.appendChild(doc.createElement("cover")) .appendChild(doc.createTextNode(fmt(dtype.getNationalDtypeCover(), "dtypecover"))); natDesigs.appendChild(nElem); } protection.appendChild(natDesigs); Set rels = site.getSiteRelations(); if (!rels.isEmpty()) { Element relations = doc.createElement("relations"); Element nationalRelations = doc.createElement("nationalRelationships"); Element internationalRelations = doc.createElement("internationalRelationships"); itr = rels.iterator(); while (itr.hasNext()) { SiteRelation rel = (SiteRelation) itr.next(); Element rElem; Character scope = rel.getSiteRelationScope(); if (("N").equals(scope.toString())) { rElem = doc.createElement("nationalRelationship"); rElem.appendChild(doc.createElement("designationCode")).appendChild( doc.createTextNode(fmt(rel.getSiteRelationCode(), "relationCode"))); nationalRelations.appendChild(rElem); } else if (("I").equals(scope.toString())) { rElem = doc.createElement("internationalRelationship"); rElem.appendChild(doc.createElement("convention")).appendChild( doc.createTextNode(fmt(rel.getSiteRelationConvention(), "relationConvention"))); internationalRelations.appendChild(rElem); } else { // log("Relation type undefined, ignoring relation: " + scope.toString()); continue; } rElem.appendChild(doc.createElement("siteName")).appendChild( doc.createTextNode(fmt(rel.getSiteRelationSitename(), "relationSite"))); rElem.appendChild(doc.createElement("type")) .appendChild(doc.createTextNode(fmt(rel.getSiteRelationType(), "relationType"))); rElem.appendChild(doc.createElement("cover")) .appendChild(doc.createTextNode(fmt(rel.getSiteRelationCover(), "relationCover"))); } relations.appendChild(nationalRelations); relations.appendChild(internationalRelations); protection.appendChild(relations); } protection.appendChild(doc.createElement("siteDesignationAdditional")) .appendChild(doc.createTextNode(fmt(site.getSiteDesignation(), "siteDesignation"))); sdf.appendChild(protection); /******************MANAGEMENT************************/ Element mgmtElem = doc.createElement("siteManagement"); Mgmt mgmt = site.getMgmt(); if (mgmt != null) { // Management Body Set bodies = mgmt.getMgmtBodies(); itr = bodies.iterator(); Element bodiesElem = doc.createElement("managementBodies"); while (itr.hasNext()) { MgmtBody bodyObj = (MgmtBody) itr.next(); Element bElem = doc.createElement("managementBody"); bElem.appendChild(doc.createElement("organisation")) .appendChild(doc.createTextNode(fmt(bodyObj.getMgmtBodyOrg(), "mgmtBodyOrg"))); //if el campo addressunestructured esta vacio entonces addres es un tipo complejo (implementar) en caso contrario if (bodyObj.getMgmtBodyAddressArea() != null && !bodyObj.getMgmtBodyAddressArea().equals("")) { Element addresElem = doc.createElement("address"); addresElem.appendChild(doc.createElement("adminUnit")).appendChild( doc.createTextNode(fmt(bodyObj.getMgmtBodyAdminUnit(), "adminUnit") + " ")); addresElem.appendChild(doc.createElement("locatorDesignator")).appendChild(doc .createTextNode(fmt(bodyObj.getMgmtBodyThroughFare(), "thoroughfare") + " ")); addresElem.appendChild(doc.createElement("locatorName")).appendChild(doc.createTextNode( fmt(bodyObj.getMgmtBodyLocatorDesignator(), "locatorDesignator") + " ")); addresElem.appendChild(doc.createElement("addressArea")).appendChild( doc.createTextNode(fmt(bodyObj.getMgmtBodyPostCode(), "postCode") + " ")); addresElem.appendChild(doc.createElement("postName")).appendChild( doc.createTextNode(fmt(bodyObj.getMgmtBodyPostName(), "postName") + " ")); addresElem.appendChild(doc.createElement("postCode")).appendChild(doc .createTextNode(fmt(bodyObj.getMgmtBodyAddressArea(), "addressArea") + " ")); addresElem.appendChild(doc.createElement("thoroughfare")).appendChild(doc .createTextNode(fmt(bodyObj.getMgmtBodyLocatorName(), "locatorName") + " ")); bElem.appendChild(addresElem); } else { Element addresElem = doc.createElement("address"); addresElem.appendChild(doc.createElement("addressArea")).appendChild( doc.createTextNode(fmt(bodyObj.getMgmtBodyAddress(), "addressArea"))); bElem.appendChild(addresElem); } bElem.appendChild(doc.createElement("email")) .appendChild(doc.createTextNode(fmt(bodyObj.getMgmtBodyEmail(), "mgmtBodyMail"))); bodiesElem.appendChild(bElem); } mgmtElem.appendChild(bodiesElem); // Management Plan Character status = mgmt.getMgmtStatus(); Element mgmtExists = (Element) mgmtElem.appendChild(doc.createElement("exists")); if (status != null) { mgmtExists .appendChild(doc.createTextNode(fmt(Character.toUpperCase(status), "mgmtExists"))); } Set plans = mgmt.getMgmtPlans(); itr = plans.iterator(); Element plansElem = doc.createElement("managementPlans"); plansElem.appendChild(mgmtExists); while (itr.hasNext()) { MgmtPlan planObj = (MgmtPlan) itr.next(); Element pElem = doc.createElement("managementPlan"); pElem.appendChild(doc.createElement("name")) .appendChild(doc.createTextNode(fmt(planObj.getMgmtPlanName(), "mgmtPlanName"))); pElem.appendChild(doc.createElement("url")) .appendChild(doc.createTextNode(fmt(planObj.getMgmtPlanUrl(), "mgmtPlanUrl"))); plansElem.appendChild(pElem); } mgmtElem.appendChild(plansElem); mgmtElem.appendChild(doc.createElement("conservationMeasures")).appendChild( doc.createTextNode(fmt(mgmt.getMgmtConservMeasures(), "conservationMeasures"))); } sdf.appendChild(mgmtElem); Map map = site.getMap(); Element mapElem = doc.createElement("map"); if (map != null) { mapElem.appendChild(doc.createElement("InspireID")) .appendChild(doc.createTextNode(fmt(map.getMapInspire(), "mapInspireID"))); Boolean bMap; if (map.getMapPdf() != null && map.getMapPdf().equals(Short.valueOf("1"))) { bMap = true; } else { bMap = false; } mapElem.appendChild(doc.createElement("pdfProvided")) .appendChild(doc.createTextNode(fmt(bMap, "mapPDF"))); mapElem.appendChild(doc.createElement("mapReference")) .appendChild(doc.createTextNode(fmt(map.getMapReference(), "mapRef"))); } sdf.appendChild(mapElem); if (flush++ % 100 == 0) { session.clear(); } sdfs.appendChild(sdf); } //All the data is stored in the node instead of the document. Source source = new DOMSource(doc); // File file = new File(this.fileName); File file = new File("xsl" + File.separator + this.siteCode + ".html"); Result result = new StreamResult(file.toURI().getPath()); TransformerFactory tFactory = TransformerFactory.newInstance(); String xslFileName = SDF_ManagerApp.isEmeraldMode() ? "EmeraldSiteXSL.xsl" : "SiteXSL.xsl"; Source xsl = new StreamSource("." + File.separator + "xsl" + File.separator + xslFileName); Templates template = tFactory.newTemplates(xsl); Transformer transformer = template.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "siteName name otherSiteCharacteristics" + " qualityAndImportance selectiveBasis derogationJustification comments " + "location licensedJustification licensingAuthority licenseValidFrom licenseValidUntil otherType " + "method activity reason"); transformer.transform(source, result); String pdfPath = new File("").getAbsolutePath() + File.separator + "xsl" + File.separator + this.siteCode + ".pdf"; // File inputFile = new File(this.fileName); File inputFile = new File("xsl" + File.separator + this.siteCode + ".html"); os = new FileOutputStream(new File(pdfPath)); ITextRenderer renderer = new ITextRenderer(); FontFactory.register("resources/fonts"); renderer.setDocument(inputFile); renderer.layout(); renderer.createPDF(os); Desktop desktop = null; // Before more Desktop API is used, first check // whether the API is supported by this particular // virtual machine (VM) on this particular host. if (Desktop.isDesktopSupported()) { desktop = Desktop.getDesktop(); Desktop.getDesktop().open(file); } return null; } catch (TransformerConfigurationException e) { ExporterSiteHTML.log .error("A TransformerConfigurationException has occurred in processDatabase. Error Message:::" + e.getMessage()); return null; } catch (TransformerException e) { ExporterSiteHTML.log.error( "A TransformerException has occurred in processDatabase. Error Message:::" + e.getMessage()); return null; } catch (FileNotFoundException e) { ExporterSiteHTML.log.error( "A FileNotFoundException has occurred in processDatabase. Error Message:::" + e.getMessage()); return null; } catch (IOException e) { ExporterSiteHTML.log .error("An IOException has occurred in processDatabase. Error Message:::" + e.getMessage()); return null; } catch (Exception e) { ExporterSiteHTML.log.error( "A general exception has occurred in processDatabase. Error Message:::" + e.getMessage()); return null; } finally { IOUtils.closeQuietly(os); session.close(); } } /** * * @param i * @return */ Boolean toBool(Short i) { if (i == null) { return false; } if (i.compareTo(new Short(i)) > 0) { return true; } else { return false; } } /** * * @param i * @return */ Boolean toBoolean(Short i) { if (i == null) { return false; } if (i > 0) { return true; } else { return false; } } /** * * @param src * @param fieldName * @return */ String fmt(String src, String fieldName) { /* basically a debugging function, printing out null fields but could be used for other purposes as well */ if (src == null) { return ""; } else { return ConversionTools.replaceBadSymbols(src); } } /** * * @param date * @param fieldName * @return */ String fmt(Date date, String fieldName) { if (date != null) { return fmt(date.toString(), fieldName); } else { return fmt((String) null, fieldName); } } /** * * @param val * @param fieldName * @return */ String fmt(Double val, String fieldName) { if (val != null) { return fmt(val.toString(), fieldName); } else { return fmt((String) null, fieldName); } } /** * * @param val * @param fieldName * @return */ String fmt(Integer val, String fieldName) { if (val != null) { return fmt(val.toString(), fieldName); } else { return fmt((String) null, fieldName); } } /** * * @param val * @param fieldName * @return */ String fmt(Boolean val, String fieldName) { if (val != null) { return fmt(val.toString(), fieldName); } else { return fmt((String) null, fieldName); } } /** * * @param val * @param fieldName * @return */ String fmt(Character val, String fieldName) { if (val != null) { return fmt(val.toString(), fieldName); } else { return fmt((String) null, fieldName); } } /** * * @param val * @param fieldName * @return */ String fmtToLowerCase(Character val, String fieldName) { if (val != null) { return fmt(val.toString().toLowerCase(), fieldName); } else { return fmt((String) null, fieldName); } } /** * * @param val * @param fieldName * @return */ String fmtToUpperCase(Character val, String fieldName) { if (val != null) { return fmt(val.toString().toUpperCase(), fieldName); } else { return fmt((String) null, fieldName); } } /** * * @param filename * @return */ @Override public ArrayList createXMLFromDataBase(String filename) { throw new UnsupportedOperationException("Not supported yet."); } /** * * @param fieldName * @return */ private String getString(String fieldName) { try { byte[] result = fieldName.getBytes(); //String tmp = result != null ? new String(result) : null; if (result != null && result.length == 0) { //log("Empty string for: " + fieldName); return null; } //don't enter empty string in the database else { if (result != null) { Charset charset = Charset.forName("UTF-8"); CharsetDecoder decoder = charset.newDecoder(); decoder.onMalformedInput(CodingErrorAction.REPLACE); decoder.onUnmappableCharacter(CodingErrorAction.REPLACE); CharBuffer cbuf = decoder.decode(ByteBuffer.wrap(result)); return cbuf.toString().trim(); } else { return null; } } } catch (Exception e) { logToFile("Failed extracting field: " + fieldName + ". The field could have an erroneous name. Please verify."); //e.printStackTrace(); ExporterSiteHTML.log.error("Failed extracting field: " + fieldName + ". The field could have an erroneous name. Please verify."); return null; } } }