/*
* Copyright (C) 2011 Laurent Caillette
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, either
* version 3 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, see <http://www.gnu.org/licenses/>.
*/
package org.novelang.common.filefixture;
import java.util.List;
import com.google.common.collect.ImmutableList;
/**
* @author Laurent Caillette
*/
public final class Directory extends SchemaNode implements Comparable< Directory > {
private List< Resource > resources = null ;
private List< Directory > directories = null ;
/*package*/ Directory( final String name ) {
super( name );
}
public List< Directory > getSubdirectories() {
if( null == directories ) {
throw new IllegalStateException(
"Not set: directories (did you initialize your test resources properly?)" ) ;
}
return directories ;
}
@Override
public Directory getRoot() {
if( getParent() == null ) {
return this ;
} else {
return getParent().getRoot() ;
}
}
public List< Resource > getResources() {
if( null == resources ) {
throw new IllegalStateException( "No set: resources" ) ;
}
return resources ;
}
/**
* Comparison occurs on {@link #getName()} as corresponding member is set at instantiation.
*/
@Override
public int compareTo( final Directory other ) {
return getName().compareTo( other.getName() ) ;
}
// ===============================================
// Fields set when interpreting class declarations
// ===============================================
/*package*/ void setDirectories( final List< Directory > directories ) {
if( null != this.directories ) {
throw new IllegalStateException( "Already set: directories" ) ;
}
this.directories = ImmutableList.copyOf( directories ) ;
}
/*package*/ void setResources( final List< Resource > resources ) {
if( null != this.resources ) {
throw new IllegalStateException( "Already set: resources" ) ;
}
this.resources = ImmutableList.copyOf( resources ) ;
}
}