1 /* 2 * Copyright (C) 2003-2009 JNode.org 3 * 2009,2010 Matthias Treydte <mt@waldheinz.de> 4 * 5 * This library is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU Lesser General Public License as published 7 * by the Free Software Foundation; either version 2.1 of the License, or 8 * (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 13 * License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with this library; If not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 */ 19 20 package de.waldheinz.fs; 21 22 /** 23 * A base class that helps to implement the {@code FsObject} interface. 24 * 25 * @author Ewout Prangsma <epr at jnode.org> 26 * @author Matthias Treydte <waldheinz at gmail.com> 27 * @since 0.6 28 */ 29 public class AbstractFsObject implements FsObject { 30 31 /** 32 * Holds the read-only state of this object. 33 */ 34 private final boolean readOnly; 35 36 /** 37 * Remembers if this object still valid. 38 */ 39 private boolean valid; 40 41 /** 42 * Creates a new instance of {@code AbstractFsObject} which will be valid 43 * and have the specified read-only state. 44 * 45 * @param readOnly if the new object will be read-only 46 */ AbstractFsObject(boolean readOnly)47 protected AbstractFsObject(boolean readOnly) { 48 this.valid = true; 49 this.readOnly = readOnly; 50 } 51 52 /** 53 * {@inheritDoc} 54 * 55 * @return {@inheritDoc} 56 * @see #checkValid() 57 * @see #invalidate() 58 */ 59 @Override isValid()60 public final boolean isValid() { 61 return this.valid; 62 } 63 64 /** 65 * Marks this object as invalid. 66 * 67 * @see #isValid() 68 * @see #checkValid() 69 */ invalidate()70 protected final void invalidate() { 71 this.valid = false; 72 } 73 74 /** 75 * Convience method to check if this object is still valid and throw an 76 * {@code IllegalStateException} if it is not. 77 * 78 * @throws IllegalStateException if this object was invalidated 79 * @since 0.6 80 * @see #isValid() 81 * @see #invalidate() 82 */ checkValid()83 protected final void checkValid() throws IllegalStateException { 84 if (!isValid()) throw new IllegalStateException( 85 this + " is not valid"); 86 } 87 88 /** 89 * Convience method to check if this object is writable. An object is 90 * writable if it is both, valid and not read-only. 91 * 92 * @throws IllegalStateException if this object was invalidated 93 * @throws ReadOnlyException if this object was created with the read-only 94 * flag set 95 * @since 0.6 96 */ checkWritable()97 protected final void checkWritable() 98 throws IllegalStateException, ReadOnlyException { 99 100 checkValid(); 101 102 if (isReadOnly()) { 103 throw new ReadOnlyException(); 104 } 105 } 106 107 @Override isReadOnly()108 public final boolean isReadOnly() { 109 return this.readOnly; 110 } 111 112 } 113