ShareResourceDirContentsImplpublic class ShareResourceDirContentsImpl extends ShareResourceImpl implements ShareResourceDirContents
Fields Summary |
---|
protected File | root | protected boolean | recursive | protected ShareResource[] | children |
Constructors Summary |
---|
protected ShareResourceDirContentsImpl(ShareManagerImpl _manager, File _dir, boolean _recursive)
super( _manager, ST_DIR_CONTENTS );
root = _dir;
recursive = _recursive;
if ( !root.exists()){
throw( new ShareException( "Dir '".concat(root.getName()).concat("' not found")));
}
if ( root.isFile()){
throw( new ShareException( "Not a directory"));
}
// new resource, trigger processing
checkConsistency();
| protected ShareResourceDirContentsImpl(ShareManagerImpl _manager, File _dir, boolean _recursive, Map _map)
super( _manager, ST_DIR_CONTENTS, _map );
root = _dir;
recursive = _recursive;
// recovery - see comment below about not failing if dir doesn't exist...
if ( !root.exists()){
Debug.out( "Dir '" + root.getName() + "' not found");
// throw( new ShareException( "Dir '".concat(root.getName()).concat("' not found")));
}else{
if ( root.isFile()){
throw( new ShareException( "Not a directory"));
}
}
// deserialised resource, checkConsistency will be called later to trigger sub-share adding
|
Methods Summary |
---|
public boolean | canBeDeleted()
for (int i=0;i<children.length;i++){
if ( !children[i].canBeDeleted()){
return( false );
}
}
return( true );
| protected void | checkConsistency()
// ensure all shares are defined as per dir contents and recursion flag
List kids = checkConsistency(root);
if ( kids != null ){
children = new ShareResource[kids.size()];
kids.toArray( children );
}else{
children = new ShareResource[0];
}
| protected java.util.List | checkConsistency(java.io.File dir)
List kids = new ArrayList();
File[] files = dir.listFiles();
if ( files == null || !dir.exists() ){
// dir has been deleted
// actually, this can be bad as some os errors (e.g. "too many open files") can cause the dir
// to appear to have been deleted. However, we don't want to delete the share. So let's just
// leave it around, manual delete required if deletion required.
if ( dir == root ){
return( null );
}else{
manager.delete( this );
}
}else{
for (int i=0;i<files.length;i++){
File file = files[i];
String file_name = file.getName();
if (!(file_name.equals(".") || file_name.equals(".." ))){
if ( file.isDirectory()){
if ( recursive ){
List child = checkConsistency( file );
kids.add( new shareNode( this, file, child ));
}else{
try{
ShareResource res = manager.getDir( file );
if ( res == null ){
res = manager.addDir( this, file );
}
kids.add( res );
}catch( Throwable e ){
Debug.printStackTrace( e );
}
}
}else{
try{
ShareResource res = manager.getFile( file );
if ( res == null ){
res = manager.addFile( this, file );
}
kids.add( res );
}catch( Throwable e ){
Debug.printStackTrace( e );
}
}
}
}
for (int i=0;i<kids.size();i++){
Object o = kids.get(i);
if ( o instanceof ShareResourceImpl ){
((ShareResourceImpl)o).setParent(this);
}else{
((shareNode)o).setParent(this);
}
}
}
return( kids );
| protected void | deleteInternal()
for (int i=0;i<children.length;i++){
try{
if ( children[i] instanceof ShareResourceImpl ){
((ShareResourceImpl)children[i]).delete(true);
}else{
((shareNode)children[i]).delete(true);
}
}catch( Throwable e ){
Debug.printStackTrace( e );
}
}
| protected static ShareResourceImpl | deserialiseResource(ShareManagerImpl manager, java.util.Map map)
try{
File root = new File(new String((byte[])map.get("file"), Constants.DEFAULT_ENCODING));
boolean recursive = ((Long)map.get("recursive")).longValue() == 1;
ShareResourceImpl res = new ShareResourceDirContentsImpl( manager, root, recursive, map );
return( res );
}catch( UnsupportedEncodingException e ){
throw( new ShareException( "internal error", e ));
}
| public ShareResource[] | getChildren()
return( children );
| public java.lang.String | getName()
return( root.toString());
| public java.io.File | getRoot()
return( root );
| public boolean | isRecursive()
return( recursive );
| protected void | serialiseResource(java.util.Map map)
super.serialiseResource( map );
map.put( "type", new Long(getType()));
map.put( "recursive", new Long(recursive?1:0));
try{
map.put( "file", root.toString().getBytes( Constants.DEFAULT_ENCODING));
}catch( UnsupportedEncodingException e ){
Debug.printStackTrace( e );
}
|
|