Subversion Repositories general

Rev

Rev 1046 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
924 dev 1
package ak.hostadmiral.core.model;
919 dev 2
 
1041 dev 3
import java.util.Collection;
4
import java.util.ArrayList;
5
import java.util.Iterator;
6
import java.util.Map;
7
import java.util.Comparator;
8
 
9
import ak.hostadmiral.util.ConfigInit;
1028 dev 10
import ak.hostadmiral.util.CollectionInfo;
924 dev 11
import ak.hostadmiral.util.ModelException;
12
import ak.hostadmiral.util.ModelSecurityException;
1041 dev 13
import ak.hostadmiral.core.model.store.InetDomainStore;
919 dev 14
 
15
public class InetDomainManager
1014 dev 16
	implements
1041 dev 17
		ConfigInit,
1014 dev 18
		UserBeforeDeleteListener,
19
		UserDeletingListener
919 dev 20
{
1041 dev 21
	private InetDomainStore store;
946 dev 22
 
1011 dev 23
	private Collection createdListeners      = new ArrayList();
24
	private Collection modifiedListeners     = new ArrayList();
949 dev 25
	private Collection beforeDeleteListeners = new ArrayList();
1014 dev 26
	private Collection deletingListeners     = new ArrayList();
1011 dev 27
	private Collection deletedListeners      = new ArrayList();
949 dev 28
 
1041 dev 29
	public InetDomainManager()
30
		throws ModelException
919 dev 31
	{
946 dev 32
		UserManager.getInstance().addBeforeDeleteListener(this);
1014 dev 33
		UserManager.getInstance().addDeletingListener(this);
919 dev 34
	}
35
 
36
	public InetDomain create(User editor)
37
		throws ModelException
38
	{
39
		if(!allowedToCreate(editor)) throw new ModelSecurityException();
40
 
41
		return new InetDomain();
42
	}
43
 
44
	public boolean allowedToCreate(User editor)
45
		throws ModelException
46
	{
921 dev 47
		return InetDomain.allowedToCreate(this, editor);
919 dev 48
	}
49
 
50
	public InetDomain get(User editor, Long id)
51
		throws ModelException
52
	{
1041 dev 53
		InetDomain domain = store.get(id);
919 dev 54
 
55
		if(!domain.viewableBy(editor))
56
			throw new ModelSecurityException();
57
 
58
		return domain;
59
	}
60
 
923 dev 61
	public boolean nameExists(User editor, InetDomain domain, String name)
62
		throws ModelException
63
	{
1041 dev 64
		return store.nameExists(domain, name);
923 dev 65
	}
66
 
1041 dev 67
	public InetDomain findForName(User editor, String name)
919 dev 68
		throws ModelException
69
	{
1041 dev 70
		InetDomain domain = store.findForName(name);
919 dev 71
 
1041 dev 72
		if(domain != null && !domain.viewableBy(editor))
73
			throw new ModelSecurityException();
74
 
75
		return domain;
919 dev 76
	}
77
 
946 dev 78
	public void save(User editor, InetDomain domain)
919 dev 79
		throws ModelException
80
	{
946 dev 81
		if(!domain.editableBy(editor))
919 dev 82
			throw new ModelSecurityException();
83
 
1011 dev 84
        boolean isNew = domain.isNew();
85
 
1010 dev 86
		//domain.setModUser(editor); // FIXME
919 dev 87
 
1041 dev 88
		store.save(domain);
1011 dev 89
 
90
        // inform listeners
91
        if(isNew) {
92
        	for(Iterator i = createdListeners.iterator(); i.hasNext(); ) {
93
        		InetDomainCreatedListener listener = (InetDomainCreatedListener)i.next();
94
    			listener.inetDomainCreated(editor, domain);
95
        	}
96
        }
97
        else {
98
            InetDomain oldDomain = domain.getOrigin();
99
            if(oldDomain == null) oldDomain = domain;
100
        	for(Iterator i = modifiedListeners.iterator(); i.hasNext(); ) {
101
        		InetDomainModifiedListener listener = (InetDomainModifiedListener)i.next();
102
    			listener.inetDomainModified(editor, domain, oldDomain);
103
        	}
104
        }
1045 dev 105
 
106
        // reset backup
107
        domain.resetOrigin();
919 dev 108
	}
109
 
1011 dev 110
    public void addCreatedListener(InetDomainCreatedListener listener)
949 dev 111
    {
1011 dev 112
    	createdListeners.add(listener);
113
    }
114
 
115
    public void removeCreatedListener(InetDomainCreatedListener listener)
116
    {
117
    	createdListeners.remove(listener);
118
    }
119
 
120
    public void addModifiedListener(InetDomainModifiedListener listener)
121
    {
122
    	modifiedListeners.add(listener);
123
    }
124
 
125
    public void removeModifiedListener(InetDomainModifiedListener listener)
126
    {
127
    	modifiedListeners.remove(listener);
128
    }
129
 
130
    public void addBeforeDeleteListener(InetDomainBeforeDeleteListener listener)
131
    {
949 dev 132
    	beforeDeleteListeners.add(listener);
133
    }
134
 
1011 dev 135
    public void removeBeforeDeleteListener(InetDomainBeforeDeleteListener listener)
949 dev 136
    {
137
    	beforeDeleteListeners.remove(listener);
138
    }
139
 
1014 dev 140
    public void addDeletingListener(InetDomainDeletingListener listener)
141
    {
142
    	deletingListeners.add(listener);
143
    }
144
 
145
    public void removeDeletingListener(InetDomainDeletingListener listener)
146
    {
147
    	deletingListeners.remove(listener);
148
    }
149
 
1011 dev 150
    public void addDeletedListener(InetDomainDeletedListener listener)
151
    {
152
    	deletedListeners.add(listener);
153
    }
154
 
155
    public void removeDeletedListener(InetDomainDeletedListener listener)
156
    {
157
    	deletedListeners.remove(listener);
158
    }
159
 
949 dev 160
    public Collection beforeDelete(User editor, InetDomain domain, Collection known)
919 dev 161
		throws ModelException
946 dev 162
    {
163
    	Collection cascade = new ArrayList();
949 dev 164
 
946 dev 165
    	for(Iterator i = beforeDeleteListeners.iterator(); i.hasNext(); ) {
166
    		InetDomainBeforeDeleteListener listener = (InetDomainBeforeDeleteListener)i.next();
949 dev 167
			Collection subcascade = listener.inetDomainBeforeDelete(editor, domain, known);
946 dev 168
    		if(subcascade != null)
169
    			cascade.addAll(subcascade);
170
    	}
949 dev 171
 
946 dev 172
    	return cascade;
173
    }
174
 
175
	public void delete(User editor, InetDomain domain)
176
		throws ModelException
919 dev 177
	{
1011 dev 178
	    // check rights
946 dev 179
		if(!domain.deleteableBy(editor))
919 dev 180
			throw new ModelSecurityException();
181
 
1014 dev 182
        // inform deleting listeners
183
    	for(Iterator i = deletingListeners.iterator(); i.hasNext(); ) {
184
    		InetDomainDeletingListener listener = (InetDomainDeletingListener)i.next();
185
			listener.inetDomainDeleting(editor, domain);
186
    	}
187
 
1011 dev 188
        // backup copy
189
        InetDomain oldDomain = new InetDomain(domain);
190
 
191
        // delete it
1041 dev 192
		store.delete(domain);
919 dev 193
 
1014 dev 194
        // inform deleted listeners
1011 dev 195
    	for(Iterator i = deletedListeners.iterator(); i.hasNext(); ) {
196
    		InetDomainDeletedListener listener = (InetDomainDeletedListener)i.next();
197
			listener.inetDomainDeleted(editor, oldDomain);
198
    	}
919 dev 199
	}
200
 
201
	public Collection listInetDomains(User editor)
202
		throws ModelException
203
	{
1028 dev 204
		return listInetDomains(null, 0, 0, null, editor);
205
	}
206
 
207
	public Collection listInetDomains(CollectionInfo info, int rowsPerPage, int pageNumber,
208
			Integer[] sortingKeys, User editor)
209
		throws ModelException
210
	{
1041 dev 211
		if(editor.isSuperuser())
212
			return store.listAllInetDomains(info, rowsPerPage, pageNumber, sortingKeys);
213
		else
214
			return store.listInetDomains(info, rowsPerPage, pageNumber, sortingKeys, editor);
919 dev 215
	}
216
 
217
	public boolean areInetDomainsAvailable(User editor)
218
		throws ModelException
219
	{
1041 dev 220
		if(editor.isSuperuser())
221
			return true;
222
		else
223
			return store.countInetDomainsAvailable(editor) > 0;
919 dev 224
	}
225
 
949 dev 226
	public Collection userBeforeDelete(User editor, User user, Collection known)
946 dev 227
		throws ModelException
919 dev 228
	{
1041 dev 229
        Collection domains = store.listOwnInetDomains(user);
919 dev 230
 
946 dev 231
    	Collection cascade = new ArrayList();
232
		for(Iterator i = domains.iterator(); i.hasNext(); ) {
233
			InetDomain d = (InetDomain)i.next();
1058 dev 234
			if(known.contains(d)) continue;
235
 
236
			known.add(d);
946 dev 237
            if(d.viewableBy(editor)) {
238
				if(d.deleteableBy(editor))
239
					cascade.add(new CascadeDeleteElement(d, CascadeDeleteElement.DELETE,
949 dev 240
						this.beforeDelete(editor, d, known)));
946 dev 241
				else
242
					cascade.add(new CascadeDeleteElement(d, CascadeDeleteElement.FORBIDDEN, null));
243
			}
244
			else {
245
				cascade.add(new CascadeDeleteElement(InetDomain.createLimitedCopy(d),
246
					CascadeDeleteElement.FORBIDDEN, null));
247
			}
248
		}
249
 
250
    	return cascade;
919 dev 251
	}
252
 
1014 dev 253
	public void userDeleting(User editor, User user)
254
		throws ModelException
255
	{
1041 dev 256
        Collection domains = store.listOwnInetDomains(user);
1014 dev 257
 
258
		for(Iterator i = domains.iterator(); i.hasNext(); ) {
259
			delete(editor, (InetDomain)i.next());
260
		}
261
	}
262
 
1028 dev 263
	public static final Integer SORT_NAME = new Integer(1);
264
 
919 dev 265
	public static final Comparator NAME_COMPARATOR = new NameComparator();
266
 
267
	private static class NameComparator
268
		implements Comparator
269
	{
270
		public int compare(Object o1, Object o2)
271
		{
272
			if(!(o1 instanceof InetDomain) || !(o2 instanceof InetDomain))
273
				throw new ClassCastException("not a InetDomain");
274
 
275
		    InetDomain a1 = (InetDomain)o1;
276
		    InetDomain a2 = (InetDomain)o2;
277
 
278
		    if(a1 == null && a2 == null)
279
		    	return 0;
280
		    else if(a1 == null && a2 != null)
281
		    	return -1;
282
		    else if(a1 != null && a2 == null)
283
		    	return 1;
284
		    else
285
		    	return a1.getName().compareToIgnoreCase(a2.getName());
286
		}
287
 
288
		public boolean equals(Object obj)
289
		{
290
			return (obj instanceof NameComparator);
291
		}
292
	}
1041 dev 293
 
294
	public void init(Map params)
295
		throws ModelException
296
	{
297
		try {
298
    		inetDomainManager = this;
299
 
1046 dev 300
			Class c = Class.forName(((String[])params.get("store"))[0]);
1041 dev 301
			store = (InetDomainStore)c.newInstance();
302
        }
303
        catch(Exception ex) {
304
        	throw new ModelException(ex);
305
        }
306
	}
307
 
308
	private static InetDomainManager inetDomainManager = null;
309
 
310
	public static InetDomainManager getInstance()
311
	{
312
		return inetDomainManager;
313
	}
919 dev 314
}