org.openestate.io.examples.IdxWritingExample.java Source code

Java tutorial

Introduction

Here is the source code for org.openestate.io.examples.IdxWritingExample.java

Source

/*
 * 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.util.ArrayList;
import java.util.Calendar;
import java.util.Currency;
import java.util.List;
import java.util.Locale;
import org.apache.commons.io.IOUtils;
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.idx.IdxPrinter;
import org.openestate.io.idx.IdxRecord;
import org.openestate.io.idx.types.GrossPremium;
import org.openestate.io.idx.types.Language;
import org.openestate.io.idx.types.Media;
import org.openestate.io.idx.types.ObjectType;
import org.openestate.io.idx.types.OfferType;
import org.openestate.io.idx.types.PriceUnit;
import org.openestate.io.idx.types.Salutation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Example for writing IDX files.
 * <p>
 * This example illustrates the programatic creation of IDX records and how they
 * are written into CSV.
 *
 * @since 1.0
 * @author Andreas Rudolph
 */
public class IdxWritingExample {
    private final static Logger LOGGER = LoggerFactory.getLogger(IdxWritingExample.class);
    private final static String PACKAGE = "/org/openestate/io/examples";

    /**
     * Start the example application.
     *
     * @param args
     * command line arguments
     */
    public static void main(String[] args) {
        // init logging
        PropertyConfigurator.configure(IdxWritingExample.class.getResource(PACKAGE + "/log4j.properties"));

        // create some CSV records
        List<IdxRecord> records = new ArrayList<IdxRecord>();
        records.add(createRecord());
        records.add(createRecord());
        records.add(createRecord());
        records.add(createRecord());

        // write CSV records into a java.io.File
        try {
            write(records, File.createTempFile("output-", ".csv"));
        } catch (IOException ex) {
            LOGGER.error("Can't create temporary file!");
            LOGGER.error("> " + ex.getLocalizedMessage(), ex);
            System.exit(1);
        }

        // write CSV records into a java.io.OutputStream
        write(records, new NullOutputStream());

        // write CSV records into a java.io.Writer
        write(records, new NullWriter());

        // write CSV records into a string and send it to the console
        writeToConsole(records);
    }

