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.util.Calendar; import java.util.Currency; 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.immobiliare_it.ImmobiliareItDocument; import org.openestate.io.immobiliare_it.ImmobiliareItUtils; import org.openestate.io.immobiliare_it.xml.Box; import org.openestate.io.immobiliare_it.xml.BusinessElement; import org.openestate.io.immobiliare_it.xml.ClassEnergy; import org.openestate.io.immobiliare_it.xml.Clazz; import org.openestate.io.immobiliare_it.xml.Feed; import org.openestate.io.immobiliare_it.xml.Feed.Properties.Property; import org.openestate.io.immobiliare_it.xml.Floor; import org.openestate.io.immobiliare_it.xml.Furniture; import org.openestate.io.immobiliare_it.xml.Garden; import org.openestate.io.immobiliare_it.xml.Heat; import org.openestate.io.immobiliare_it.xml.Kitchen; import org.openestate.io.immobiliare_it.xml.LocationStructure.Locality.Neighbourhood.LocationNeighbourhoodType; import org.openestate.io.immobiliare_it.xml.ObjectFactory; import org.openestate.io.immobiliare_it.xml.Operation; import org.openestate.io.immobiliare_it.xml.OwnershipType; import org.openestate.io.immobiliare_it.xml.PictureExtended; import org.openestate.io.immobiliare_it.xml.PictureProject; import org.openestate.io.immobiliare_it.xml.PropertyType; import org.openestate.io.immobiliare_it.xml.PropertyTypeBusiness; import org.openestate.io.immobiliare_it.xml.PropertyTypeSimple; import org.openestate.io.immobiliare_it.xml.Rental; import org.openestate.io.immobiliare_it.xml.Status; import org.openestate.io.immobiliare_it.xml.TerrainType; import org.openestate.io.immobiliare_it.xml.VideoProject; import org.openestate.io.immobiliare_it.xml.VideoType; import org.openestate.io.immobiliare_it.xml.YesNoReady; import org.openestate.io.immobiliare_it.xml.types.Category; import org.openestate.io.immobiliare_it.xml.types.EnergyUnit; import org.openestate.io.immobiliare_it.xml.types.LandSizeUnit; import org.openestate.io.immobiliare_it.xml.types.SizeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Example for writing XML files for * <a href="http://immobiliare.it">immobiliare.it</a>. * <p> * This example illustrates the programatic creation of documents for * <a href="http://immobiliare.it">immobiliare.it</a> and how they are written * into XML. * * @since 1.0 * @author Andreas Rudolph */ public class ImmobiliareItWritingExample { private final static Logger LOGGER = LoggerFactory.getLogger(ImmobiliareItWritingExample.class); private final static String PACKAGE = "/org/openestate/io/examples"; private final static ObjectFactory FACTORY = ImmobiliareItUtils.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(ImmobiliareItWritingExample.class.getResource(PACKAGE + "/log4j.properties")); // create a Feed object with some example data // this object corresponds to the <feed> root element in XML Feed feed = FACTORY.createFeed(); // append some example objects to the Feed object feed.setProperties(FACTORY.createFeedProperties()); feed.getProperties().getProperty().add(createProperty()); feed.getProperties().getProperty().add(createProperty()); // convert the Feed object into a XML document ImmobiliareItDocument doc = null; try { doc = ImmobiliareItDocument.newDocument(feed); } 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 a {@link Property} with some example data. * * @return * created example object */ protected static Property createProperty() { // create an example real estate for rent Property obj = FACTORY.createFeedPropertiesProperty(); obj.setBuildingStatus(Status.ABITABILE); obj.setCategory(Category.COMMERCIALE); obj.setDateExpiration(Calendar.getInstance()); obj.setDateUpdated(Calendar.getInstance()); obj.setOperation(Operation.WRITE); obj.setUniqueId(RandomStringUtils.randomAlphanumeric(5)); obj.setAgent(FACTORY.createFeedPropertiesPropertyAgent()); obj.getAgent().setEmail("agency@test.org"); obj.getAgent().setOfficeName("agency name"); obj.setBlueprints(FACTORY.createFeedPropertiesPropertyBlueprints()); obj.getBlueprints().getBlueprint().add(createPictureExtended()); obj.getBlueprints().getBlueprint().add(createPictureExtended()); obj.getBlueprints().getBlueprint().add(createPictureExtended()); obj.setBuilding(FACTORY.createBuilding()); obj.getBuilding().setCategory(Category.COMMERCIALE); obj.getBuilding().setClazz(Clazz.SIGNORILE); obj.getBuilding().setDetail(PropertyTypeBusiness.ALBERGO); obj.getBuilding().setStatus(Status.DISCRETO); obj.getBuilding().setType(PropertyType.BUNGALOW); obj.setExtraFeatures(FACTORY.createFeedPropertiesPropertyExtraFeatures()); obj.getExtraFeatures().setAirConditioning(RandomUtils.nextInt(0, 2) == 1); obj.getExtraFeatures().setBalcony(RandomUtils.nextInt(0, 2) == 1); obj.getExtraFeatures().setBathrooms(BigInteger.valueOf(RandomUtils.nextLong(1, 5))); obj.getExtraFeatures().setBeamHeight(BigInteger.valueOf(RandomUtils.nextLong(1, 10))); obj.getExtraFeatures().setBedrooms(BigInteger.valueOf(RandomUtils.nextLong(1, 5))); obj.getExtraFeatures().setBuildYear(RandomUtils.nextInt(1900, 2000)); obj.getExtraFeatures().setDocDescription("some descriptions"); obj.getExtraFeatures().setDocSpecification("some specifications"); obj.getExtraFeatures().setElevator(RandomUtils.nextInt(0, 2) == 1); obj.getExtraFeatures().setFloorplannerUrl("http://floorplanner-url.it/"); obj.getExtraFeatures().setFreeConditions("free conditions"); obj.getExtraFeatures().setFurniture(Furniture.PARZIALMENTE_ARREDATO); obj.getExtraFeatures().setGarden(Garden.NESSUNO); obj.getExtraFeatures().setHeating(Heat.AUTONOMO); obj.getExtraFeatures().setKitchen(Kitchen.SEMI_ABITABILE); obj.getExtraFeatures().setNet(RandomUtils.nextInt(0, 2) == 1); obj.getExtraFeatures().setNumFloors(BigInteger.valueOf(RandomUtils.nextLong(1, 5))); obj.getExtraFeatures().setOverheadCrane(YesNoReady.READY); obj.getExtraFeatures().setReception(RandomUtils.nextInt(0, 2) == 1); obj.getExtraFeatures().setRentContract(Rental.LIBERO); obj.getExtraFeatures().setSecurityAlarm(RandomUtils.nextInt(0, 2) == 1); obj.getExtraFeatures().setTerrace(RandomUtils.nextInt(0, 2) == 1); obj.getExtraFeatures().setVirtualTour("virtual tour"); obj.getExtraFeatures().setAdditionalCosts(FACTORY.createAdditionalCostsType()); obj.getExtraFeatures().getAdditionalCosts().setCurrency(Currency.getInstance("EUR")); obj.getExtraFeatures().getAdditionalCosts().setValue(BigInteger.valueOf(RandomUtils.nextLong(0, 5000))); obj.getExtraFeatures().setExternalArea(FACTORY.createLandSizeType()); obj.getExtraFeatures().getExternalArea().setUnit(LandSizeUnit.M2); obj.getExtraFeatures().getExternalArea().setValue(BigInteger.valueOf(RandomUtils.nextLong(50, 5000))); obj.getExtraFeatures().setFloor(FACTORY.createFloor()); obj.getExtraFeatures().getFloor().setType(Floor.FloorType.INTERMEDIO); obj.getExtraFeatures().getFloor().setValue(BigInteger.valueOf(RandomUtils.nextLong(0, 10))); obj.getExtraFeatures().setGarage(FACTORY.createBox()); obj.getExtraFeatures().getGarage().setType(Box.BoxType.POSTO_AUTO); obj.getExtraFeatures().getGarage().setValue(BigInteger.valueOf(RandomUtils.nextLong(0, 10))); obj.getExtraFeatures().setOfficeSize(FACTORY.createSizeType()); obj.getExtraFeatures().getOfficeSize().setUnit(SizeUnit.M2); obj.getExtraFeatures().getOfficeSize().setValue(BigInteger.valueOf(RandomUtils.nextLong(5, 50))); obj.setFeatures(FACTORY.createFeedPropertiesPropertyFeatures()); obj.getFeatures().setEnergyClass(ClassEnergy.D); obj.getFeatures().setRooms(RandomUtils.nextInt(1, 5)); obj.getFeatures().setEnergyPerformance(FACTORY.createClassEnergyPerformance()); obj.getFeatures().getEnergyPerformance().setCertified(RandomUtils.nextInt(0, 2) == 1); obj.getFeatures().getEnergyPerformance().setUnit(EnergyUnit.KWH_M2ANNO); obj.getFeatures().getEnergyPerformance().setValue("energy performance"); obj.getFeatures().setPrice(FACTORY.createPriceType()); obj.getFeatures().getPrice().setCurrency(Currency.getInstance("EUR")); obj.getFeatures().getPrice().setReserved(RandomUtils.nextInt(0, 2) == 1); obj.getFeatures().getPrice().setValue(BigInteger.valueOf(RandomUtils.nextLong(500, 5000000))); obj.getFeatures().setSize(FACTORY.createSizeType()); obj.getFeatures().getSize().setUnit(SizeUnit.M2); obj.getFeatures().getSize().setValue(BigInteger.valueOf(RandomUtils.nextLong(50, 5000))); obj.setLocation(FACTORY.createLocationStructure()); obj.getLocation().setAdministrativeArea("administrative area"); obj.getLocation().setCountryCode("DE"); obj.getLocation().setCity(FACTORY.createLocationStructureCity()); obj.getLocation().getCity().setCode(BigInteger.ZERO); obj.getLocation().getCity().setValue("Berlin"); obj.getLocation().setLocality(FACTORY.createLocationStructureLocality()); obj.getLocation().getLocality().setLatitude(BigDecimal.valueOf(RandomUtils.nextDouble(0, 90))); obj.getLocation().getLocality().setLongitude(BigDecimal.valueOf(RandomUtils.nextDouble(0, 90))); obj.getLocation().getLocality().setPostalCode("13125"); obj.getLocation().getLocality().setNeighbourhood(FACTORY.createLocationStructureLocalityNeighbourhood()); obj.getLocation().getLocality().getNeighbourhood().setId(BigInteger.ZERO); obj.getLocation().getLocality().getNeighbourhood().setType(LocationNeighbourhoodType.DISTRICT); obj.getLocation().getLocality().getNeighbourhood().setValue("about the neighbourhood"); obj.getLocation().getLocality().setThoroughfare(FACTORY.createLocationStructureLocalityThoroughfare()); obj.getLocation().getLocality().getThoroughfare().setDisplay(RandomUtils.nextInt(0, 2) == 1); obj.getLocation().getLocality().getThoroughfare().setValue("about thoroughfare"); obj.getLocation().setSubAdministrativeArea(FACTORY.createLocationStructureSubAdministrativeArea()); obj.getLocation().getSubAdministrativeArea().setCode(RandomStringUtils.randomAlphanumeric(5)); obj.getLocation().getSubAdministrativeArea().setValue("Berlin"); obj.setPictures(FACTORY.createFeedPropertiesPropertyPictures()); obj.getPictures().getPictureUrlAndPicture().add(createPicture()); obj.getPictures().getPictureUrlAndPicture().add(createPicture()); obj.getPictures().getPictureUrlAndPicture().add(createPicture()); obj.setPropertyType(FACTORY.createProptype()); obj.getPropertyType().setBusinessType(FACTORY.createBusinessElement()); obj.getPropertyType().getBusinessType().setCategory(BusinessElement.BusinessElementCategory.IMMOBILE); obj.getPropertyType().getBusinessType().setValue(PropertyTypeBusiness.ALTRO); obj.getPropertyType().setTerrains(FACTORY.createTerrains()); obj.getPropertyType().getTerrains().getTerrain().add(TerrainType.SEMINATIVO); obj.getPropertyType().setType(PropertyTypeSimple.CASA_INDIPENDENTE); obj.setTransactionType(FACTORY.createTransactionType()); obj.getTransactionType().setAuction(RandomUtils.nextInt(0, 2) == 1); obj.getTransactionType().setOwnership(OwnershipType.PARZIALE); obj.getTransactionType().setValue("notes about transaction"); obj.setVideos(FACTORY.createFeedPropertiesPropertyVideos()); obj.getVideos().getVideo().add(createVideo()); obj.getVideos().getVideo().add(createVideo()); return obj; } /** * Create a {@link PictureProject} with some example data. * * @return * created example object */ protected static PictureProject createPicture() { PictureProject pic = FACTORY.createPictureProject(); pic.setPosition(BigInteger.valueOf(RandomUtils.nextLong(0, 100))); pic.setValue("image-" + RandomUtils.nextInt(0, 999) + ".jpg"); return pic; } /** * Create a {@link PictureExtended} with some example data. * * @return * created example object */ protected static PictureExtended createPictureExtended() { PictureExtended pic = FACTORY.createPictureExtended(); pic.setPosition(BigInteger.valueOf(RandomUtils.nextLong(0, 100))); pic.setValue("image-" + RandomUtils.nextInt(0, 999) + ".jpg"); pic.setUrl("http://mywebsite.org/" + pic.getValue()); return pic; } /** * Create a {@link VideoProject} with some example data. * * @return * created example object */ protected static VideoProject createVideo() { VideoProject video = FACTORY.createVideoProject(); video.setType(VideoType.LOCAL); video.setValue("video-" + RandomUtils.nextInt(0, 999) + ".mp4"); return video; } /** * Write an {@link ImmobiliareItDocument} into a {@link File}. * * @param doc * the document to write * * @param file * the file, where the document is written to */ protected static void write(ImmobiliareItDocument 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 an {@link ImmobiliareItDocument} into an {@link OutputStream}. * * @param doc * the document to write * * @param output * the stream, where the document is written to */ protected static void write(ImmobiliareItDocument 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 an {@link ImmobiliareItDocument} into a {@link Writer}. * * @param doc * the document to write * * @param output * the writer, where the document is written to */ protected static void write(ImmobiliareItDocument 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 an {@link ImmobiliareItDocument} into a {@link String} and print the * results to the console. * * @param doc * the document to write */ protected static void writeToConsole(ImmobiliareItDocument 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); } } }