summaryrefslogtreecommitdiff
path: root/java/demo/Freeze/phonebook/PhoneBookI.java
blob: a5e2205a4eb96f6c5bf84f5d2949609cec10c220 (plain)
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
// **********************************************************************
//
// Copyright (c) 2003-2007 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.
//
// **********************************************************************

import Demo.*;

class PhoneBookI extends _PhoneBookDisp
{
    public ContactPrx
    createContact(Ice.Current current)
	throws DatabaseException
    {
	//
	// Generate a new unique identity.
	//
	Ice.Identity ident = new Ice.Identity();
	ident.name = Ice.Util.generateUUID();
	ident.category = "contact";

	//
	// Create a new Contact Servant.
	//
	ContactI contact = new ContactI(_contactFactory);
    
	//
	// Create a new Ice Object in the evictor, using the new
	// identity and the new Servant.
	//
	_evictor.add(contact, ident);

	return ContactPrxHelper.uncheckedCast(current.adapter.createProxy(ident));
    }

    public ContactPrx[]
    findContacts(String name, Ice.Current current)
	throws DatabaseException
    {
	try
	{
	    Ice.Identity[] identities = _index.find(name);

	    ContactPrx[] contacts = new ContactPrx[identities.length];
	    for(int i = 0; i < identities.length; ++i)
	    {
		contacts[i] = ContactPrxHelper.uncheckedCast
		    (current.adapter.createProxy(identities[i]));
	    }
	    return contacts;
	}
	catch(Freeze.DatabaseException ex)
	{
	    DatabaseException e = new DatabaseException();
	    e.message = ex.message;
	    throw e;
	}
    }

    public void
    setEvictorSize(int size, Ice.Current current)
	throws DatabaseException
    {
	//
	// No synchronization necessary, _evictor is immutable.
	//
	_evictor.setSize(size);
    }

    public void
    shutdown(Ice.Current current)
    {
	current.adapter.getCommunicator().shutdown();
    }

    PhoneBookI(Freeze.Evictor evictor, ContactFactory contactFactory, 
	       NameIndex index)
    {
	_evictor = evictor;
	_contactFactory = contactFactory;
	_index = index;
    }
    
    private Freeze.Evictor _evictor;
    private ContactFactory _contactFactory;
    private NameIndex _index;
}