    /**
     * Create an {@link IdxRecord} with some example data.
     *
     * @return
     * created example object
     */
    protected static IdxRecord createRecord() {
        // create an example real estate
        IdxRecord obj = new IdxRecord();
        obj.setAdvertisementId(RandomStringUtils.randomAlphanumeric(5));
        obj.setAgencyCity("Berlin");
        obj.setAgencyCountry(Locale.GERMANY.getCountry());
        obj.setAgencyEmail("tester@test.org");
        obj.setAgencyFax("030/123456");
        obj.setAgencyId(RandomStringUtils.randomAlphanumeric(5));
        obj.setAgencyName("agency name");
        obj.setAgencyName2("additional agency name");
        obj.setAgencyPhone("030/123457");
        obj.setAgencyReference(RandomStringUtils.randomAlphanumeric(5));
        obj.setAgencyStreet("example street 123");
        obj.setAgencyZip("12345");
        obj.setAnimalAllowed(RandomUtils.nextInt(0, 2) == 1);
        obj.setAvailableFrom(Calendar.getInstance());
        obj.setBalcony(RandomUtils.nextInt(0, 2) == 1);
        obj.setBillingCompany("agency name");
        obj.setBillingCountry("Germany");
        obj.setBillingFirstName("Max");
        obj.setBillingLanguage(Language.GERMAN);
        obj.setBillingMobile("030/132456");
        obj.setBillingName("Mustermann");
        obj.setBillingPhone("030/123457");
        obj.setBillingPhone2("030/123458");
        obj.setBillingPlaceName("Berlin");
        obj.setBillingPostBox("additional address notes");
        obj.setBillingSalutation(Salutation.MALE);
        obj.setBillingStreet("example street 123");
        obj.setBillingZip("12345");
        obj.setBuildingLandConnected(RandomUtils.nextInt(0, 2) == 1);
        obj.setCableTv(RandomUtils.nextInt(0, 2) == 1);
        obj.setCarryingCapacityCrane(RandomUtils.nextDouble(500, 5000));
        obj.setCarryingCapacityElevator(RandomUtils.nextDouble(500, 5000));
        obj.setCeilingHeight(RandomUtils.nextDouble(2, 10));
        obj.setChildFriendly(RandomUtils.nextInt(0, 2) == 1);
        obj.setCornerHouse(RandomUtils.nextInt(0, 2) == 1);
        obj.setCurrency(Currency.getInstance("EUR"));
        obj.setDistanceKindergarten(RandomUtils.nextInt(50, 5000));
        obj.setDistanceMotorway(RandomUtils.nextInt(50, 5000));
        obj.setDistancePublicTransport(RandomUtils.nextInt(50, 5000));
        obj.setDistanceSchool1(RandomUtils.nextInt(50, 5000));
        obj.setDistanceSchool2(RandomUtils.nextInt(50, 5000));
        obj.setDistanceShop(RandomUtils.nextInt(50, 5000));
        obj.setElevator(RandomUtils.nextInt(0, 2) == 1);
        obj.setFireplace(RandomUtils.nextInt(0, 2) == 1);
        obj.setFlatSharingCommunity(RandomUtils.nextInt(0, 2) == 1);
        obj.setFloor(RandomUtils.nextInt(0, 10));
        obj.setGarage(RandomUtils.nextInt(0, 2) == 1);
        obj.setGardenhouse(RandomUtils.nextInt(0, 2) == 1);
        obj.setGasSupply(RandomUtils.nextInt(0, 2) == 1);
        obj.setGrossPremium(GrossPremium.FROM_4_UNTIL_5);
        obj.setHallHeight(RandomUtils.nextDouble(3, 15));
        obj.setIsdn(RandomUtils.nextInt(0, 2) == 1);
        obj.setLastModified(Calendar.getInstance());
        obj.setLiftingPlatform(RandomUtils.nextInt(0, 2) == 1);
        obj.setMaximalFloorLoading(RandomUtils.nextDouble(50, 5000));
        obj.setMiddleHouse(RandomUtils.nextInt(0, 2) == 1);
        obj.setMinEnergyCertified(RandomUtils.nextInt(0, 2) == 1);
        obj.setMinEnergyGeneral(RandomUtils.nextInt(0, 2) == 1);
        obj.setNewBuilding(RandomUtils.nextInt(0, 2) == 1);
        obj.setNumberOfApartments(RandomUtils.nextDouble(1, 10));
        obj.setNumberOfFloors(RandomUtils.nextInt(1, 10));
        obj.setNumberOfRooms(RandomUtils.nextDouble(1, 10));
        obj.setObjectCity("Berlin");
        obj.setObjectCountry(Locale.GERMANY.getCountry());
        obj.setObjectDescription("some description" + SystemUtils.LINE_SEPARATOR + " about the object");
        obj.setObjectSituation("some description about the location");
        obj.setObjectState("BE");
        obj.setObjectStreet("example street 124");
        obj.setObjectTitle("title of object");
        obj.setObjectType(ObjectType.HOUSE_VILLA);
        obj.setObjectZip("12345");
        obj.setOfferType(OfferType.SALE);
        obj.setOldBuilding(RandomUtils.nextInt(0, 2) == 1);
        obj.setOwnObjectUrl("http://test.org/object/123");
        obj.setParking(RandomUtils.nextInt(0, 2) == 1);
        obj.setPowerSupply(RandomUtils.nextInt(0, 2) == 1);
        obj.setPriceUnit(PriceUnit.MONTHLY);
        obj.setRailwayTerminal(RandomUtils.nextInt(0, 2) == 1);
        obj.setRaisedGroundFloor(RandomUtils.nextInt(0, 2) == 1);
        obj.setRamp(RandomUtils.nextInt(0, 2) == 1);
        obj.setRefHouse(RandomStringUtils.randomAlphanumeric(5));
        obj.setRefObject(RandomStringUtils.randomAlphanumeric(5));
        obj.setRefProperty(RandomStringUtils.randomAlphanumeric(5));
        obj.setRentExtra(RandomUtils.nextLong(100, 1000));
        obj.setRentNet(RandomUtils.nextLong(100, 1000));
        obj.setRestrooms(RandomUtils.nextInt(0, 2) == 1);
        obj.setSellingPrice(RandomUtils.nextLong(100, 1000));
        obj.setSenderId("OpenEstate.org");
        obj.setSewageSupply(RandomUtils.nextInt(0, 2) == 1);
        obj.setSparefield1("spare field 1");
        obj.setSparefield2("spare field 2");
        obj.setSparefield3("spare field 3");
        obj.setSparefield4("spare field 4");
        obj.setSurfaceLiving(RandomUtils.nextLong(50, 300));
        obj.setSurfaceProperty(RandomUtils.nextLong(100, 1000));
        obj.setSurfaceUsable(RandomUtils.nextLong(100, 1000));
        obj.setSwimmingpool(RandomUtils.nextInt(0, 2) == 1);
        obj.setUnderBuildingLaws(RandomUtils.nextInt(0, 2) == 1);
        obj.setUnderRoof(RandomUtils.nextInt(0, 2) == 1);
        obj.setUrl("http://test.org/object/123");
        obj.setView(RandomUtils.nextInt(0, 2) == 1);
        obj.setVisitName("Max Mustermann");
        obj.setVisitPhone("030/123456");
        obj.setVisitRemark("notes about the contact person");
        obj.setVolume(RandomUtils.nextLong(50, 500));
        obj.setWaterSupply(RandomUtils.nextInt(0, 2) == 1);
        obj.setWheelcharAccessible(RandomUtils.nextInt(0, 2) == 1);
        obj.setYearBuilt(RandomUtils.nextInt(1900, 1995));
        obj.setYearRenovated(RandomUtils.nextInt(1995, 2010));

        obj.setDocument(new Media("document.pdf", "a document about the object"));
        obj.setMovie(new Media("document.mp4", "a document about the object"));
        obj.setPicture1(new Media("image1.jpg", "title for image 1", "description for image 1"));
        obj.setPicture2(new Media("image2.jpg", "title for image 2", "description for image 2"));
        obj.setPicture3(new Media("image3.jpg", "title for image 3", "description for image 3"));
        obj.setPicture4(new Media("image4.jpg", "title for image 4", "description for image 4"));
        obj.setPicture5(new Media("image5.jpg", "title for image 5", "description for image 5"));
        obj.setPicture6(new Media("image6.jpg", "title for image 6", "description for image 6"));
        obj.setPicture7(new Media("image7.jpg", "title for image 7", "description for image 7"));
        obj.setPicture8(new Media("image8.jpg", "title for image 8", "description for image 8"));
        obj.setPicture9(new Media("image9.jpg", "title for image 9", "description for image 9"));
        obj.setPicture10(new Media("image10.jpg", "title for image 10", "description for image 10"));
        obj.setPicture11(new Media("image11.jpg", "title for image 11", "description for image 11"));
        obj.setPicture12(new Media("image12.jpg", "title for image 12", "description for image 12"));
        obj.setPicture13(new Media("image13.jpg", "title for image 13", "description for image 13"));

        return obj;
    }

