/* * HomeApplication.java 1 sept. 2006 * * Sweet Home 3D, Copyright (c) 2006 Emmanuel PUYBARET / eTeks <info@eteks.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package com.eteks.sweethome3d.model; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Application managing a list of homes displayed at screen. * @author Emmanuel Puybaret */ public abstract class HomeApplication { private List<Home> homes = new ArrayList<Home>(); private final CollectionChangeSupport<Home> homesChangeSupport = new CollectionChangeSupport<Home>(this); /** * Adds the home <code>listener</code> in parameter to this application. */ public void addHomesListener(CollectionListener<Home> listener) { this.homesChangeSupport.addCollectionListener(listener); } /** * Removes the home <code>listener</code> in parameter from this application. */ public void removeHomesListener(CollectionListener<Home> listener) { this.homesChangeSupport.removeCollectionListener(listener); } /** * Returns a new home. * @return a new home with wall heights equal to the one in user preferences. * @since 2.2 */ public Home createHome() { return new Home(getUserPreferences().getNewWallHeight()); } /** * Returns an unmodifiable collection of the homes of this application. */ public List<Home> getHomes() { return Collections.unmodifiableList(this.homes); } /** * Adds a given <code>home</code> to the homes list of this application. * Once the <code>home</code> is added, home listeners added * to this application will receive a * {@link CollectionListener#collectionChanged(CollectionEvent) collectionChanged} * notification, with an {@link CollectionEvent#getType() event type} * equal to {@link CollectionEvent.Type#ADD ADD}. */ public void addHome(Home home) { this.homes = new ArrayList<Home>(this.homes); this.homes.add(home); this.homesChangeSupport.fireCollectionChanged(home, this.homes.size() - 1, CollectionEvent.Type.ADD); } /** * Removes a given <code>home</code> from the homes list of this application. * Once the <code>home</code> is removed, home listeners added * to this application will receive a * {@link CollectionListener#collectionChanged(CollectionEvent) collectionChanged} * notification, with an {@link CollectionEvent#getType() event type} * equal to {@link CollectionEvent.Type#DELETE DELETE}. */ public void deleteHome(Home home) { int index = this.homes.indexOf(home); if (index != -1) { this.homes = new ArrayList<Home>(this.homes); this.homes.remove(index); this.homesChangeSupport.fireCollectionChanged(home, index, CollectionEvent.Type.DELETE); } } /** * Returns the default recorder able to write and read homes. */ public abstract HomeRecorder getHomeRecorder(); /** * Returns a recorder of a given <code>type</code> able to write and read homes. * Subclasses may override this method to return a recorder matching <code>type</code>. * @param type a hint for the application to choose the returned recorder. * @return the default recorder able to write and read homes. * @since 1.8 */ public HomeRecorder getHomeRecorder(HomeRecorder.Type type) { return getHomeRecorder(); } /** * Returns user preferences. */ public abstract UserPreferences getUserPreferences(); /** * Returns the name of this application. Default implementation returns <i>Sweet Home 3D</i>. * @since 1.6 */ public String getName() { return "Sweet Home 3D"; } /** * Returns information about the version of this application. * Default implementation returns an empty string. * @since 1.6 */ public String getVersion() { return ""; } /** * Returns the id of this application. * Default implementation returns null. * @since 4.0 */ public String getId() { return null; } }