1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
|
// **********************************************************************
//
// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************
package FilesystemI;
import Ice.*;
import Filesystem.*;
public class DirectoryI extends _DirectoryDisp implements NodeI
{
// Slice name() operation.
public synchronized String
name(Current c)
{
if(_destroyed)
{
throw new ObjectNotExistException();
}
return _name;
}
// Return the object identity for this node.
public Identity
id()
{
return _id;
}
// Slice list() operation.
public synchronized NodeDesc[]
list(Current c)
{
if(_destroyed)
{
throw new ObjectNotExistException();
}
NodeDesc[] ret = new NodeDesc[_contents.size()];
java.util.Iterator<java.util.Map.Entry<String, NodeI> > pos = _contents.entrySet().iterator();
for(int i = 0; i < _contents.size(); ++i)
{
java.util.Map.Entry<String, NodeI> e = pos.next();
NodeI p = e.getValue();
ret[i] = new NodeDesc();
ret[i].name = e.getKey();
ret[i].type = p instanceof FileI ? NodeType.FileType : NodeType.DirType;
ret[i].proxy = NodePrxHelper.uncheckedCast(c.adapter.createProxy(p.id()));
}
return ret;
}
// Slice find() operation.
public synchronized NodeDesc
find(String name, Current c) throws NoSuchName
{
if(_destroyed)
{
throw new ObjectNotExistException();
}
NodeI p = _contents.get(name);
if(p == null)
{
throw new NoSuchName(name);
}
NodeDesc d = new NodeDesc();
d.name = name;
d.type = p instanceof FileI ? NodeType.FileType : NodeType.DirType;
d.proxy = NodePrxHelper.uncheckedCast(c.adapter.createProxy(p.id()));
return d;
}
// Slice createFile() operation.
public synchronized FilePrx
createFile(String name, Current c) throws NameInUse
{
if(_destroyed)
{
throw new ObjectNotExistException();
}
if(name.length() == 0 || _contents.containsKey(name))
{
throw new NameInUse(name);
}
FileI f = new FileI(name, this);
ObjectPrx node = c.adapter.add(f, f.id());
_contents.put(name, f);
return FilePrxHelper.uncheckedCast(node);
}
// Slice createDirectory() operation.
public synchronized DirectoryPrx
createDirectory(String name, Current c) throws NameInUse
{
if(_destroyed)
{
throw new ObjectNotExistException();
}
if(name.length() == 0 || _contents.containsKey(name))
{
throw new NameInUse(name);
}
DirectoryI d = new DirectoryI(name, this);
ObjectPrx node = c.adapter.add(d, d.id());
_contents.put(name, d);
return DirectoryPrxHelper.uncheckedCast(node);
}
// Slice destroy() operation.
public void
destroy(Current c) throws PermissionDenied
{
if(_parent == null)
{
throw new PermissionDenied("Cannot destroy root directory");
}
synchronized(this)
{
if(_destroyed)
{
throw new ObjectNotExistException();
}
if(_contents.size() != 0)
{
throw new PermissionDenied("Cannot destroy non-empty directory");
}
c.adapter.remove(id());
_destroyed = true;
}
_parent.removeEntry(_name);
}
// DirectoryI constructor for root directory.
public DirectoryI()
{
this("/", null);
}
// DirectoryI constructor. parent == null indicates root directory.
public DirectoryI(String name, DirectoryI parent)
{
_name = name;
_parent = parent;
_id = new Identity();
_destroyed = false;
_contents = new java.util.HashMap<String, NodeI>();
_id.name = parent == null ? "RootDir" : Util.generateUUID();
}
// Remove the entry from the _contents map.
public synchronized void
removeEntry(String name)
{
_contents.remove(name);
}
private String _name; // Immutable
private DirectoryI _parent; // Immutable
private Identity _id; // Immutable
private boolean _destroyed;
private java.util.Map<String, NodeI> _contents;
}
|