    /**
     * Write some {@link IdxRecord} objects into a {@link File}.
     *
     * @param records
     * the CSV records to write
     *
     * @param file
     * the file, where the document is written to
     */
    protected static void write(List<IdxRecord> records, File file) {
        LOGGER.info("writing document");
        IdxPrinter printer = null;
        try {
            printer = IdxPrinter.create(file);
            printer.printRecords(records);
            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);
        } finally {
            IOUtils.closeQuietly(printer);
        }
    }

    /**
     * Write some {@link IdxRecord} objects into an {@link OutputStream}.
     *
     * @param records
     * the CSV records to write
     *
     * @param output
     * the stream, where the document is written to
     */
    protected static void write(List<IdxRecord> records, OutputStream output) {
        LOGGER.info("writing document");
        try {
            IdxPrinter printer = IdxPrinter.create(output);
            printer.printRecords(records);
            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 some {@link IdxRecord} objects into a {@link Writer}.
     *
     * @param records
     * the CSV records to write
     *
     * @param output
     * the writer, where the document is written to
     */
    protected static void write(List<IdxRecord> records, Writer output) {
        LOGGER.info("writing document");
        try {
            IdxPrinter printer = IdxPrinter.create(output);
            printer.printRecords(records);
            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 some {@link IdxRecord} objects into a {@link String} and print the
     * results to the console.
     *
     * @param records
     * the CSV records to write
     */
    protected static void writeToConsole(List<IdxRecord> records) {
        LOGGER.info("writing document");
        IdxPrinter printer = null;
        try {
            StringBuilder csv = new StringBuilder();
            printer = IdxPrinter.create(csv);
            printer.printRecords(records);
            LOGGER.info(StringUtils.repeat("-", 50) + SystemUtils.LINE_SEPARATOR + csv.toString());
        } catch (Exception ex) {
            LOGGER.error("Can't write document into a string!");
            LOGGER.error("> " + ex.getLocalizedMessage(), ex);
            System.exit(1);
        } finally {
            IOUtils.closeQuietly(printer);
        }
    }
}