Java tutorial
/* * Copyright 2015-2016 OpenEstate.org. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.openestate.io.examples; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.io.Writer; import java.math.BigDecimal; import java.math.BigInteger; import java.net.MalformedURLException; import java.net.URL; import java.util.Calendar; import org.apache.commons.io.output.NullOutputStream; import org.apache.commons.io.output.NullWriter; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.SystemUtils; import org.apache.log4j.PropertyConfigurator; import org.openestate.io.kyero.KyeroDocument; import org.openestate.io.kyero.KyeroUtils; import org.openestate.io.kyero.KyeroVersion; import org.openestate.io.kyero.xml.CurrencyType; import org.openestate.io.kyero.xml.EnergyRatingMarkType; import org.openestate.io.kyero.xml.ImagesType.Image; import org.openestate.io.kyero.xml.KyeroType; import org.openestate.io.kyero.xml.ObjectFactory; import org.openestate.io.kyero.xml.PriceFreqType; import org.openestate.io.kyero.xml.PropertyType; import org.openestate.io.kyero.xml.Root; import org.openestate.io.kyero.xml.Root.Agent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Example for writing Kyero XML feeds. * <p> * This example illustrates the programatic creation of Kyero documents, how * they are written into XML and how they are downgraded to earlier versions. * * @since 1.0 * @author Andreas Rudolph */ public class KyeroWritingExample { private final static Logger LOGGER = LoggerFactory.getLogger(KyeroWritingExample.class); private final static String PACKAGE = "/org/openestate/io/examples"; private final static ObjectFactory FACTORY = KyeroUtils.getFactory(); private final static boolean PRETTY_PRINT = true; /** * Start the example application. * * @param args * command line arguments */ public static void main(String[] args) { // init logging PropertyConfigurator.configure(KyeroWritingExample.class.getResource(PACKAGE + "/log4j.properties")); // create a Root object with some example data // this object corresponds to the <root> element in XML Root root = FACTORY.createRoot(); root.setKyero(createKyero()); root.setAgent(createAgent()); root.getProperty().add(createProperty()); root.getProperty().add(createProperty()); root.getProperty().add(createProperty()); // convert the Root object into a XML document KyeroDocument doc = null; try { doc = KyeroDocument.newDocument(root); } catch (Exception ex) { LOGGER.error("Can't create XML document!"); LOGGER.error("> " + ex.getLocalizedMessage(), ex); System.exit(1); } // write XML document into a java.io.File try { write(doc, File.createTempFile("output-", ".xml")); } catch (IOException ex) { LOGGER.error("Can't create temporary file!"); LOGGER.error("> " + ex.getLocalizedMessage(), ex); System.exit(1); } // write XML document into a java.io.OutputStream write(doc, new NullOutputStream()); // write XML document into a java.io.Writer write(doc, new NullWriter()); // write XML document into a string and send it to the console writeToConsole(doc); // downgrade XML document to an earlier version // and write it to the console doc.downgrade(KyeroVersion.V2_1); writeToConsole(doc); } /** * Create an {@link Agent} object with some example data. * * @return * created example object */ protected static Agent createAgent() { Agent agent = FACTORY.createRootAgent(); agent.setAddr1("first address line"); agent.setAddr2("second address line"); agent.setCountry("Germany"); agent.setEmail("test@test.org"); agent.setFax("030/123456"); agent.setId(BigInteger.valueOf(RandomUtils.nextLong(1, 10000))); agent.setMob("030/123457"); agent.setName("name of the company"); agent.setPostcode("12345"); agent.setRegion("Berlin"); agent.setTel("030/123458"); agent.setTown("Berlin"); return agent; } /** * Create a {@link KyeroType} object with some example data. * * @return * created example object */ protected static KyeroType createKyero() { KyeroType kyero = FACTORY.createKyeroType(); kyero.setFeedGenerated(Calendar.getInstance()); kyero.setFeedVersion(KyeroUtils.VERSION.toXmlVersion()); return kyero; } /** * Create a {@link PropertyType} object with some example data. * * @return * created example object */ protected static PropertyType createProperty() { final String id = RandomStringUtils.randomAlphanumeric(5); int imageCount = 0; // create an example real estate PropertyType obj = FACTORY.createPropertyType(); obj.setBaths(BigInteger.valueOf(RandomUtils.nextLong(0, 5))); obj.setBeds(BigInteger.valueOf(RandomUtils.nextLong(0, 5))); obj.setCurrency(CurrencyType.EUR); obj.setDate(Calendar.getInstance()); obj.setId(id); obj.setLeasehold(RandomUtils.nextInt(0, 2) == 1); obj.setLocationDetail("some details about the location"); obj.setNewBuild(RandomUtils.nextInt(0, 2) == 1); obj.setNotes("some notes about the property"); obj.setPartOwnership(RandomUtils.nextInt(0, 2) == 1); obj.setPool(RandomUtils.nextInt(0, 2) == 1); obj.setPrice(RandomUtils.nextLong(10000, 9999999)); obj.setPriceFreq(PriceFreqType.SALE); obj.setProvince("Berlin"); obj.setRef(RandomStringUtils.randomAlphanumeric(5)); obj.setTown("Berlin"); obj.setType("house"); obj.setDesc(FACTORY.createLangType()); obj.getDesc().setAr("Arabic property description"); obj.getDesc().setBg("Bulgarian property description"); obj.getDesc().setCa("Catalan property description"); obj.getDesc().setCs("Czech property description"); obj.getDesc().setDa("Danish property description"); obj.getDesc().setDe("German property description"); obj.getDesc().setEl("Greek property description"); obj.getDesc().setEn("English property description"); obj.getDesc().setEs("Spanish property description"); obj.getDesc().setEt("Estonian property description"); obj.getDesc().setFa("Farsi property description"); obj.getDesc().setFi("Finnish property description"); obj.getDesc().setFr("French property description"); obj.getDesc().setHe("Hebrew property description"); obj.getDesc().setHi("Hindi property description"); obj.getDesc().setHu("Hungarian property description"); obj.getDesc().setId("Indonesian property description"); obj.getDesc().setIt("Italian property description"); obj.getDesc().setJa("Japanese property description"); obj.getDesc().setKo("Korean property description"); obj.getDesc().setLt("Lithuanian property description"); obj.getDesc().setLv("Latvian property description"); obj.getDesc().setNl("Dutch property description"); obj.getDesc().setNo("Norwegian property description"); obj.getDesc().setPl("Polish property description"); obj.getDesc().setPt("Portuguese property description"); obj.getDesc().setRo("Romanian property description"); obj.getDesc().setRu("Russian property description"); obj.getDesc().setSk("Slovak property description"); obj.getDesc().setSl("Slovenian property description"); obj.getDesc().setSv("Swedish property description"); obj.getDesc().setTh("Thai property description"); obj.getDesc().setTr("Turkish property description"); obj.getDesc().setUk("Ukranian property description"); obj.getDesc().setVi("Vietnamese property description"); obj.getDesc().setZh("Simplified Chinese property description"); obj.setEnergyRating(FACTORY.createEnergyRatingType()); obj.getEnergyRating().setConsumption(EnergyRatingMarkType.C); obj.getEnergyRating().setEmissions(EnergyRatingMarkType.E); obj.setFeatures(FACTORY.createFeaturesType()); obj.getFeatures().getFeature().add("name of a feature"); obj.getFeatures().getFeature().add("name of another feature"); obj.setImages(FACTORY.createImagesType()); obj.getImages().getImage().add(createPropertyImage(id, ++imageCount)); obj.getImages().getImage().add(createPropertyImage(id, ++imageCount)); obj.getImages().getImage().add(createPropertyImage(id, ++imageCount)); obj.setLocation(FACTORY.createGpsLocationType()); obj.getLocation().setLatitude(BigDecimal.valueOf(RandomUtils.nextDouble(0, 90))); obj.getLocation().setLongitude(BigDecimal.valueOf(RandomUtils.nextDouble(0, 90))); obj.setSurfaceArea(FACTORY.createSurfaceType()); obj.getSurfaceArea().setBuilt(BigInteger.valueOf(RandomUtils.nextLong(50, 250))); obj.getSurfaceArea().setPlot(BigInteger.valueOf(RandomUtils.nextLong(100, 1500))); obj.setUrl(FACTORY.createUrlType()); try { obj.getUrl().setAr(new URL("http://arabic.website.com/property/" + id + ".htm")); obj.getUrl().setBg(new URL("http://bulgarian.website.com/property/" + id + ".htm")); obj.getUrl().setCa(new URL("http://catalan.website.com/property/" + id + ".htm")); obj.getUrl().setCs(new URL("http://czech.website.com/property/" + id + ".htm")); obj.getUrl().setDa(new URL("http://danish.website.com/property/" + id + ".htm")); obj.getUrl().setDe(new URL("http://german.website.com/property/" + id + ".htm")); obj.getUrl().setEl(new URL("http://greek.website.com/property/" + id + ".htm")); obj.getUrl().setEn(new URL("http://english.website.com/property/" + id + ".htm")); obj.getUrl().setEs(new URL("http://spanish.website.com/property/" + id + ".htm")); obj.getUrl().setEt(new URL("http://estonian.website.com/property/" + id + ".htm")); obj.getUrl().setFa(new URL("http://farsi.website.com/property/" + id + ".htm")); obj.getUrl().setFi(new URL("http://finnish.website.com/property/" + id + ".htm")); obj.getUrl().setFr(new URL("http://french.website.com/property/" + id + ".htm")); obj.getUrl().setHe(new URL("http://hebrew.website.com/property/" + id + ".htm")); obj.getUrl().setHi(new URL("http://hindi.website.com/property/" + id + ".htm")); obj.getUrl().setHu(new URL("http://hungarian.website.com/property/" + id + ".htm")); obj.getUrl().setId(new URL("http://indonesian.website.com/property/" + id + ".htm")); obj.getUrl().setIt(new URL("http://italian.website.com/property/" + id + ".htm")); obj.getUrl().setJa(new URL("http://japanese.website.com/property/" + id + ".htm")); obj.getUrl().setKo(new URL("http://korean.website.com/property/" + id + ".htm")); obj.getUrl().setLt(new URL("http://lithunain.website.com/property/" + id + ".htm")); obj.getUrl().setLv(new URL("http://latvian.website.com/property/" + id + ".htm")); obj.getUrl().setNl(new URL("http://dutch.website.com/property/" + id + ".htm")); obj.getUrl().setNo(new URL("http://norwegian.website.com/property/" + id + ".htm")); obj.getUrl().setPl(new URL("http://polish.website.com/property/" + id + ".htm")); obj.getUrl().setPt(new URL("http://portuguese.website.com/property/" + id + ".htm")); obj.getUrl().setRo(new URL("http://romanian.website.com/property/" + id + ".htm")); obj.getUrl().setRu(new URL("http://russian.website.com/property/" + id + ".htm")); obj.getUrl().setSk(new URL("http://slovak.website.com/property/" + id + ".htm")); obj.getUrl().setSl(new URL("http://slovenian.website.com/property/" + id + ".htm")); obj.getUrl().setSv(new URL("http://swedish.website.com/property/" + id + ".htm")); obj.getUrl().setTh(new URL("http://thai.website.com/property/" + id + ".htm")); obj.getUrl().setTr(new URL("http://turkish.website.com/property/" + id + ".htm")); obj.getUrl().setUk(new URL("http://ukranian.website.com/property/" + id + ".htm")); obj.getUrl().setVi(new URL("http://vietnamese.website.com/property/" + id + ".htm")); obj.getUrl().setZh(new URL("http://chinese_simplified.website.com/property/" + id + ".htm")); } catch (MalformedURLException ex) { } return obj; } /** * Create an {@link Image} object with some example data. * * @return * created example object */ protected static Image createPropertyImage(String id, int pos) { // create an example image Image img = FACTORY.createImagesTypeImage(); img.setId(pos); try { img.setUrl(new URL("http://website.com/property/" + id + "/image_" + pos + ".jpg")); } catch (MalformedURLException ex) { } img.setTitle(FACTORY.createLangType()); img.getTitle().setAr("Arabic image title"); img.getTitle().setBg("Bulgarian image title"); img.getTitle().setCa("Catalan image title"); img.getTitle().setCs("Czech image title"); img.getTitle().setDa("Danish image title"); img.getTitle().setDe("German image title"); img.getTitle().setEl("Greek image title"); img.getTitle().setEn("English image title"); img.getTitle().setEs("Spanish image title"); img.getTitle().setEt("Estonian image title"); img.getTitle().setFa("Farsi image title"); img.getTitle().setFi("Finnish image title"); img.getTitle().setFr("French image title"); img.getTitle().setHe("Hebrew image title"); img.getTitle().setHi("Hindi image title"); img.getTitle().setHu("Hungarian image title"); img.getTitle().setId("Indonesian image title"); img.getTitle().setIt("Italian image title"); img.getTitle().setJa("Japanese image title"); img.getTitle().setKo("Korean image title"); img.getTitle().setLt("Lithuanian image title"); img.getTitle().setLv("Latvian image title"); img.getTitle().setNl("Dutch image title"); img.getTitle().setNo("Norwegian image title"); img.getTitle().setPl("Polish image title"); img.getTitle().setPt("Portuguese image title"); img.getTitle().setRo("Romanian image title"); img.getTitle().setRu("Russian image title"); img.getTitle().setSk("Slovak image title"); img.getTitle().setSl("Slovenian image title"); img.getTitle().setSv("Swedish image title"); img.getTitle().setTh("Thai image title"); img.getTitle().setTr("Turkish image title"); img.getTitle().setUk("Ukranian image title"); img.getTitle().setVi("Vietnamese image title"); img.getTitle().setZh("Simplified Chinese image title"); return img; } /** * Write a {@link KyeroDocument} into a {@link File}. * * @param doc * the document to write * * @param file * the file, where the document is written to */ protected static void write(KyeroDocument doc, File file) { LOGGER.info("writing document with version " + doc.getDocumentVersion()); try { doc.toXml(file, PRETTY_PRINT); LOGGER.info("> written to: " + file.getAbsolutePath()); } catch (Exception ex) { LOGGER.error("Can't write document into a file!"); LOGGER.error("> " + ex.getLocalizedMessage(), ex); System.exit(1); } } /** * Write a {@link KyeroDocument} into an {@link OutputStream}. * * @param doc * the document to write * * @param output * the stream, where the document is written to */ protected static void write(KyeroDocument doc, OutputStream output) { LOGGER.info("writing document with version " + doc.getDocumentVersion()); try { doc.toXml(output, PRETTY_PRINT); LOGGER.info("> written to a java.io.OutputStream"); } catch (Exception ex) { LOGGER.error("Can't write document into an OutputStream!"); LOGGER.error("> " + ex.getLocalizedMessage(), ex); System.exit(1); } } /** * Write a {@link KyeroDocument} into a {@link Writer}. * * @param doc * the document to write * * @param output * the writer, where the document is written to */ protected static void write(KyeroDocument doc, Writer output) { LOGGER.info("writing document with version " + doc.getDocumentVersion()); try { doc.toXml(output, PRETTY_PRINT); LOGGER.info("> written to a java.io.Writer"); } catch (Exception ex) { LOGGER.error("Can't write document into an OutputStream!"); LOGGER.error("> " + ex.getLocalizedMessage(), ex); System.exit(1); } } /** * Write a {@link KyeroDocument} into a {@link String} and print the * results to the console. * * @param doc * the document to write */ protected static void writeToConsole(KyeroDocument doc) { LOGGER.info("writing document with version " + doc.getDocumentVersion()); try { String xml = doc.toXmlString(PRETTY_PRINT); LOGGER.info(StringUtils.repeat("-", 50) + SystemUtils.LINE_SEPARATOR + xml); } catch (Exception ex) { LOGGER.error("Can't write document into a string!"); LOGGER.error("> " + ex.getLocalizedMessage(), ex); System.exit(1); } } }