1 /**
2  * Created on May 28, 2003
3  *
4  * To demo the client side of the interfaces in which a 
5  * simple Client event results in the full exchange of files
6  * amoung various systems that need to exchange file-based data.
7  */
8 
9 /*
10 * Copyright (C) 2003  robert rowntree
11
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 * GNU General Public License for more details.
21
22 * ref. http://www.gnu.org/copyleft/gpl.html
23*/
24package com.borneo.client;
25
26import com.borneo.po.event.FileTopicHandler;
27import com.borneo.po.event.FileTopicType;
28import com.borneo.po.event.FileTopicEvent;
29import com.borneo.po.event.FileTopicEventFactory;
30
31import com.borneo.util.FileSelector;
32
33/** CLIENT-SIDE DATA-EVENT WRAPPER - Data inside wrapper was just
34 *  created and will be published. Create an event that wraps the 
35 *  data and then fire the event. 
36 * <p>Event handlers will take care of
37 *  subsequent process that will post the data to a daemon running
38 *  on some "distribution service". The dist service functions like
39 *  a standard "publisher" and will be responsible for all activities
40 *  that distribute the data to all subscribers.</p>
41 * @author r
42 *
43 * @args are delegated to another class
44 *   for description of command-line arguments see below:
45 *      class=com.borneo.po.event.FileTopicType
46 *      method=init 
47 * 
48 * The Listener Implementation is independent of the Event. 
49 * This allows for variety of behavior on the Client in response to
50 * the "FileCreated" events. For example, the demo's listener uses a 
51 * "push" of the Topic, FileName, and the DataHandle to the server.
52 * Alternate listen implementation might push an event with only the FileName(s)
53 * in which case the Server's implementation would have to respond with a
54 * "pull" request to actually get the files up there. This "pull" idea allows
55 * extra processing where the response to the file creation event is a server
56 * notify , followed by DB lookups. The lookups might, for 
57 * example, determine that the server is to use an "SSH" pull to acquire the 
58 * just created files from the client machine. Alternatively, the lookups could
59 * result in a third-party transfer being started somewhere else using Globus 
60 * protocol to direct a peer-to-peer transfer direct between source and target
61 * servers.
62 * TODO Note that the 
63 *  design permits a scenario where the trigger for the event is
64 * the insertion of an XML Root Node into a table containing "publishable" 
65 * chunks of XML. In this case the event signal's that the client has XML
66 * Node that needs to go remote machine(s) for consumption.
67 *      To accomplish this you abstract the FileTopic interface to a 
68 *      "ClientPublish" interface where the handle for what your 
69 *      about to publish is an abstraction that wraps either a resultSet
70 *      or a File...
71 */
72/* TODO
73 * Scalability ?? The event creation should be isolated ( separate thread )
74 *           from the handler responsible for processing the connection 
75 *          and for moving the files.
76 * fixme the code below is not quite correct behavior
77 * why? the code below constructs a new instance that 
78 * almost immediately afterward, becomes the source of the event.
79 * What you want is a more durable object in the VM on
80 * or very near the client machine that
81 * receives a message from this client. Message attrs. 
82 * include the topic and the Filname that i want to publish.
83 * The durable object already has a reference to the event
84 * source. The event source has already been told of 
85 * registered listeners to notify on the event.
86 * All it has to do is respond to the request to publish...
87 * endOF TODO
88*/
89public class FileEventClient {
90
91    public static void main(String[] args) {
92
93        FileTopicType ftype = new FileTopicType(args);      
94        FileTopicEvent ftevent = new FileTopicEventFactory().create(ftype);
95        ftevent.addActionListener( new FileTopicHandler() );
96        ftevent.fireActionEvent();  
97    }
98
99}
00