org.openestate.io.examples.DaftIeWritingExample 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.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.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.SystemUtils;
import org.apache.log4j.PropertyConfigurator;
import org.openestate.io.daft_ie.DaftIeDocument;
import org.openestate.io.daft_ie.DaftIeUtils;
import org.openestate.io.daft_ie.xml.CommercialType;
import org.openestate.io.daft_ie.xml.Daft;
import org.openestate.io.daft_ie.xml.HouseType;
import org.openestate.io.daft_ie.xml.ObjectFactory;
import org.openestate.io.daft_ie.xml.OverseasRentalAdType;
import org.openestate.io.daft_ie.xml.OverseasSaleAdType;
import org.openestate.io.daft_ie.xml.PropertyType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Example for writing XML files for daft.ie.
*
* This example illustrates the programatic creation of documents for
* daft.ie and how they are written into XML.
*
* @since 1.0
* @author Andreas Rudolph
*/
public class DaftIeWritingExample
{
private final static Logger LOGGER = LoggerFactory.getLogger( DaftIeWritingExample.class );
private final static String PACKAGE = "/org/openestate/io/examples";
private final static ObjectFactory FACTORY = DaftIeUtils.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(
DaftIeWritingExample.class.getResource( PACKAGE + "/log4j.properties" ) );
// create a Daft object with some example data
// this object corresponds to the root element in XML
Daft daft = FACTORY.createDaft();
// append some example objectss for rent to the Daft object
daft.setOverseasRental( FACTORY.createDaftOverseasRental() );
daft.getOverseasRental().getOverseasRentalAd().add( createAdForRent() );
daft.getOverseasRental().getOverseasRentalAd().add( createAdForRent() );
// append some example objectss for sale to the Daft object
daft.setOverseasSales( FACTORY.createDaftOverseasSales() );
daft.getOverseasSales().getOverseasSaleAd().add( createAdForSale() );
daft.getOverseasSales().getOverseasSaleAd().add( createAdForSale() );
daft.getOverseasSales().getOverseasSaleAd().add( createAdForSale() );
// convert the Daft object into a XML document
DaftIeDocument doc = null;
try
{
doc = DaftIeDocument.newDocument( daft );
}
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 OverseasRentalAdType} with some example data.
*
* @return
* created example object
*/
protected static OverseasRentalAdType createAdForRent()
{
// create an example real estate for rent
OverseasRentalAdType ad = FACTORY.createOverseasRentalAdType();
ad.setAddress( "Beispielstraße 123");
ad.setAgentId( "123" );
ad.setArea( "Berlin" );
ad.setAvailableFrom( Calendar.getInstance() );
ad.setBathroomNumber( BigInteger.valueOf( RandomUtils.nextInt( 0, 5 ) ) );
ad.setBedroomNumber( BigInteger.valueOf( RandomUtils.nextInt( 0, 5 ) ) );
ad.setCableTelevision( RandomUtils.nextInt( 0, 2 )==1 );
ad.setCcEmail( "[email protected]" );
ad.setCommercialType( CommercialType.LAND );
ad.setContactName( "Max Mustermann" );
ad.setCountry( "DE" );
ad.setDescription( "A description about the property." );
ad.setDishwasher( RandomUtils.nextInt( 0, 2 )==1 );
ad.setDoubleBeds( BigInteger.valueOf( RandomUtils.nextInt( 0, 5 ) ) );
ad.setDryer( RandomUtils.nextInt( 0, 2 )==1 );
ad.setExternalId( String.valueOf( RandomUtils.nextInt( 1, 1000 ) ) );
ad.setFurnished( OverseasRentalAdType.Furnished.FURNISHED );
ad.setHouseType( HouseType.TOWNHOUSE );
ad.setLease( BigInteger.valueOf( RandomUtils.nextInt( 100, 1000 ) ) );
ad.setMainEmail( "[email protected]" );
ad.setMicrowave( RandomUtils.nextInt( 0, 2 )==1 );
ad.setNumberPeople( BigInteger.valueOf( RandomUtils.nextInt( 0, 5 ) ) );
ad.setPhone1( "030/123456" );
ad.setPhone2( "030/123457" );
ad.setPhoneInfo( "Some information about contacts via phone." );
ad.setPropertyType( PropertyType.HOUSE );
ad.setRegion( "Berlin" );
ad.setRent( BigInteger.valueOf( RandomUtils.nextInt( 100, 1000 ) ) );
ad.setRentCollectionPeriod( OverseasRentalAdType.RentPeriod.MONTHLY );
ad.setSingleBeds( BigInteger.valueOf( RandomUtils.nextInt( 0, 5 ) ) );
ad.setTwinBeds( BigInteger.valueOf( RandomUtils.nextInt( 0, 5 ) ) );
ad.setWashingMachine( RandomUtils.nextInt( 0, 2 )==1 );
// add some features
ad.setFeatures( FACTORY.createFeaturesType() );
ad.getFeatures().getFeature().add( "another feature" );
ad.getFeatures().getFeature().add( "some more feature" );
// add some photos
ad.setPhotos( FACTORY.createPhotosType() );
try
{
ad.getPhotos().getPhoto().add( new URL( "http://www.mywebsite.org/image1.jpg" ) );
ad.getPhotos().getPhoto().add( new URL( "http://www.mywebsite.org/image2.jpg" ) );
ad.getPhotos().getPhoto().add( new URL( "http://www.mywebsite.org/image3.jpg" ) );
}
catch (MalformedURLException ex)
{
}
return ad;
}
/**
* Create an {@link OverseasRentalAdType} with some example data.
*
* @return
* created example object
*/
protected static OverseasSaleAdType createAdForSale()
{
// create an example real estate for sale
OverseasSaleAdType ad = FACTORY.createOverseasSaleAdType();
ad.setAcres( BigDecimal.valueOf( RandomUtils.nextDouble( 10, 1000 ) ) );
ad.setAddress( "Beispielstraße 123");
ad.setAgentId( "123" );
ad.setArea( "Berlin" );
ad.setBathroomNumber( BigInteger.valueOf( RandomUtils.nextInt( 0, 5 ) ) );
ad.setBedroomNumber( BigInteger.valueOf( RandomUtils.nextInt( 0, 5 ) ) );
ad.setCcEmail( "[email protected]" );
ad.setCo2Rating( "some notes about CO2 rating" );
ad.setCommercialType( CommercialType.SHOP );
ad.setContactName( "Max Mustermann" );
ad.setCountry( "DE" );
ad.setDescription( "A description about the property." );
ad.setDirections( "some notes about directions" );
ad.setEnergyRating( "some notes about energy rating" );
ad.setExternalId( String.valueOf( RandomUtils.nextInt( 1, 1000 ) ) );
ad.setHouseType( HouseType.DETACHED );
ad.setIsNewDevelopment( RandomUtils.nextInt( 0, 2 )==1 );
ad.setMainEmail( "[email protected]" );
ad.setNewDevelopmentAvailability( "some notes about development" );
ad.setPhone1( "030/123456" );
ad.setPhone2( "030/123457" );
ad.setPhoneInfo( "Some information about contacts via phone." );
ad.setPrice( BigInteger.valueOf( RandomUtils.nextInt( 100, 1000000 ) ) );
ad.setPriceType( OverseasSaleAdType.PriceType.REGION );
ad.setPropertyStatus( OverseasSaleAdType.PropertyStatus.FOR_SALE );
ad.setPropertyType( PropertyType.HOUSE );
ad.setRegion( "Berlin" );
ad.setSquareMetres( BigDecimal.valueOf( RandomUtils.nextDouble( 10, 1000 ) ) );
ad.setUnitsAvailable( BigInteger.valueOf( RandomUtils.nextInt( 1, 50 ) ) );
ad.setViewingDetails( "some notes about viewing details" );
// add some features
ad.setFeatures( FACTORY.createFeaturesType() );
ad.getFeatures().getFeature().add( "another feature" );
ad.getFeatures().getFeature().add( "some more feature" );
// add some pdf documents
ad.setPdfs( FACTORY.createPdfsType() );
try
{
ad.getPdfs().getPdf().add( new URL( "http://www.mywebsite.org/document1.pdf" ) );
ad.getPdfs().getPdf().add( new URL( "http://www.mywebsite.org/document2.pdf" ) );
}
catch (MalformedURLException ex)
{
}
// add some photos
ad.setPhotos( FACTORY.createPhotosType() );
try
{
ad.getPhotos().getPhoto().add( new URL( "http://www.mywebsite.org/image1.jpg" ) );
ad.getPhotos().getPhoto().add( new URL( "http://www.mywebsite.org/image2.jpg" ) );
ad.getPhotos().getPhoto().add( new URL( "http://www.mywebsite.org/image3.jpg" ) );
}
catch (MalformedURLException ex)
{
}
return ad;
}
/**
* Write a {@link DaftIeDocument} into a {@link File}.
*
* @param doc
* the document to write
*
* @param file
* the file, where the document is written to
*/
protected static void write( DaftIeDocument 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 DaftIeDocument} into an {@link OutputStream}.
*
* @param doc
* the document to write
*
* @param output
* the stream, where the document is written to
*/
protected static void write( DaftIeDocument 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 DaftIeDocument} into a {@link Writer}.
*
* @param doc
* the document to write
*
* @param output
* the writer, where the document is written to
*/
protected static void write( DaftIeDocument 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 DaftIeDocument} into a {@link String} and print the
* results to the console.
*
* @param doc
* the document to write
*/
protected static void writeToConsole( DaftIeDocument 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 );
}
}
}