/*
* citygml4j - The Open Source Java API for CityGML
* https://github.com/citygml4j
*
* Copyright 2013-2017 Claus Nagel <claus.nagel@gmail.com>
*
* 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.citygml4j.util.walker;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import org.citygml4j.model.common.visitor.XALVisitor;
import org.citygml4j.model.xal.Address;
import org.citygml4j.model.xal.AddressDetails;
import org.citygml4j.model.xal.AddressIdentifier;
import org.citygml4j.model.xal.AddressLatitude;
import org.citygml4j.model.xal.AddressLatitudeDirection;
import org.citygml4j.model.xal.AddressLine;
import org.citygml4j.model.xal.AddressLines;
import org.citygml4j.model.xal.AddressLongitude;
import org.citygml4j.model.xal.AddressLongitudeDirection;
import org.citygml4j.model.xal.AdministrativeArea;
import org.citygml4j.model.xal.AdministrativeAreaName;
import org.citygml4j.model.xal.Barcode;
import org.citygml4j.model.xal.BuildingName;
import org.citygml4j.model.xal.Country;
import org.citygml4j.model.xal.CountryName;
import org.citygml4j.model.xal.CountryNameCode;
import org.citygml4j.model.xal.Department;
import org.citygml4j.model.xal.DepartmentName;
import org.citygml4j.model.xal.DependentLocality;
import org.citygml4j.model.xal.DependentLocalityName;
import org.citygml4j.model.xal.DependentLocalityNumber;
import org.citygml4j.model.xal.DependentThoroughfare;
import org.citygml4j.model.xal.EndorsementLineCode;
import org.citygml4j.model.xal.Firm;
import org.citygml4j.model.xal.FirmName;
import org.citygml4j.model.xal.KeyLineCode;
import org.citygml4j.model.xal.LargeMailUser;
import org.citygml4j.model.xal.LargeMailUserIdentifier;
import org.citygml4j.model.xal.LargeMailUserName;
import org.citygml4j.model.xal.Locality;
import org.citygml4j.model.xal.LocalityName;
import org.citygml4j.model.xal.MailStop;
import org.citygml4j.model.xal.MailStopName;
import org.citygml4j.model.xal.MailStopNumber;
import org.citygml4j.model.xal.PostBox;
import org.citygml4j.model.xal.PostBoxNumber;
import org.citygml4j.model.xal.PostBoxNumberExtension;
import org.citygml4j.model.xal.PostBoxNumberPrefix;
import org.citygml4j.model.xal.PostBoxNumberSuffix;
import org.citygml4j.model.xal.PostOffice;
import org.citygml4j.model.xal.PostOfficeName;
import org.citygml4j.model.xal.PostOfficeNumber;
import org.citygml4j.model.xal.PostTown;
import org.citygml4j.model.xal.PostTownName;
import org.citygml4j.model.xal.PostTownSuffix;
import org.citygml4j.model.xal.PostalCode;
import org.citygml4j.model.xal.PostalCodeNumber;
import org.citygml4j.model.xal.PostalCodeNumberExtension;
import org.citygml4j.model.xal.PostalRoute;
import org.citygml4j.model.xal.PostalRouteName;
import org.citygml4j.model.xal.PostalRouteNumber;
import org.citygml4j.model.xal.PostalServiceElements;
import org.citygml4j.model.xal.Premise;
import org.citygml4j.model.xal.PremiseLocation;
import org.citygml4j.model.xal.PremiseName;
import org.citygml4j.model.xal.PremiseNumber;
import org.citygml4j.model.xal.PremiseNumberPrefix;
import org.citygml4j.model.xal.PremiseNumberRange;
import org.citygml4j.model.xal.PremiseNumberRangeFrom;
import org.citygml4j.model.xal.PremiseNumberRangeTo;
import org.citygml4j.model.xal.PremiseNumberSuffix;
import org.citygml4j.model.xal.SortingCode;
import org.citygml4j.model.xal.SubAdministrativeArea;
import org.citygml4j.model.xal.SubAdministrativeAreaName;
import org.citygml4j.model.xal.SubPremise;
import org.citygml4j.model.xal.SubPremiseLocation;
import org.citygml4j.model.xal.SubPremiseName;
import org.citygml4j.model.xal.SubPremiseNumber;
import org.citygml4j.model.xal.SubPremiseNumberPrefix;
import org.citygml4j.model.xal.SubPremiseNumberSuffix;
import org.citygml4j.model.xal.SupplementaryPostalServiceData;
import org.citygml4j.model.xal.Thoroughfare;
import org.citygml4j.model.xal.ThoroughfareLeadingType;
import org.citygml4j.model.xal.ThoroughfareName;
import org.citygml4j.model.xal.ThoroughfareNumber;
import org.citygml4j.model.xal.ThoroughfareNumberFrom;
import org.citygml4j.model.xal.ThoroughfareNumberFromContent;
import org.citygml4j.model.xal.ThoroughfareNumberOrRange;
import org.citygml4j.model.xal.ThoroughfareNumberPrefix;
import org.citygml4j.model.xal.ThoroughfareNumberRange;
import org.citygml4j.model.xal.ThoroughfareNumberSuffix;
import org.citygml4j.model.xal.ThoroughfareNumberTo;
import org.citygml4j.model.xal.ThoroughfareNumberToContent;
import org.citygml4j.model.xal.ThoroughfarePostDirection;
import org.citygml4j.model.xal.ThoroughfarePreDirection;
import org.citygml4j.model.xal.ThoroughfareTrailingType;
public abstract class XALWalker implements XALVisitor, Walker {
private Set<Object> visited = new HashSet<Object>();
private boolean shouldWalk = true;
public void reset() {
visited.clear();
shouldWalk = true;
}
public boolean shouldWalk() {
return shouldWalk;
}
public void setShouldWalk(boolean shouldWalk) {
this.shouldWalk = shouldWalk;
}
public boolean addToVisited(Object object) {
return visited.add(object);
}
public boolean hasVisited(Object object) {
return visited.contains(object);
}
public void visit(Address address) {
}
public void visit(AddressDetails addressDetails) {
if (addressDetails.isSetPostalServiceElements() && shouldWalk && visited.add(addressDetails.getPostalServiceElements()))
addressDetails.getPostalServiceElements().visit(this);
if (addressDetails.isSetAddress() && shouldWalk && visited.add(addressDetails.getAddress()))
addressDetails.getAddress().visit(this);
if (addressDetails.isSetAddressLines() && shouldWalk && visited.add(addressDetails.getAddressLines()))
addressDetails.getAddressLines().visit(this);
if (addressDetails.isSetCountry() && shouldWalk && visited.add(addressDetails.getCountry()))
addressDetails.getCountry().visit(this);
if (addressDetails.isSetAdministrativeArea() && shouldWalk && visited.add(addressDetails.getAdministrativeArea()))
addressDetails.getAdministrativeArea().visit(this);
if (addressDetails.isSetLocality() && shouldWalk && visited.add(addressDetails.getLocality()))
addressDetails.getLocality().visit(this);
if (addressDetails.isSetThoroughfare() && shouldWalk && visited.add(addressDetails.getThoroughfare()))
addressDetails.getThoroughfare().visit(this);
}
public void visit(AddressIdentifier addressIdentifier) {
}
public void visit(AddressLatitude addressLatitude) {
}
public void visit(AddressLatitudeDirection addressLatitudeDirection) {
}
public void visit(AddressLine addressLine) {
}
public void visit(AddressLines addressLines) {
if (addressLines.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(addressLines.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
}
public void visit(AddressLongitude addressLongitude) {
}
public void visit(AddressLongitudeDirection addressLongitudeDirection) {
}
public void visit(AdministrativeArea administrativeArea) {
if (administrativeArea.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(administrativeArea.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (administrativeArea.isSetAdministrativeAreaName()) {
for (AdministrativeAreaName administrativeAreaName : new ArrayList<AdministrativeAreaName>(administrativeArea.getAdministrativeAreaName()))
if (shouldWalk && visited.add(administrativeAreaName))
administrativeAreaName.visit(this);
}
if (administrativeArea.isSetSubAdministrativeArea() && shouldWalk && visited.add(administrativeArea.getSubAdministrativeArea()))
administrativeArea.getSubAdministrativeArea().visit(this);
if (administrativeArea.isSetLocality() && shouldWalk && visited.add(administrativeArea.getLocality()))
administrativeArea.getLocality().visit(this);
if (administrativeArea.isSetPostOffice() && shouldWalk && visited.add(administrativeArea.getPostOffice()))
administrativeArea.getPostOffice().visit(this);
if (administrativeArea.isSetPostalCode() && shouldWalk && visited.add(administrativeArea.getPostalCode()))
administrativeArea.getPostalCode().visit(this);
}
public void visit(AdministrativeAreaName administrativeAreaName) {
}
public void visit(Barcode barcode) {
}
public void visit(BuildingName buildingName) {
}
public void visit(Country country) {
if (country.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(country.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (country.isSetCountryNameCode()) {
for (CountryNameCode countryNameCode : new ArrayList<CountryNameCode>(country.getCountryNameCode()))
if (shouldWalk && visited.add(countryNameCode))
countryNameCode.visit(this);
}
if (country.isSetCountryName()) {
for (CountryName countryName : new ArrayList<CountryName>(country.getCountryName()))
if (shouldWalk && visited.add(countryName))
countryName.visit(this);
}
if (country.isSetAdministrativeArea() && shouldWalk && visited.add(country.getAdministrativeArea()))
country.getAdministrativeArea().visit(this);
if (country.isSetLocality() && shouldWalk && visited.add(country.getLocality()))
country.getLocality().visit(this);
if (country.isSetThoroughfare() && shouldWalk && visited.add(country.getThoroughfare()))
country.getThoroughfare().visit(this);
}
public void visit(CountryName countryName) {
}
public void visit(CountryNameCode countryNameCode) {
}
public void visit(Department department) {
if (department.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(department.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (department.isSetDepartmentName()) {
for (DepartmentName departmentName : new ArrayList<DepartmentName>(department.getDepartmentName()))
if (shouldWalk && visited.add(departmentName))
departmentName.visit(this);
}
if (department.isSetMailStop() && shouldWalk && visited.add(department.getMailStop()))
department.getMailStop().visit(this);
if (department.isSetPostalCode() && shouldWalk && visited.add(department.getPostalCode()))
department.getPostalCode().visit(this);
}
public void visit(DepartmentName departmentName) {
}
public void visit(DependentLocality dependentLocality) {
if (dependentLocality.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(dependentLocality.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (dependentLocality.isSetDependentLocalityName()) {
for (DependentLocalityName dependentLocalityName : new ArrayList<DependentLocalityName>(dependentLocality.getDependentLocalityName()))
if (shouldWalk && visited.add(dependentLocalityName))
dependentLocalityName.visit(this);
}
if (dependentLocality.isSetDependentLocalityNumber() && shouldWalk && visited.add(dependentLocality.getDependentLocalityNumber()))
dependentLocality.getDependentLocalityNumber().visit(this);
if (dependentLocality.isSetPostBox() && shouldWalk && visited.add(dependentLocality.getPostBox()))
dependentLocality.getPostBox().visit(this);
if (dependentLocality.isSetLargeMailUser() & shouldWalk && visited.add(dependentLocality.getLargeMailUser()))
dependentLocality.getLargeMailUser().visit(this);
if (dependentLocality.isSetPostOffice() && shouldWalk && visited.add(dependentLocality.getPostOffice()))
dependentLocality.getPostOffice().visit(this);
if (dependentLocality.isSetPostalRoute() && shouldWalk && visited.add(dependentLocality.getPostalRoute()))
dependentLocality.getPostalRoute().visit(this);
if (dependentLocality.isSetThoroughfare() && shouldWalk && visited.add(dependentLocality.getThoroughfare()))
dependentLocality.getThoroughfare().visit(this);
if (dependentLocality.isSetPremise() && shouldWalk && visited.add(dependentLocality.getPremise()))
dependentLocality.getPremise().visit(this);
if (dependentLocality.isSetDependentLocality() && shouldWalk && visited.add(dependentLocality.getDependentLocality()))
dependentLocality.getDependentLocality().visit(this);
if (dependentLocality.isSetPostalCode() && shouldWalk && visited.add(dependentLocality.getPostalCode()))
dependentLocality.getPostalCode().visit(this);
}
public void visit(DependentLocalityName dependentLocalityName) {
}
public void visit(DependentLocalityNumber dependentLocalityNumber) {
}
public void visit(DependentThoroughfare dependentThoroughfare) {
if (dependentThoroughfare.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(dependentThoroughfare.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (dependentThoroughfare.isSetThoroughfareName()) {
for (ThoroughfareName thoroughfareName : new ArrayList<ThoroughfareName>(dependentThoroughfare.getThoroughfareName()))
if (shouldWalk && visited.add(thoroughfareName))
thoroughfareName.visit(this);
}
if (dependentThoroughfare.isSetThoroughfarePreDirection() && shouldWalk && visited.add(dependentThoroughfare.getThoroughfarePreDirection()))
dependentThoroughfare.getThoroughfarePreDirection().visit(this);
if (dependentThoroughfare.isSetThoroughfareLeadingType() && shouldWalk && visited.add(dependentThoroughfare.getThoroughfareLeadingType()))
dependentThoroughfare.getThoroughfareLeadingType().visit(this);
if (dependentThoroughfare.isSetThoroughfareTrailingType() && shouldWalk && visited.add(dependentThoroughfare.getThoroughfareTrailingType()))
dependentThoroughfare.getThoroughfareTrailingType().visit(this);
if (dependentThoroughfare.isSetThoroughfarePostDirection() && shouldWalk && visited.add(dependentThoroughfare.getThoroughfarePostDirection()))
dependentThoroughfare.getThoroughfarePostDirection().visit(this);
}
public void visit(EndorsementLineCode endorsementLineCode) {
}
public void visit(Firm firm) {
if (firm.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(firm.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (firm.isSetFirmName()) {
for (FirmName firmName : new ArrayList<FirmName>(firm.getFirmName()))
if (shouldWalk && visited.add(firmName))
firmName.visit(this);
}
if (firm.isSetDepartment()) {
for (Department department : new ArrayList<Department>(firm.getDepartment()))
if (shouldWalk && visited.add(department))
department.visit(this);
}
if (firm.isSetMailStop() && shouldWalk && visited.add(firm.getMailStop()))
firm.getMailStop().visit(this);
if (firm.isSetPostalCode() && shouldWalk && visited.add(firm.getPostalCode()))
firm.getPostalCode().visit(this);
}
public void visit(FirmName firmName) {
}
public void visit(KeyLineCode keyLineCode) {
}
public void visit(LargeMailUser largeMailUser) {
if (largeMailUser.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(largeMailUser.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (largeMailUser.isSetLargeMailUserName()) {
for (LargeMailUserName largeMailUserName : new ArrayList<LargeMailUserName>(largeMailUser.getLargeMailUserName()))
if (shouldWalk && visited.add(largeMailUserName))
largeMailUserName.visit(this);
}
if (largeMailUser.isSetBuildingName()) {
for (BuildingName buildingName : new ArrayList<BuildingName>(largeMailUser.getBuildingName()))
if (shouldWalk && visited.add(buildingName))
buildingName.visit(this);
}
if (largeMailUser.isSetLargeMailUserIdentifier() && shouldWalk && visited.add(largeMailUser.getLargeMailUserIdentifier()))
largeMailUser.getLargeMailUserIdentifier().visit(this);
if (largeMailUser.isSetDepartment() && shouldWalk && visited.add(largeMailUser.getDepartment()))
largeMailUser.getDepartment().visit(this);
if (largeMailUser.isSetPostBox() && shouldWalk && visited.add(largeMailUser.getPostBox()))
largeMailUser.getPostBox().visit(this);
if (largeMailUser.isSetThoroughfare() && shouldWalk && visited.add(largeMailUser.getThoroughfare()))
largeMailUser.getThoroughfare().visit(this);
if (largeMailUser.isSetPostalCode() && shouldWalk && visited.add(largeMailUser.getPostalCode()))
largeMailUser.getPostalCode().visit(this);
}
public void visit(LargeMailUserIdentifier largeMailUserIdentifier) {
}
public void visit(LargeMailUserName largeMailUserName) {
}
public void visit(Locality locality) {
if (locality.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(locality.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (locality.isSetLocalityName()) {
for (LocalityName localityName : new ArrayList<LocalityName>(locality.getLocalityName()))
if (shouldWalk && visited.add(localityName))
localityName.visit(this);
}
if (locality.isSetPostBox() && shouldWalk && visited.add(locality.getPostBox()))
locality.getPostBox().visit(this);
if (locality.isSetLargeMailUser() && shouldWalk && visited.add(locality.getLargeMailUser()))
locality.getLargeMailUser().visit(this);
if (locality.isSetPostOffice() && shouldWalk && visited.add(locality.getPostOffice()))
locality.getPostOffice().visit(this);
if (locality.isSetPostalRoute() && shouldWalk && visited.add(locality.getPostalRoute()))
locality.getPostalRoute().visit(this);
if (locality.isSetThoroughfare() && shouldWalk && visited.add(locality.getThoroughfare()))
locality.getThoroughfare().visit(this);
if (locality.isSetPremise() && shouldWalk && visited.add(locality.getPremise()))
locality.getPremise().visit(this);
if (locality.isSetDependentLocality() && shouldWalk && visited.add(locality.getDependentLocality()))
locality.getDependentLocality().visit(this);
if (locality.isSetPostalCode() && shouldWalk && visited.add(locality.getPostalCode()))
locality.getPostalCode().visit(this);
}
public void visit(LocalityName localityName) {
}
public void visit(MailStop mailStop) {
if (mailStop.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(mailStop.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (mailStop.isSetMailStopName() && shouldWalk && visited.add(mailStop.getMailStopName()))
mailStop.getMailStopName().visit(this);
if (mailStop.isSetMailStopNumber() && shouldWalk && visited.add(mailStop.getMailStopNumber()))
mailStop.getMailStopNumber().visit(this);
}
public void visit(MailStopName mailStopName) {
}
public void visit(MailStopNumber mailStopNumber) {
}
public void visit(PostalCode postalCode) {
if (postalCode.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(postalCode.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (postalCode.isSetPostalCodeNumber()) {
for (PostalCodeNumber postalCodeNumber : new ArrayList<PostalCodeNumber>(postalCode.getPostalCodeNumber()))
if (shouldWalk && visited.add(postalCodeNumber))
postalCodeNumber.visit(this);
}
if (postalCode.isSetPostalCodeNumberExtension()) {
for (PostalCodeNumberExtension postalCodeNumberExtension : new ArrayList<PostalCodeNumberExtension>(postalCode.getPostalCodeNumberExtension()))
if (shouldWalk && visited.add(postalCodeNumberExtension))
postalCodeNumberExtension.visit(this);
}
if (postalCode.isSetPostTown() && shouldWalk && visited.add(postalCode.getPostTown()))
postalCode.getPostTown().visit(this);
}
public void visit(PostalCodeNumber postalCodeNumber) {
}
public void visit(PostalCodeNumberExtension postalCodeNumberExtension) {
}
public void visit(PostalRoute postalRoute) {
if (postalRoute.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(postalRoute.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (postalRoute.isSetPostalRouteName()) {
for (PostalRouteName postalRouteName : new ArrayList<PostalRouteName>(postalRoute.getPostalRouteName()))
if (shouldWalk && visited.add(postalRouteName))
postalRouteName.visit(this);
}
if (postalRoute.isSetPostalRouteNumber() && shouldWalk && visited.add(postalRoute.getPostalRouteNumber()))
postalRoute.getPostalRouteNumber().visit(this);
if (postalRoute.isSetPostBox() && shouldWalk && visited.add(postalRoute.getPostBox()))
postalRoute.getPostBox().visit(this);
}
public void visit(PostalRouteName postalRouteName) {
}
public void visit(PostalRouteNumber postalRouteNumber) {
}
public void visit(PostalServiceElements postalServiceElements) {
if (postalServiceElements.isSetAddressIdentifier()) {
for (AddressIdentifier addressIdentifier : new ArrayList<AddressIdentifier>(postalServiceElements.getAddressIdentifier()))
if (shouldWalk && visited.add(addressIdentifier))
addressIdentifier.visit(this);
}
if (postalServiceElements.isSetSupplementaryPostalServiceData()) {
for (SupplementaryPostalServiceData supplementaryPostalServiceData : new ArrayList<SupplementaryPostalServiceData>(postalServiceElements.getSupplementaryPostalServiceData()))
if (shouldWalk && visited.add(supplementaryPostalServiceData))
supplementaryPostalServiceData.visit(this);
}
if (postalServiceElements.isSetEndorsementLineCode() && shouldWalk && visited.add(postalServiceElements.getEndorsementLineCode()))
postalServiceElements.getEndorsementLineCode().visit(this);
if (postalServiceElements.isSetKeyLineCode() && shouldWalk && visited.add(postalServiceElements.getKeyLineCode()))
postalServiceElements.getKeyLineCode().visit(this);
if (postalServiceElements.isSetBarcode() && shouldWalk && visited.add(postalServiceElements.getBarcode()))
postalServiceElements.getBarcode().visit(this);
if (postalServiceElements.isSetSortingCode() && shouldWalk && visited.add(postalServiceElements.getSortingCode()))
postalServiceElements.getSortingCode().visit(this);
if (postalServiceElements.isSetAddressLatitude() && shouldWalk && visited.add(postalServiceElements.getAddressLatitude()))
postalServiceElements.getAddressLatitude().visit(this);
if (postalServiceElements.isSetAddressLatitudeDirection() && shouldWalk && visited.add(postalServiceElements.getAddressLatitudeDirection()))
postalServiceElements.getAddressLatitudeDirection().visit(this);
if (postalServiceElements.isSetAddressLongitude() && shouldWalk && visited.add(postalServiceElements.getAddressLongitude()))
postalServiceElements.getAddressLongitude().visit(this);
if (postalServiceElements.isSetAddressLongitudeDirection() && shouldWalk && visited.add(postalServiceElements.getAddressLongitudeDirection()))
postalServiceElements.getAddressLongitudeDirection().visit(this);
}
public void visit(PostBox postBox) {
if (postBox.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(postBox.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (postBox.isSetPostBoxNumber() && shouldWalk && visited.add(postBox.getPostBoxNumber()))
postBox.getPostBoxNumber().visit(this);
if (postBox.isSetPostBoxNumberPrefix() && shouldWalk && visited.add(postBox.getPostBoxNumberPrefix()))
postBox.getPostBoxNumberPrefix().visit(this);
if (postBox.isSetPostBoxNumberSuffix() && shouldWalk && visited.add(postBox.getPostBoxNumberSuffix()))
postBox.getPostBoxNumberSuffix().visit(this);
if (postBox.isSetPostBoxNumberExtension() && shouldWalk && visited.add(postBox.getPostBoxNumberExtension()))
postBox.getPostBoxNumberExtension().visit(this);
if (postBox.isSetFirm() && shouldWalk && visited.add(postBox.getFirm()))
postBox.getFirm().visit(this);
if (postBox.isSetPostalCode() && shouldWalk && visited.add(postBox.getPostalCode()))
postBox.getPostalCode().visit(this);
}
public void visit(PostBoxNumber postBoxNumber) {
}
public void visit(PostBoxNumberExtension postBoxNumberExtension) {
}
public void visit(PostBoxNumberPrefix postBoxNumberPrefix) {
}
public void visit(PostBoxNumberSuffix postBoxNumberSuffix) {
}
public void visit(PostOffice postOffice) {
if (postOffice.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(postOffice.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (postOffice.isSetPostOfficeName()) {
for (PostOfficeName postOfficeName : new ArrayList<PostOfficeName>(postOffice.getPostOfficeName()))
if (shouldWalk && visited.add(postOfficeName))
postOfficeName.visit(this);
}
if (postOffice.isSetPostOfficeNumber() && shouldWalk && visited.add(postOffice.getPostOfficeNumber()))
postOffice.getPostOfficeNumber().visit(this);
if (postOffice.isSetPostalRoute() && shouldWalk && visited.add(postOffice.getPostalRoute()))
postOffice.getPostalRoute().visit(this);
if (postOffice.isSetPostBox() && shouldWalk && visited.add(postOffice.getPostBox()))
postOffice.getPostBox().visit(this);
if (postOffice.isSetPostalCode() && shouldWalk && visited.add(postOffice.getPostalCode()))
postOffice.getPostalCode().visit(this);
}
public void visit(PostOfficeName postOfficeName) {
}
public void visit(PostOfficeNumber postOfficeNumber) {
}
public void visit(PostTown postTown) {
if (postTown.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(postTown.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (postTown.isSetPostTownName()) {
for (PostTownName postTownName : new ArrayList<PostTownName>(postTown.getPostTownName()))
if (shouldWalk && visited.add(postTownName))
postTownName.visit(this);
}
if (postTown.isSetPostTownSuffix() && shouldWalk && visited.add(postTown.getPostTownSuffix()))
postTown.getPostTownSuffix().visit(this);
}
public void visit(PostTownName postTownName) {
}
public void visit(PostTownSuffix postTownSuffix) {
}
public void visit(Premise premise) {
if (premise.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(premise.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (premise.isSetPremiseName()) {
for (PremiseName premiseName : new ArrayList<PremiseName>(premise.getPremiseName()))
if (shouldWalk && visited.add(premiseName))
premiseName.visit(this);
}
if (premise.isSetPremiseNumber()) {
for (PremiseNumber premiseNumber : new ArrayList<PremiseNumber>(premise.getPremiseNumber()))
if (shouldWalk && visited.add(premiseNumber))
premiseNumber.visit(this);
}
if (premise.isSetPremiseNumberPrefix()) {
for (PremiseNumberPrefix premiseNumberPrefix : new ArrayList<PremiseNumberPrefix>(premise.getPremiseNumberPrefix()))
if (shouldWalk && visited.add(premiseNumberPrefix))
premiseNumberPrefix.visit(this);
}
if (premise.isSetPremiseNumberSuffix()) {
for (PremiseNumberSuffix premiseNumberSuffix : new ArrayList<PremiseNumberSuffix>(premise.getPremiseNumberSuffix()))
if (shouldWalk && visited.add(premiseNumberSuffix))
premiseNumberSuffix.visit(this);
}
if (premise.isSetBuildingName()) {
for (BuildingName buildingName : new ArrayList<BuildingName>(premise.getBuildingName()))
if (shouldWalk && visited.add(buildingName))
buildingName.visit(this);
}
if (premise.isSetSubPremise()) {
for (SubPremise subPremise : new ArrayList<SubPremise>(premise.getSubPremise()))
if (shouldWalk && visited.add(subPremise))
subPremise.visit(this);
}
if (premise.isSetPremiseLocation() && shouldWalk && visited.add(premise.getPremiseLocation()))
premise.getPremiseLocation().visit(this);
if (premise.isSetPremiseNumberRange() && shouldWalk && visited.add(premise.getPremiseNumberRange()))
premise.getPremiseNumberRange().visit(this);
if (premise.isSetFirm() && shouldWalk && visited.add(premise.getFirm()))
premise.getFirm().visit(this);
if (premise.isSetMailStop() && shouldWalk && visited.add(premise.getMailStop()))
premise.getMailStop().visit(this);
if (premise.isSetPostalCode() && shouldWalk && visited.add(premise.getPostalCode()))
premise.getPostalCode().visit(this);
if (premise.isSetPremise() && shouldWalk && visited.add(premise.getPremise()))
premise.getPremise().visit(this);
}
public void visit(PremiseLocation premiseLocation) {
}
public void visit(PremiseName premiseName) {
}
public void visit(PremiseNumber premiseNumber) {
}
public void visit(PremiseNumberPrefix premiseNumberPrefix) {
}
public void visit(PremiseNumberRange premiseNumberRange) {
if (premiseNumberRange.isSetPremiseNumberRangeFrom() && shouldWalk && visited.add(premiseNumberRange.getPremiseNumberRangeFrom()))
premiseNumberRange.getPremiseNumberRangeFrom().visit(this);
if (premiseNumberRange.isSetPremiseNumberRangeTo() && shouldWalk && visited.add(premiseNumberRange.getPremiseNumberRangeTo()))
premiseNumberRange.getPremiseNumberRangeTo().visit(this);
}
public void visit(PremiseNumberRangeFrom premiseNumberRangeFrom) {
if (premiseNumberRangeFrom.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(premiseNumberRangeFrom.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (premiseNumberRangeFrom.isSetPremiseNumberPrefix()) {
for (PremiseNumberPrefix premiseNumberPrefix : new ArrayList<PremiseNumberPrefix>(premiseNumberRangeFrom.getPremiseNumberPrefix()))
if (shouldWalk && visited.add(premiseNumberPrefix))
premiseNumberPrefix.visit(this);
}
if (premiseNumberRangeFrom.isSetPremiseNumber()) {
for (PremiseNumber premiseNumber : new ArrayList<PremiseNumber>(premiseNumberRangeFrom.getPremiseNumber()))
if (shouldWalk && visited.add(premiseNumber))
premiseNumber.visit(this);
}
if (premiseNumberRangeFrom.isSetPremiseNumberSuffix()) {
for (PremiseNumberSuffix premiseNumberSuffix : new ArrayList<PremiseNumberSuffix>(premiseNumberRangeFrom.getPremiseNumberSuffix()))
if (shouldWalk && visited.add(premiseNumberSuffix))
premiseNumberSuffix.visit(this);
}
}
public void visit(PremiseNumberRangeTo premiseNumberRangeTo) {
if (premiseNumberRangeTo.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(premiseNumberRangeTo.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (premiseNumberRangeTo.isSetPremiseNumberPrefix()) {
for (PremiseNumberPrefix premiseNumberPrefix : new ArrayList<PremiseNumberPrefix>(premiseNumberRangeTo.getPremiseNumberPrefix()))
if (shouldWalk && visited.add(premiseNumberPrefix))
premiseNumberPrefix.visit(this);
}
if (premiseNumberRangeTo.isSetPremiseNumber()) {
for (PremiseNumber premiseNumber : new ArrayList<PremiseNumber>(premiseNumberRangeTo.getPremiseNumber()))
if (shouldWalk && visited.add(premiseNumber))
premiseNumber.visit(this);
}
if (premiseNumberRangeTo.isSetPremiseNumberSuffix()) {
for (PremiseNumberSuffix premiseNumberSuffix : new ArrayList<PremiseNumberSuffix>(premiseNumberRangeTo.getPremiseNumberSuffix()))
if (shouldWalk && visited.add(premiseNumberSuffix))
premiseNumberSuffix.visit(this);
}
}
public void visit(PremiseNumberSuffix premiseNumberSuffix) {
}
public void visit(SortingCode sortingCode) {
}
public void visit(SubAdministrativeArea subAdministrativeArea) {
if (subAdministrativeArea.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(subAdministrativeArea.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (subAdministrativeArea.isSetSubAdministrativeAreaName()) {
for (SubAdministrativeAreaName subAdministrativeAreaName : new ArrayList<SubAdministrativeAreaName>(subAdministrativeArea.getSubAdministrativeAreaName()))
if (shouldWalk && visited.add(subAdministrativeAreaName))
subAdministrativeAreaName.visit(this);
}
if (subAdministrativeArea.isSetLocality() && shouldWalk && visited.add(subAdministrativeArea.getLocality()))
subAdministrativeArea.getLocality().visit(this);
if (subAdministrativeArea.isSetPostOffice() && shouldWalk && visited.add(subAdministrativeArea.getPostOffice()))
subAdministrativeArea.getPostOffice().visit(this);
if (subAdministrativeArea.isSetPostalCode() && shouldWalk && visited.add(subAdministrativeArea.getPostalCode()))
subAdministrativeArea.getPostalCode().visit(this);
}
public void visit(SubAdministrativeAreaName subAdministrativeAreaName) {
}
public void visit(SubPremise subPremise) {
if (subPremise.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(subPremise.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (subPremise.isSetSubPremiseName()) {
for (SubPremiseName subPremiseName : new ArrayList<SubPremiseName>(subPremise.getSubPremiseName()))
if (shouldWalk && visited.add(subPremiseName))
subPremiseName.visit(this);
}
if (subPremise.isSetSubPremiseNumber()) {
for (SubPremiseNumber subPremiseNumber : new ArrayList<SubPremiseNumber>(subPremise.getSubPremiseNumber()))
if (shouldWalk && visited.add(subPremiseNumber))
subPremiseNumber.visit(this);
}
if (subPremise.isSetSubPremiseNumberPrefix()) {
for (SubPremiseNumberPrefix subPremiseNumberPrefix : new ArrayList<SubPremiseNumberPrefix>(subPremise.getSubPremiseNumberPrefix()))
if (shouldWalk && visited.add(subPremiseNumberPrefix))
subPremiseNumberPrefix.visit(this);
}
if (subPremise.isSetSubPremiseNumberSuffix()) {
for (SubPremiseNumberSuffix subPremiseNumberSuffix : new ArrayList<SubPremiseNumberSuffix>(subPremise.getSubPremiseNumberSuffix()))
if (shouldWalk && visited.add(subPremiseNumberSuffix))
subPremiseNumberSuffix.visit(this);
}
if (subPremise.isSetBuildingName()) {
for (BuildingName buildingName : new ArrayList<BuildingName>(subPremise.getBuildingName()))
if (shouldWalk && visited.add(buildingName))
buildingName.visit(this);
}
if (subPremise.isSetFirm() && shouldWalk && visited.add(subPremise.getFirm()))
subPremise.getFirm().visit(this);
if (subPremise.isSetSubPremiseLocation() && shouldWalk && visited.add(subPremise.getSubPremiseLocation()))
subPremise.getSubPremiseLocation().visit(this);
if (subPremise.isSetMailStop() && shouldWalk && visited.add(subPremise.getMailStop()))
subPremise.getMailStop().visit(this);
if (subPremise.isSetPostalCode() && shouldWalk && visited.add(subPremise.getPostalCode()))
subPremise.getPostalCode().visit(this);
if (subPremise.isSetSubPremise() && shouldWalk && visited.add(subPremise.getSubPremise()))
subPremise.getSubPremise().visit(this);
}
public void visit(SubPremiseLocation subPremiseLocation) {
}
public void visit(SubPremiseName subPremiseName) {
}
public void visit(SubPremiseNumber subPremiseNumber) {
}
public void visit(SubPremiseNumberPrefix subPremiseNumberPrefix) {
}
public void visit(SubPremiseNumberSuffix subPremiseNumberSuffix) {
}
public void visit(SupplementaryPostalServiceData supplementaryPostalServiceData) {
}
public void visit(Thoroughfare thoroughfare) {
if (thoroughfare.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(thoroughfare.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (thoroughfare.isSetThoroughfareNumberOrThoroughfareNumberRange()) {
for (ThoroughfareNumberOrRange thoroughfareNumberOrRange : new ArrayList<ThoroughfareNumberOrRange>(thoroughfare.getThoroughfareNumberOrThoroughfareNumberRange())) {
if (shouldWalk) {
if (thoroughfareNumberOrRange.isSetThoroughfareNumber() && visited.add(thoroughfareNumberOrRange.getThoroughfareNumber()))
thoroughfareNumberOrRange.getThoroughfareNumber().visit(this);
else if (thoroughfareNumberOrRange.isSetThoroughfareNumberRange() && visited.add(thoroughfareNumberOrRange.getThoroughfareNumberRange()))
thoroughfareNumberOrRange.getThoroughfareNumberRange().visit(this);
}
}
}
if (thoroughfare.isSetThoroughfareNumberPrefix()) {
for (ThoroughfareNumberPrefix numberPrefix : new ArrayList<ThoroughfareNumberPrefix>(thoroughfare.getThoroughfareNumberPrefix()))
if (shouldWalk && visited.add(numberPrefix))
numberPrefix.visit(this);
}
if (thoroughfare.isSetThoroughfareNumberSuffix()) {
for (ThoroughfareNumberSuffix numberSuffix : new ArrayList<ThoroughfareNumberSuffix>(thoroughfare.getThoroughfareNumberSuffix()))
if (shouldWalk && visited.add(numberSuffix))
numberSuffix.visit(this);
}
if (thoroughfare.isSetThoroughfareName()) {
for (ThoroughfareName thoroughfareName : new ArrayList<ThoroughfareName>(thoroughfare.getThoroughfareName()))
if (shouldWalk && visited.add(thoroughfareName))
thoroughfareName.visit(this);
}
if (thoroughfare.isSetThoroughfarePreDirection() && shouldWalk && visited.add(thoroughfare.getThoroughfarePreDirection()))
thoroughfare.getThoroughfarePreDirection().visit(this);
if (thoroughfare.isSetThoroughfareLeadingType() && shouldWalk && visited.add(thoroughfare.getThoroughfareLeadingType()))
thoroughfare.getThoroughfareLeadingType().visit(this);
if (thoroughfare.isSetThoroughfareTrailingType() && shouldWalk && visited.add(thoroughfare.getThoroughfareTrailingType()))
thoroughfare.getThoroughfareTrailingType().visit(this);
if (thoroughfare.isSetThoroughfarePostDirection() && shouldWalk && visited.add(thoroughfare.getThoroughfarePostDirection()))
thoroughfare.getThoroughfarePostDirection().visit(this);
if (thoroughfare.isSetDependentThoroughfare() && shouldWalk && visited.add(thoroughfare.getDependentThoroughfare()))
thoroughfare.getDependentThoroughfare().visit(this);
if (thoroughfare.isSetDependentLocality() && shouldWalk && visited.add(thoroughfare.getDependentLocality()))
thoroughfare.getDependentLocality().visit(this);
if (thoroughfare.isSetPremise() && shouldWalk && visited.add(thoroughfare.getPremise()))
thoroughfare.getPremise().visit(this);
if (thoroughfare.isSetFirm() && shouldWalk && visited.add(thoroughfare.getFirm()))
thoroughfare.getFirm().visit(this);
if (thoroughfare.isSetPostalCode() && shouldWalk && visited.add(thoroughfare.getPostalCode()))
thoroughfare.getPostalCode().visit(this);
}
public void visit(ThoroughfareLeadingType thoroughfareLeadingType) {
}
public void visit(ThoroughfareName thoroughfareName) {
}
public void visit(ThoroughfareNumber thoroughfareNumber) {
}
public void visit(ThoroughfareNumberFrom thoroughfareNumberFrom) {
if (thoroughfareNumberFrom.isSetContent()) {
for (ThoroughfareNumberFromContent content : new ArrayList<ThoroughfareNumberFromContent>(thoroughfareNumberFrom.getContent())) {
if (shouldWalk) {
if (content.isSetAddressLine() && visited.add(content.getAddressLine()))
content.getAddressLine().visit(this);
else if (content.isSetThoroughfareNumber() && visited.add(content.getThoroughfareNumber()))
content.getThoroughfareNumber().visit(this);
else if (content.isSetThoroughfareNumberPrefix() && visited.add(content.getThoroughfareNumberPrefix()))
content.getThoroughfareNumberPrefix().visit(this);
else if (content.isSetThoroughfareNumberSuffix() && visited.add(content.getThoroughfareNumberSuffix()))
content.getThoroughfareNumberSuffix().visit(this);
}
}
}
}
public void visit(ThoroughfareNumberPrefix thoroughfareNumberPrefix) {
}
public void visit(ThoroughfareNumberRange thoroughfareNumberRange) {
if (thoroughfareNumberRange.isSetAddressLine()) {
for (AddressLine addressLine : new ArrayList<AddressLine>(thoroughfareNumberRange.getAddressLine()))
if (shouldWalk && visited.add(addressLine))
addressLine.visit(this);
}
if (thoroughfareNumberRange.isSetThoroughfareNumberFrom() && shouldWalk && visited.add(thoroughfareNumberRange.getThoroughfareNumberFrom()))
thoroughfareNumberRange.getThoroughfareNumberFrom().visit(this);
if (thoroughfareNumberRange.isSetThoroughfareNumberTo() && shouldWalk && visited.add(thoroughfareNumberRange.getThoroughfareNumberTo()))
thoroughfareNumberRange.getThoroughfareNumberTo().visit(this);
}
public void visit(ThoroughfareNumberSuffix thoroughfareNumberSuffix) {
}
public void visit(ThoroughfareNumberTo thoroughfareNumberTo) {
if (thoroughfareNumberTo.isSetContent()) {
for (ThoroughfareNumberToContent content : new ArrayList<ThoroughfareNumberToContent>(thoroughfareNumberTo.getContent())) {
if (shouldWalk) {
if (content.isSetAddressLine() && visited.add(content.getAddressLine()))
content.getAddressLine().visit(this);
else if (content.isSetThoroughfareNumber() && visited.add(content.getThoroughfareNumber()))
content.getThoroughfareNumber().visit(this);
else if (content.isSetThoroughfareNumberPrefix() && visited.add(content.getThoroughfareNumberPrefix()))
content.getThoroughfareNumberPrefix().visit(this);
else if (content.isSetThoroughfareNumberSuffix() && visited.add(content.getThoroughfareNumberSuffix()))
content.getThoroughfareNumberSuffix().visit(this);
}
}
}
}
public void visit(ThoroughfarePostDirection thoroughfarePostDirection) {
}
public void visit(ThoroughfarePreDirection thoroughfarePreDirection) {
}
public void visit(ThoroughfareTrailingType thoroughfareTrailingType) {
}
}