org.openestate.io.examples.TrovitWritingExample Maven / Gradle / Ivy
/*
* 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.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.trovit.TrovitDocument;
import org.openestate.io.trovit.TrovitUtils;
import org.openestate.io.trovit.xml.Ad;
import org.openestate.io.trovit.xml.ObjectFactory;
import org.openestate.io.trovit.xml.Picture;
import org.openestate.io.trovit.xml.Trovit;
import org.openestate.io.trovit.xml.TypeNew;
import org.openestate.io.trovit.xml.types.Action;
import org.openestate.io.trovit.xml.types.IntBool;
import org.openestate.io.trovit.xml.types.PriceInterval;
import org.openestate.io.trovit.xml.types.Unit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Example for writing Trovit XML feeds.
*
* This example illustrates the programatic creation of Trovit documents and how
* they are written into XML.
*
* @since 1.0
* @author Andreas Rudolph
*/
public class TrovitWritingExample
{
private final static Logger LOGGER = LoggerFactory.getLogger( TrovitWritingExample.class );
private final static String PACKAGE = "/org/openestate/io/examples";
private final static ObjectFactory FACTORY = TrovitUtils.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(
TrovitWritingExample.class.getResource( PACKAGE + "/log4j.properties" ) );
// create a Trovit object with some example data
// this object corresponds to the element in XML
Trovit trovit = FACTORY.createTrovit();
// append some example ads to the transfer
trovit.getAd().add( createAd() );
trovit.getAd().add( createAd() );
trovit.getAd().add( createAd() );
// convert the Trovit object into a XML document
TrovitDocument doc = null;
try
{
doc = TrovitDocument.newDocument( trovit );
}
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 );
}
/**
* Create an {@link Ad} with some example data.
*
* @return
* created example object
*/
protected static Ad createAd()
{
// create an example real estate
Ad ad = FACTORY.createAd();
ad.setAddress( "object address" );
ad.setAgency( "name of the agency" );
ad.setBathrooms( BigDecimal.valueOf( RandomUtils.nextDouble( 0, 5 ) ) );
ad.setCity( "name of the city" );
ad.setCityArea( "name of the district" );
ad.setCondition( "some notes about the condition" );
ad.setContent( "some more descriptions" );
ad.setDate( Calendar.getInstance() );
ad.setExpirationDate( Calendar.getInstance() );
ad.setFloorNumber( "number of floors" );
ad.setForeclosure( "notes about foreclosure" );
ad.setId( RandomStringUtils.randomAlphanumeric( 5 ) );
ad.setIsFurnished( new IntBool( RandomUtils.nextInt( 0, 2 )==1 ) );
ad.setIsNew( TypeNew.NEW );
ad.setLatitude( BigDecimal.valueOf( RandomUtils.nextDouble( 0, 90 ) ) );
ad.setLongitude( BigDecimal.valueOf( RandomUtils.nextDouble( 0, 90 ) ) );
ad.setMlsDatabase( "notes about mls database" );
ad.setOrientation( "notes about orientation" );
ad.setParking( new IntBool( RandomUtils.nextInt( 0, 2 )==1 ) );
ad.setPlotArea( BigInteger.valueOf( RandomUtils.nextInt( 100, 5000 ) ) );
ad.setPostcode( "postcode" );
ad.setPropertyType( "notes about the property type" );
ad.setRegion( "notes about the region" );
ad.setRooms( BigDecimal.valueOf( RandomUtils.nextDouble( 1, 10 ) ) );
ad.setTime( Calendar.getInstance() );
ad.setTitle( "title of the object" );
ad.setType( Action.FOR_RENT );
ad.setUrl( "http://mywebsite.org/" );
ad.setVirtualTour( "notes about virtual tour" );
ad.setYear( RandomUtils.nextInt( 1990, 2010 ) );
ad.setFloorArea( FACTORY.createFloorArea() );
ad.getFloorArea().setUnit( Unit.METERS );
ad.getFloorArea().setValue( BigInteger.valueOf( RandomUtils.nextInt( 10, 10000 ) ) );
ad.setPictures( FACTORY.createPictures() );
ad.getPictures().getPicture().add( createPicture() );
ad.getPictures().getPicture().add( createPicture() );
ad.getPictures().getPicture().add( createPicture() );
ad.setPrice( FACTORY.createPrice() );
ad.getPrice().setPeriod( PriceInterval.MONTHLY );
ad.getPrice().setValue( BigDecimal.valueOf( RandomUtils.nextDouble( 100, 2000 ) ) );
return ad;
}
/**
* Create an {@link Picture} with some example data.
*
* @return
* created example object
*/
protected static Picture createPicture()
{
Picture pic = FACTORY.createPicture();
pic.setPictureTitle( "some descriptive title" );
pic.setPictureUrl( "http://mywebsite.org/image" + RandomStringUtils.randomNumeric( 5 ) + ".jpg" );
return pic;
}
/**
* Write a {@link TrovitDocument} into a {@link File}.
*
* @param doc
* the document to write
*
* @param file
* the file, where the document is written to
*/
protected static void write( TrovitDocument doc, File file )
{
LOGGER.info( "writing document" );
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 TrovitDocument} into an {@link OutputStream}.
*
* @param doc
* the document to write
*
* @param output
* the stream, where the document is written to
*/
protected static void write( TrovitDocument doc, OutputStream output )
{
LOGGER.info( "writing document" );
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 TrovitDocument} into a {@link Writer}.
*
* @param doc
* the document to write
*
* @param output
* the writer, where the document is written to
*/
protected static void write( TrovitDocument doc, Writer output )
{
LOGGER.info( "writing document" );
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 TrovitDocument} into a {@link String} and print the
* results to the console.
*
* @param doc
* the document to write
*/
protected static void writeToConsole( TrovitDocument doc )
{
LOGGER.info( "writing document" );
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 );
}
}
}